Android इंटरफ़ेस डेफ़िनिशन लैंग्वेज (एआईडीएल) एक ऐसा टूल है जिसकी मदद से उपयोगकर्ता, आईपीसी को अलग रख सकते हैं. दिया गया इंटरफ़ेस (.aidl
में बताया गया है)
फ़ाइल) है, तो कई बिल्ड सिस्टम C++ या Java बनाने के लिए aidl
बाइनरी का इस्तेमाल करते हैं
बाइंडिंग, ताकि इस इंटरफ़ेस का इस्तेमाल सभी प्रोसेस में किया जा सके. भले ही,
रनटाइम या बिटनेस दिखा देता है.
AIDL का इस्तेमाल, Android में किसी भी प्रोसेस के बीच किया जा सकता है: प्लैटफ़ॉर्म कॉम्पोनेंट के बीच या ऐप्लिकेशन के बीच. हालांकि, इसका इस्तेमाल ऐप्लिकेशन के लिए एपीआई के तौर पर कभी नहीं किया जाता. उदाहरण के लिए, प्लैटफ़ॉर्म में SDK टूल का एपीआई लागू करने के लिए, AIDL का इस्तेमाल किया जा सकता है. हालांकि, SDK टूल के एपीआई के प्लैटफ़ॉर्म में कभी भी सीधे तौर पर AIDL एपीआई शामिल नहीं होते. एआईडीएल इस्तेमाल करने के तरीके से जुड़े दस्तावेज़ के लिए की मदद से, सीधे अपने काम करने के लिए Android डेवलपर दस्तावेज़ में दिया गया है. जब एआईडीएल का इस्तेमाल प्लैटफ़ॉर्म कॉम्पोनेंट के बीच में अलग-अलग अपडेट किया जाता है, जैसे APEXes के तौर पर (Android 10 और HAL के तौर पर Android 11), वर्शनिंग सिस्टम है. इसे इस नाम से जाना जाता है स्टेबल एआईडीएल का इस्तेमाल करना ज़रूरी है.
उदाहरण
यहां AIDL इंटरफ़ेस का उदाहरण दिया गया है:
package my.package;
import my.package.Baz; // defined elsewhere
interface IFoo {
void doFoo(Baz baz);
}
सर्वर प्रोसेस, इंटरफ़ेस को रजिस्टर करती है और उसे कॉल करने के लिए कहती है. इसके अलावा, क्लाइंट को कॉल किया जाता है प्रोसेस के ज़रिए उन इंटरफ़ेस पर कॉल किए जाते हैं. कई मामलों में, एक प्रोसेस दोनों क्लाइंट और एक सर्वर के रूप में भी जाना जाता है, क्योंकि हो सकता है कि यह एक से ज़्यादा इंटरफ़ेस का संदर्भ दे रहा हो. ज़्यादा के लिए एआईडीएल भाषा के बारे में जानकारी, यहां देखें एआईडीएल भाषा. इन इंटरफ़ेस का इस्तेमाल करने के लिए उपलब्ध अलग-अलग रनटाइम के बारे में ज़्यादा जानकारी के लिए, AIDL बैकएंड देखें. ये टाइप डिक्लेरेशन, किसी भाषा में क्लास डिक्लेरेशन की तरह ही होते हैं. हालांकि, ये सभी प्रोसेस में काम करते हैं.
यह कैसे काम करता है
कॉल करने के लिए, AIDL, बाइंडर कर्नेल ड्राइवर का इस्तेमाल करता है. कॉल करने पर, एक तरीका आइडेंटिफ़ायर और सभी ऑब्जेक्ट को बफ़र में पैक किया जाता है और किसी रिमोट प्रोसेस में कॉपी किया जाता है. वहां बाइंडर थ्रेड, डेटा पढ़ने के लिए इंतज़ार करती है. जब किसी बाइंडर थ्रेड को किसी लेन-देन का डेटा मिलता है, तो वह थ्रेड स्थानीय प्रोसेस में नेटिव स्टब ऑब्जेक्ट को खोजता है. इसके बाद, यह क्लास डेटा को अनपैक करती है और किसी स्थानीय इंटरफ़ेस ऑब्जेक्ट पर कॉल करती है. यह लोकल इंटरफ़ेस ऑब्जेक्ट, वह होता है जिसे सर्वर प्रोसेस बनाता और रजिस्टर करता है. जब एक ही प्रोसेस और एक ही बैकएंड में कॉल किए जाते हैं, तो कोई प्रॉक्सी ऑब्जेक्ट मौजूद नहीं होता. इसलिए, कॉल बिना पैकिंग या अनपैकिंग के सीधे तौर पर किए जाते हैं.
डिवाइस पर मौजूद सेवाओं के साथ इंटरैक्ट करना
Android में कुछ कमांड होते हैं, जिनकी मदद से डिवाइस पर मौजूद सेवाओं के साथ इंटरैक्ट किया जा सकता है. ऐसा करके देखें:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing