पैकेज

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

कुछ अपवादों के साथ, 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