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