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