कुछ अपवादों के साथ, HIDL इंटरफ़ेस पैकेज यहां मौजूद होते हैं:
hardware/interfaces
या vendor/
डायरेक्ट्री. कॉन्टेंट बनाने
hardware/interfaces
शीर्ष-स्तरीय मैप सीधे
android.hardware
पैकेज नेमस्पेस; यह वर्शन एक सबडायरेक्ट्री है
नाम स्थान पैकेज (इंटरफ़ेस नहीं) के अंतर्गत.
hidl-gen
कंपाइलर, .hal
फ़ाइलों को इसमें इकट्ठा करता है
.h
और .cpp
फ़ाइलों का सेट. अपने-आप जनरेट हुए इन विज्ञापनों से
एक शेयर की गई लाइब्रेरी को फ़ाइलें भेजता है, जिसके साथ क्लाइंट/सर्वर इंप्लीमेंटेशन लिंक करके बनाया जाता है.
इस शेयर की गई लाइब्रेरी को बनाने वाली Android.bp
फ़ाइल है
hardware/interfaces/update-makefiles.sh
ने अपने-आप जनरेट किया है
स्क्रिप्ट. हर बार hardware/interfaces
में कोई नया पैकेज जोड़ने पर या
किसी मौजूदा पैकेज में .hal
फ़ाइलें जोड़ें/हटाएं, तो आपको उसे फिर से चलाना होगा
स्क्रिप्ट का इस्तेमाल करके पक्का किया जा सकता है कि शेयर की गई जनरेट की गई लाइब्रेरी अप-टू-डेट हो.
उदाहरण के लिए, IFoo.hal
सैंपल फ़ाइल
hardware/interfaces/samples/1.0
. सैंपल
IFoo.hal
फ़ाइल,
सैंपल पैकेज:
package android.hardware.samples@1.0; interface IFoo { struct Foo { int64_t someValue; handle myHandle; }; someMethod() generates (vec<uint32_t>); anotherMethod(Foo foo) generates (int32_t ret); };
जनरेट की गई फ़ाइलें
HIDL पैकेज में अपने-आप जनरेट हुई फ़ाइलें, एक ही शेयर किए गए फ़ोल्डर में लिंक की जाती हैं
पैकेज के नाम वाली लाइब्रेरी (उदाहरण के लिए,
android.hardware.samples@1.0
). शेयर की गई लाइब्रेरी
सिंगल हेडर, IFoo.h
, जिसे क्लाइंट और
सर्वर. IFoo.hal
के साथ hidl-gen
कंपाइलर का इस्तेमाल करना
इंटरफ़ेस फ़ाइल को इनपुट के तौर पर इस्तेमाल किया है. बाइंडराइज़्ड मोड में ये अपने-आप जनरेट होते हैं
फ़ाइलें:
पहला डायग्राम. कंपाइलर से जनरेट की गई फ़ाइलें.
IFoo.h
. शुद्धIFoo
का वर्णन करता है C++ क्लास में इंटरफ़ेस; इसमेंIFoo.hal
फ़ाइल मेंIFoo
इंटरफ़ेस, C++ में अनुवाद किया गया टाइप करें. इसमें शामिल नहीं है इस इंटरफ़ेस को लागू करने के लिए, आरपीसी तकनीक (उदाहरण के लिए,HwBinder
) का इस्तेमाल किया जाता है. क्लास को पैकेज और वर्शन के साथ नेमस्पेस किया जाता है, उदाहरण के लिए,::android::hardware::samples::IFoo::V1_0
. क्लाइंट और सर्वर दोनों यह हेडर शामिल करें: इस पर कॉल करने के तरीकों और सर्वर के लिए उन तरीकों को लागू करना.IHwFoo.h
. हेडर फ़ाइल, जिसमें यह शामिल है इंटरफ़ेस में इस्तेमाल किए जाने वाले डेटा टाइप को क्रम से लगाने वाले फ़ंक्शन के लिए एलान. डेवलपर को कभी भी अपना हेडर सीधे तौर पर शामिल नहीं करना चाहिए (इसमें कोई हेडर क्लास) में सेव किया जाता है.BpHwFoo.h
. इससे इनहेरिट करने वाली क्लासIFoo
औरHwBinder
प्रॉक्सी (क्लाइंट-साइड) की जानकारी देता है इंटरफ़ेस को लागू करना. डेवलपर को कभी भी इस क्लास का रेफ़रंस नहीं देना चाहिए सकता है.BnHwFoo.h
. एक क्लास जिसमेंIFoo
को लागू करने का संदर्भ देता है औरHwBinder
इंटरफ़ेस का स्टब (सर्वर-साइड) लागू करना. डेवलपर को कभी भी सीधे तौर पर इस क्लास का रेफ़रंस नहीं देना चाहिए.FooAll.cpp
. एक ऐसी क्लास जिसमेंHwBinder
प्रॉक्सी औरHwBinder
स्टब. जब कोई क्लाइंट इंटरफ़ेस तरीके को कॉल करता है, तो प्रॉक्सी क्लाइंट के आर्ग्युमेंट को अपने-आप मार्शल कर देता है और ट्रांज़ैक्शन भेजता है बाइंडर कर्नेल ड्राइवर को भेजे जाते हैं, जो ट्रांज़ैक्शन को दूसरी तरफ़ (जो इसके बाद असल सर्वर लागू करता है).
फ़ाइलों का स्ट्रक्चर, इन फ़ाइलों की तरह ही जनरेट किया गया है
aidl-cpp
(ज़्यादा जानकारी के लिए, इसमें "पासथ्रू मोड" देखें
एचआईडीएल की खास जानकारी). सिर्फ़
अपने-आप जनरेट होने वाली वह फ़ाइल जो HIDL इस्तेमाल की जाने वाली RPC तकनीक से अलग है
IFoo.h
; अन्य सभी फ़ाइलें, HwBinder RPC प्रोसेस से जुड़ी होती हैं
HIDL. इसलिए, क्लाइंट और सर्वर को लागू कभी नहीं करना चाहिए
IFoo
के अलावा, कोई और रेफ़रंस हो. लक्ष्य हासिल करना
इसमें, सिर्फ़ IFoo.h
को शामिल करें और जनरेट किए गए शेयर से लिंक करें
लाइब्रेरी.
शेयर की गई लाइब्रेरी का लिंक
पैकेज में किसी भी इंटरफ़ेस का इस्तेमाल करने वाले क्लाइंट या सर्वर को इनमें से एक (1) में उस पैकेज की शेयर की गई लाइब्रेरी जगहें:
- Android.mk में:
LOCAL_SHARED_LIBRARIES += android.hardware.samples@1.0
- Android.bp में:
shared_libs: [ /* ... */ "android.hardware.samples@1.0", ],
अन्य लाइब्रेरी जिन्हें आपको शामिल करना पड़ सकता है:
libhidlbase |
इसमें स्टैंडर्ड HIDL डेटा टाइप शामिल हैं. Android में शुरू हो रहा है
10, इसमें वे सभी सिंबल शामिल होते हैं जो पहले
libhidltransport और
libhwbinder .
|
---|---|
libhidltransport |
यह अलग-अलग RPC/IPC मैकेनिज़्म पर HIDL कॉल ट्रांसफ़र करने का काम करता है. Android 10 इस लाइब्रेरी का इस्तेमाल रोक रहा है. |
libhwbinder |
बाइंडर-खास चिह्न. Android 10 इस लाइब्रेरी का बहिष्कार करती है. |
libfmq |
तेज़ी से मैसेज की सूची बनाने वाली आईपीसी. |
नाम स्थान
HIDL फ़ंक्शन और टाइप, जैसे कि Return<T>
और
Void()
का एलान नेमस्पेस ::android::hardware
में किया गया है.
किसी पैकेज का C++ नेमस्पेस, पैकेज के नाम और उसके वर्शन के हिसाब से तय किया जाता है.
उदाहरण के लिए, mypackage वाला कोई पैकेज
hardware/interfaces
की क्वालिटी ये हैं:
- C++ नेमस्पेस यह है
::android::hardware::mypackage::V1_2
IMyInterface
में से पूरी तरह क्वालिफ़ाइड नाम पैकेज है:::android::hardware::mypackage::V1_2::IMyInterface
. (IMyInterface
एक आइडेंटिफ़ायर है, नेमस्पेस का हिस्सा नहीं है).- पैकेज की
types.hal
फ़ाइल में बताए गए टाइप की पहचान इस रूप में की जाती है:::android::hardware::mypackage::V1_2::MyPackageType