Android 8.0 रिलीज़ में, यूएसबी कमांड को init
स्क्रिप्ट से हटाकर, नेटिव यूएसबी डेमन में ले जाया गया है. इससे बेहतर कॉन्फ़िगरेशन और कोड की भरोसेमंदता मिलती है. गैजेट फ़ंक्शन कॉन्फ़िगरेशन के लिए, init
स्क्रिप्ट (प्रॉपर्टी ट्रिगर) का इस्तेमाल, डिवाइस के हिसाब से गैजेट के ऑपरेशन करने के लिए किया जाता है.
पिछली रिलीज़ में, डिवाइस के हिसाब से ये कॉन्फ़िगरेशन, डिवाइस के हिसाब से init
स्क्रिप्ट (प्रॉपर्टी ट्रिगर का इस्तेमाल करके) के ज़रिए हासिल किए गए थे. हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल) डिज़ाइन पर स्विच करने से, इसे लागू करना काफ़ी आसान हो जाता है. इससे ये समस्याएं हल होती हैं:
- हो सकता है कि कर्नेल sysfs नोड में लिखने जैसे ऑपरेशन पूरे न हों, लेकिन प्रॉपर्टी ट्रिगर सेट करने वाले फ़्रेमवर्क कोड में वापस न भेजे जाएं. इस वजह से, फ़्रेमवर्क गलत तरीके से यह मान लेते हैं कि कार्रवाइयां पूरी हो गई हैं, भले ही वे चुपचाप विफल हो गई हों.
init
स्क्रिप्ट में सीमित संख्या में कार्रवाइयां होती हैं, जिन्हें लागू किया जा सकता है.
Android 12 रिलीज़ में, नेटवर्क कंट्रोल
मॉडल (एनसीएम) और एपीआई कॉल के लिए, यूएसबी गैजेट एचएएल (एचएएल का वर्शन नंबर और यूएसबी की स्पीड, दोनों दिखाने वाला एचएएल) की सुविधा जोड़ी गई है. यूएसबी एचएएल की मदद से उपलब्ध एपीआई कॉल के बारे में ज़्यादा जानकारी के लिए, android.hardware.usb
पैकेज की खास जानकारी देखें.
एचएएल और ट्रेबल
खास तौर पर डिवाइस के लिए बनी init
स्क्रिप्ट का इस्तेमाल, एचएएल लेयर के विकल्प के तौर पर किया गया था, ताकि खास तौर पर यूएसबी से जुड़ी कार्रवाइयां की जा सकें. सिस्टम की समस्याओं को डीबग करने के लिए, यूएसबी (ADB के ज़रिए) मुख्य इंटरफ़ेस है. यूएसबी कॉन्फ़िगरेशन करने के लिए नेटिव डीमन का इस्तेमाल करने से, फ़्रेमवर्क कोड पर निर्भरता खत्म हो जाती है. इसलिए, भले ही फ़्रेमवर्क क्रैश हो जाए, यूएसबी चलता रहेगा.
Android 8.0 में पेश किए गए Treble मॉडल के तहत, सभी एचएएल को सिस्टम सेवाओं से अलग रखा जाता है. साथ ही, उन्हें अपने नेटिव डेमन में चलाना ज़रूरी होता है. इससे, यूएसबी डेमन की ज़रूरत नहीं होती, क्योंकि एचएएल लेयर, यूएसबी डेमन के तौर पर भी काम करती है.
डिफ़ॉल्ट रूप से लागू होने वाला एचएएल, Android 8.0 से पहले के सभी डिवाइसों के लिए काम करता है. इसलिए, Android 8.0 से पहले के वर्शन वाले डिवाइसों के लिए, डिवाइस के हिसाब से कोई काम नहीं किया जाएगा. Android 8.0, यूएसबी पोर्ट के स्टेटस की जानकारी पाने और डेटा और पावर की भूमिकाओं को बदलने के लिए, एचएएल इंटरफ़ेस का इस्तेमाल करता है.
लागू करना
Android 8.0 पर लॉन्च होने वाले हर डिवाइस पर, नया यूएसबी एचएएल इंटरफ़ेस लागू होना चाहिए.
डिफ़ॉल्ट रूप से लागू होने वाले इस फ़ंक्शन से, Android 8.0 से पहले के वर्शन वाले डिवाइसों पर भी काम करना चाहिए. अगर डिवाइस, टाइप-सी पोर्ट की स्थिति की जानकारी देने के लिए dual_role_usb
क्लास का इस्तेमाल करता है, तो डिफ़ॉल्ट तरीके से लागू करना काफ़ी है. कुछ टाइप के नोड का मालिकाना हक, सिस्टम को ट्रांसफ़र करने के लिए, डिवाइस के हिसाब से बनी यूएसबी स्क्रिप्ट में मामूली बदलाव करने पड़ सकते हैं.