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

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

AIDL का इस्तेमाल, Android में किसी भी प्रोसेस के बीच किया जा सकता है. जैसे, प्लैटफ़ॉर्म कॉम्पोनेंट के बीच या ऐप्लिकेशन के बीच. हालांकि, इसका इस्तेमाल कभी भी ऐप्लिकेशन के लिए एपीआई के तौर पर नहीं किया जाता. प्लेटफ़ॉर्म में एसडीके एपीआई को लागू करने के लिए, AIDL का इस्तेमाल किया जा सकता है. हालांकि, एसडीके एपीआई की सतह में सीधे तौर पर AIDL एपीआई कभी शामिल नहीं होते. ऐप्लिकेशन के बीच सीधे तौर पर AIDL का इस्तेमाल करने के तरीके के बारे में दस्तावेज़ देखने के लिए, Android डेवलपर का दस्तावेज़ देखें. जब अलग-अलग अपडेट किए गए प्लैटफ़ॉर्म कॉम्पोनेंट के बीच एआईडीएल का इस्तेमाल किया जाता है, तो स्टेबल एआईडीएल के नाम से जाने जाने वाले वर्शनिंग सिस्टम का इस्तेमाल करना ज़रूरी है. जैसे, Android 10 से शुरू होने वाले APEX या 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