एआईडीएल के बारे में खास जानकारी

Android इंटरफ़ेस डेफ़िनिशन लैंग्वेज (एआईडीएल) एक ऐसा टूल है जिसकी मदद से लोग, आईपीसी के दायरे को कम कर सकते हैं. .aidl फ़ाइल में बताए गए इंटरफ़ेस में, कई बिल्ड सिस्टम C++ या Java बाइंडिंग बनाने के लिए aidl बाइनरी का इस्तेमाल करते हैं. इससे सभी प्रोसेस में इस इंटरफ़ेस का इस्तेमाल किया जा सकता है, भले ही रनटाइम या बिटनेस कुछ भी हो.

एआईडीएल का इस्तेमाल Android में किसी भी प्रोसेस के बीच किया जा सकता है: जैसे, प्लैटफ़ॉर्म कॉम्पोनेंट के बीच या ऐप्लिकेशन के बीच. हालांकि, इसका इस्तेमाल ऐप्लिकेशन के लिए एपीआई के तौर पर कभी नहीं किया जाता. उदाहरण के लिए, एआईडीएल का इस्तेमाल प्लैटफ़ॉर्म में SDK API को लागू करने के लिए किया जा सकता है, लेकिन SDK API प्लैटफ़ॉर्म में कभी भी सीधे तौर पर AIDL API शामिल नहीं होते. ऐप्लिकेशन के बीच एआईडीएल का इस्तेमाल सीधे तौर पर करने के तरीके की जानकारी के लिए, इससे जुड़ा Android डेवलपर दस्तावेज़ देखें. अगर एआईडीएल का इस्तेमाल प्लैटफ़ॉर्म कॉम्पोनेंट के बीच अलग-अलग अपडेट किया जाता है, जैसे कि APEX (Android 10 और Android 11 से शुरू होने वाले एचएएल) या फिर Android 11 और उसके बाद के वर्शन में अपडेट किए जाने वाले एचएएल वर्शन, तो स्टेबल एआईडीएल नाम के वर्शनिंग सिस्टम का इस्तेमाल किया जाना चाहिए.

उदाहरण

यहां AIDL इंटरफ़ेस का उदाहरण दिया गया है:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

सर्वर प्रोसेस, इंटरफ़ेस को रजिस्टर करके उसे कॉल करती है. साथ ही, क्लाइंट प्रोसेस उन इंटरफ़ेस को कॉल करती है. कई मामलों में, प्रोसेस एक क्लाइंट और सर्वर, दोनों के रूप में काम करती है, क्योंकि हो सकता है कि वह एक से ज़्यादा इंटरफ़ेस का संदर्भ दे रही हो. एआईडीएल भाषा के बारे में ज़्यादा जानकारी के लिए, एआईडीएल भाषा देखें. इन इंटरफ़ेस का इस्तेमाल करने के लिए उपलब्ध अलग-अलग रनटाइम के बारे में ज़्यादा जानकारी के लिए, AIDL बैकएंड देखें. इस तरह की सूचनाएँ, किसी खास भाषा में क्लास में किए जाने वाले एलान की तरह होती हैं. हालाँकि, ये सभी प्रोसेस के साथ काम करती हैं.

स्पेस कैसे काम करता है

एआईडीएल कॉल करने के लिए, बाइंडर कर्नेल ड्राइवर का इस्तेमाल करता है. जब कोई कॉल किया जाता है, तो मेथड आइडेंटिफ़ायर और सभी ऑब्जेक्ट, बफ़र में पैक हो जाते हैं. इसके बाद, इन्हें रिमोट प्रोसेस में कॉपी कर दिया जाता है. इसके बाद, डेटा को पढ़ने के लिए बाइंडर थ्रेड इंतज़ार करती है. जब बाइंडर थ्रेड को ट्रांज़ैक्शन के लिए डेटा मिलता है, तब लोकल प्रोसेस में थ्रेड एक नेटिव स्टब ऑब्जेक्ट खोजता है. इसके बाद, यह क्लास डेटा को अनपैक करती है और लोकल इंटरफ़ेस ऑब्जेक्ट पर कॉल करती है. यह लोकल इंटरफ़ेस ऑब्जेक्ट ही ऐसा है जिसे सर्वर प्रोसेस बनाता और रजिस्टर करता है. जब एक ही प्रोसेस और एक ही बैकएंड में कॉल किए जाते हैं, तो कोई प्रॉक्सी ऑब्जेक्ट मौजूद नहीं होता. इस वजह से, कॉल डायरेक्ट होते हैं. इसके लिए, उन्हें पैकिंग या अनपैक करने की ज़रूरत नहीं होती.

डिवाइस पर सेवाओं से इंटरैक्ट करें

डिवाइस पर सेवाओं के साथ इंटरैक्ट करने की अनुमति देने के लिए, Android में कुछ निर्देश दिए जाते हैं. ऐसा करके देखें:

    adb shell dumpsys --help # listing and dumping services
    adb shell service --help # sending commands to services for testing