AIDL की भाषा आम तौर पर Java की भाषा पर आधारित होती है. फ़ाइलें एक इंटरफ़ेस अनुबंध और इस अनुबंध में इस्तेमाल किए गए विभिन्न डेटा प्रकार और स्थिरांक हैं.
पैकेज
हर एआईडीएल फ़ाइल एक वैकल्पिक पैकेज से शुरू होती है, जो पैकेज से जुड़ी होती है नाम अलग-अलग बैकएंड में हो सकते हैं. पैकेज का एलान इस तरह दिखता है:
package my.package;
Java की तरह ही, एआईडीएल फ़ाइलें भी फ़ोल्डर की
पैकेज. my.package
पैकेज वाली फ़ाइलें, my/package/
फ़ोल्डर में होनी चाहिए.
प्रकार
एआईडीएल फ़ाइलों में कई जगहें होती हैं, जहां टाइप के बारे में बताया जा सकता है. एआईडीएल भाषा में इस्तेमाल होने वाले टाइप की पूरी सूची देखने के लिए, देखें एआईडीएल बैकएंड टाइप.
एनोटेशन
एआईडीएल भाषा के कई हिस्से एनोटेशन के साथ काम करते हैं. इनकी सूची के लिए एनोटेशन क्या हैं और उन्हें कहां लागू किया जा सकता है. यहां जाकर देखें कि एआईडीएल एनोटेशन.
इंपोर्ट
अन्य इंटरफ़ेस में बताए गए टाइप इस्तेमाल करने के लिए, आपको पहले
बिल्ड सिस्टम. cc_*
और java_*
सूंग मॉड्यूल में, .aidl
फ़ाइलें इस्तेमाल की जाती हैं
Android प्लैटफ़ॉर्म बिल्ड में, सीधे srcs
में जाकर डायरेक्ट्री जोड़ी जा सकती हैं
aidl: { include_dirs: ... }
फ़ील्ड का इस्तेमाल करके. इसका इस्तेमाल करके इंपोर्ट करने के लिए
aidl_interface
, देखें
यहां क्लिक करें.
इंपोर्ट कुछ ऐसा दिखेगा:
import some.package.Foo; // explicit import
एक ही पैकेज में एक टाइप इंपोर्ट करते समय, पैकेज को हटाया जा सकता है. हालांकि, पैकेज को छोड़ने पर, हो सकता है कि जिसे पैकेज के बिना तय किया जाता है और ग्लोबल नेमस्पेस में डाला जाता है (आम तौर पर, सभी टाइप के नेमस्पेस होना चाहिए):
import Foo; // same as my.package.Foo
टाइप तय करें
आम तौर पर, एआईडीएल फ़ाइलें इंटरफ़ेस के तौर पर इस्तेमाल होने वाले टाइप तय करती हैं.
इंटरफ़ेस
यहां AIDL इंटरफ़ेस का उदाहरण दिया गया है:
interface ITeleport {
void teleport(Location baz, float speed);
String getName();
}
इंटरफ़ेस कई तरीकों से किसी ऑब्जेक्ट को तय करता है. तरीकों में से कोई एक
oneway
(oneway void doFoo()
) या सिंक्रोनस. अगर किसी इंटरफ़ेस को
oneway
(oneway interface ITeleport {...}
), तो इसमें मौजूद सभी तरीकों से
साफ़ तौर पर oneway
. एकतरफ़ा विधियों को एसिंक्रोनस रूप से भेजा जाता है
कोई नतीजा दिखाएं. एक ही थ्रेड से एक ही बाइंडर में जाने के एकतरफ़ा तरीके भी उपलब्ध हैं
क्रम से एक्ज़ीक्यूट करें (हालांकि संभावित तौर पर अलग-अलग थ्रेड पर).
थ्रेड सेट अप करने के तरीक़े के बारे में जानने के लिए, AIDL बैकएंड थ्रेड देखें
मैनेजमेंट.
तरीकों में शून्य या उससे ज़्यादा आर्ग्युमेंट हो सकते हैं. तरीकों के लिए तर्क ऐसे हो सकते हैं
in
, out
या inout
. इससे आर्ग्युमेंट टाइप पर क्या असर पड़ता है, यह जानने के लिए,
देखें
एआईडीएल बैकएंड की डायरेक्शनलिटी.
पार्स किए जा सकने वाले
बैकएंड के हिसाब से पार्स किए जा सकने वाले पार्सल बनाने के तरीके के बारे में जानने के लिए, एआईडीएल बैकएंड कस्टम पार्सल किए जा सकने वाले प्रॉडक्ट.
Android 10 और उसके बाद के वर्शन के साथ काम करने वाली परिभाषाएं, जिन्हें पार्स किया जा सकता है सीधे एआईडीएल में भेज सकते हैं. इस तरह के पार्सल को स्ट्रक्चर्ड पार्सल कहते हैं. स्ट्रक्चर्ड और स्टेबल एआईडीएल के बीच संबंध के बारे में ज़्यादा जानने के लिए, एआईडीएल कंपाइलर और हमारा बिल्ड सिस्टम, स्ट्रक्चर्ड बनाम स्टेबल एआईडीएल.
उदाहरण के लिए:
package my.package;
import my.package.Boo;
parcelable Baz {
@utf8InCpp String name = "baz";
Boo boo;
}
यूनियन
Android 12 और उसके बाद के वर्शन के लिए सहायता यूनियन के एलान. उदाहरण के लिए:
package my.package;
import my.package.FooSettings;
import my.package.BarSettings;
union Settings {
FooSettings fooSettings;
BarSettings barSettings;
@utf8InCpp String str;
int number;
}
इनम्स
Android 11 और उसके बाद वाले वर्शन के लिए, Enum की जानकारी का एलान. उदाहरण के लिए:
package my.package;
enum Boo {
A = 1 * 4,
B = 3,
}
नेस्ट किए गए टाइप के एलान
Android 13 और उसके बाद के वर्शन पर, नेस्ट किए गए टाइप की जानकारी का इस्तेमाल किया जा सकता है. उदाहरण के लिए:
package my.package;
import my.package.Baz;
interface IFoo {
void doFoo(Baz.Nested nested); // defined in my/package/Baz.aidl
void doBar(Bar bar); // defined below
parcelable Bar { ... } // nested type definition
}
स्थिरांक
पसंद के मुताबिक बनाए गए एआईडीएल इंटरफ़ेस, पार्स किए जा सकने वाले एलिमेंट, और यूनियन में भी पूर्णांक शामिल किया जा सकता है और स्ट्रिंग कॉन्सटेंट, जैसे:
const @utf8InCpp String HAPPY = ":)";
const String SAD = ":(";
const byte BYTE_ME = 1;
const int ANSWER = 6 * 7;
कॉन्सटेंट एक्सप्रेशन
एआईडीएल कॉन्सटेंट, अरे साइज़, और एन्यूमरेटर को कॉन्स्टेंट का इस्तेमाल करके तय किया जा सकता है एक्सप्रेशन के बारे में भी बताया गया है. एक्सप्रेशन, नेस्ट करने के लिए ब्रैकेट का इस्तेमाल कर सकते हैं. लगातार एक्सप्रेशन वैल्यू का इस्तेमाल इंटीग्रल या फ़्लोट वैल्यू के साथ किया जा सकता है.
true
और false
की लिटरल वैल्यू, बूलियन वैल्यू दिखाती हैं. .
वाली वैल्यू, लेकिन
3.8
जैसे सफ़िक्स के बिना, डबल वैल्यू मानी जाती हैं. फ़्लोट
वैल्यू में f
सफ़िक्स होता है, जैसे कि 2.4f
. l
या
L
सफ़िक्स, 64-बिट लंबी वैल्यू दिखाता है. नहीं तो, इंटिग्रल वैल्यू को
8-बिट (बाइट), 32-बिट (int) के बीच का सबसे छोटा मान-संरक्षित टाइप,
और 64-बिट (लंबा) हो. इसलिए, 256
को int
माना जाता है, लेकिन 255 + 1
byte
0
के लिए ओवरफ़्लो होता है. 0x3
जैसी हेक्स वैल्यू को सबसे पहले समझा जाता है
32-बिट और 64-बिट के बीच का सबसे छोटा, बिना साइन वाला टाइप, वैल्यू की बचत करता है
और फिर उसे अहस्ताक्षरित मान के रूप में दोबारा समझ लिया है. इसलिए, 0xffffffff
की वैल्यू int
है
-1
. Android 13 की शुरुआत में, सफ़िक्स u8
ऐसा हो सकता है
byte
वैल्यू को दिखाने के लिए, 3u8
जैसे कॉन्सटेंट में जोड़ा जाता है. यह प्रत्यय है
ज़रूरी है, ताकि 0xffu8 * 3
जैसे किसी कैलकुलेशन को -3
समझा जाए
टाइप byte
है, जबकि 0xff * 3
765
है, जिसका टाइप int
है.
काम करने वाले ऑपरेटर में C++ और Java सिमेंटिक्स हैं. सबसे कम से लेकर
सबसे ज़्यादा प्राथमिकता वाले बाइनरी ऑपरेटर हैं
|| && | ^ & == != < > <= >= << >> + - * / %
. यूनरी ऑपरेटर + - ! ~
हैं.