एआईडीएल अवलोकन,एआईडीएल अवलोकन

एंड्रॉइड इंटरफ़ेस डेफिनिशन लैंग्वेज (एआईडीएल) एक उपकरण है जो उपयोगकर्ताओं को आईपीसी का सार निकालने देता है। एक इंटरफ़ेस (एक .aidl फ़ाइल में निर्दिष्ट) को देखते हुए, विभिन्न बिल्ड सिस्टम C++ या Java बाइंडिंग के निर्माण के लिए aidl बाइनरी का उपयोग करते हैं ताकि इस इंटरफ़ेस का उपयोग प्रक्रियाओं में किया जा सके, रनटाइम या बिटनेस की परवाह किए बिना।

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

उदाहरण

यहां एआईडीएल इंटरफ़ेस का एक उदाहरण दिया गया है:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

एक सर्वर प्रक्रिया एक इंटरफ़ेस पंजीकृत करती है और उस पर कॉल करती है, और एक क्लाइंट प्रक्रिया उन इंटरफ़ेस पर कॉल करती है। कई मामलों में, एक प्रक्रिया क्लाइंट और सर्वर दोनों के रूप में कार्य करती है क्योंकि यह कई इंटरफेस को संदर्भित कर सकती है। एआईडीएल भाषा के बारे में अधिक जानकारी के लिए, एआईडीएल भाषा देखें। इन इंटरफेस का उपयोग करने के लिए उपलब्ध विभिन्न रनटाइम के बारे में अधिक जानकारी के लिए, एआईडीएल बैकएंड देखें। इस प्रकार की घोषणाएँ बिल्कुल किसी दी गई भाषा में वर्ग घोषणा की तरह होती हैं, लेकिन वे सभी प्रक्रियाओं में काम करती हैं।

यह काम किस प्रकार करता है

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

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

एंड्रॉइड डिवाइस पर सेवाओं के साथ इंटरैक्ट करने की अनुमति देने के लिए कुछ कमांड के साथ आता है। कोशिश करना:

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