ภาษา AIDL จะใช้ภาษา Java อย่างคร่าวๆ ไฟล์ระบุ ของสัญญาอินเทอร์เฟซ รวมถึงข้อมูลประเภทต่างๆ และค่าคงที่ที่ใช้ในสัญญานี้
แพ็กเกจ
ไฟล์ AIDL ทุกไฟล์ขึ้นต้นด้วยแพ็กเกจที่ไม่บังคับซึ่งสอดคล้องกับแพ็กเกจ ในแบ็กเอนด์ต่างๆ การประกาศแพ็กเกจจะมีลักษณะดังนี้
package my.package;
เช่นเดียวกับ Java ไฟล์ AIDL จะต้องอยู่ในโครงสร้างโฟลเดอร์ที่ตรงกับ
ใหม่ ไฟล์ที่มีแพ็กเกจ my.package
ต้องอยู่ในโฟลเดอร์ my/package/
ประเภท
ในไฟล์ AIDL มีหลายตำแหน่งที่คุณระบุประเภทได้ ดูรายการประเภทที่รองรับในภาษา AIDL ได้ที่ ประเภทแบ็กเอนด์ AIDL
คำอธิบายประกอบ
หลายส่วนของคำอธิบายประกอบภาษา AIDL รองรับ สำหรับรายการ และที่ที่สามารถนำไปใช้ได้ โปรดดู คำอธิบายประกอบ AIDL
การนำเข้า
หากต้องการใช้ประเภทที่กำหนดในอินเทอร์เฟซอื่น คุณต้องเพิ่มทรัพยากร Dependency ในอินเทอร์เฟซ
ระบบบิลด์ ในโมดูล cc_*
และ java_*
Soong ซึ่งใช้ไฟล์ .aidl
ในส่วน srcs
โดยตรงของบิลด์แพลตฟอร์ม Android คุณจะเพิ่มไดเรกทอรีได้
โดยใช้ฟิลด์ aidl: { include_dirs: ... }
สำหรับการนำเข้าโดยใช้
aidl_interface
โปรดดู
ที่นี่
การนำเข้ามีลักษณะดังนี้
import some.package.Foo; // explicit import
เมื่อนำเข้าประเภทในแพ็กเกจเดียวกัน แพ็กเกจสามารถละเว้นได้ อย่างไรก็ตาม การละเว้นแพ็กเกจอาจทำให้เกิดข้อผิดพลาดในการนำเข้าที่กำกวมเมื่อประเภท ระบุโดยไม่มีแพ็กเกจและวางในเนมสเปซสากล (โดยทั่วไปจะเป็นทุกประเภท ควรเป็นเนมสเปซ):
import Foo; // same as my.package.Foo
กำหนดประเภท
โดยทั่วไปแล้วไฟล์ AIDL จะกําหนดประเภทที่จะใช้เป็นอินเทอร์เฟซ
อินเทอร์เฟซ
ตัวอย่างอินเทอร์เฟซ AIDL
interface ITeleport {
void teleport(Location baz, float speed);
String getName();
}
อินเทอร์เฟซจะกำหนดออบเจ็กต์ด้วยชุดเมธอด โดยอาจใช้วิธีใดวิธีหนึ่งต่อไปนี้
oneway
(oneway void doFoo()
) หรือซิงโครนัส หากกำหนดอินเทอร์เฟซเป็น
oneway
(oneway interface ITeleport {...}
) วิธีการทั้งหมดในนั้นคือ
โดยปริยาย oneway
ระบบจะจัดส่งเมธอดทางเดียวแบบไม่พร้อมกัน และไม่สามารถ
แสดงผลการค้นหา เมธอดทางเดียวจากชุดข้อความเดียวกันไปยังแฟ้มเดียวกันด้วย
ดำเนินการแบบต่อเนื่อง (แต่อาจเป็นไปได้ในเทรดที่ต่างกัน) สำหรับ
ดูชุดข้อความแบ็กเอนด์ AIDL เกี่ยวกับวิธีตั้งค่าเทรด
การจัดการ
เมธอดจะมีอาร์กิวเมนต์เป็นศูนย์หรือมากกว่าได้ อาร์กิวเมนต์ของเมธอดอาจ
in
, out
หรือ inout
สำหรับการพูดคุยว่าการดำเนินการนี้จะส่งผลต่อประเภทอาร์กิวเมนต์อย่างไร
ดู
AIDL แบ็กเอนด์จะช่วยกำหนดทิศทาง
พาร์เซล
หากต้องการคำอธิบายเกี่ยวกับวิธีสร้างพาร์เซลเฉพาะแบ็กเอนด์ แบ็กเอนด์ AIDL ที่กำหนดเอง พาร์เซล
Android 10 ขึ้นไปรองรับคำจำกัดความของไฟล์พาร์เซล ใน AIDL โดยตรง พัสดุประเภทนี้เรียกว่าพัสดุที่มีแบบมีโครงสร้าง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความเกี่ยวข้องของ AIDL ที่มีโครงสร้างและความเสถียรใน คอมไพเลอร์ AIDL และระบบบิลด์ของเรา โปรดดูหัวข้อแบบมีโครงสร้างกับแบบเสถียร AIDL
เช่น
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;
}
Enums
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
}
ค่าคงที่
อินเทอร์เฟซ AIDL ที่กำหนดเอง ไฟล์พาร์เซล และสหภาพยังมีจำนวนเต็มได้ด้วย และค่าคงที่ของสตริง เช่น
const @utf8InCpp String HAPPY = ":)";
const String SAD = ":(";
const byte BYTE_ME = 1;
const int ANSWER = 6 * 7;
นิพจน์คงที่
สามารถระบุค่าคงที่ AIDL ขนาดอาร์เรย์ และเครื่องมือแจกแจงได้โดยใช้ค่าคงที่ นิพจน์ นิพจน์สามารถใช้วงเล็บเพื่อซ้อนการดำเนินการได้ ค่าคงที่ ค่านิพจน์สามารถใช้กับค่าปริพันธ์หรือจำนวนลอยตัว
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
จะเป็น
บวกลงในค่าคงที่ เช่น 3u8
เพื่อแทนค่า byte
คำต่อท้ายนี้คือ
สำคัญเพื่อให้การคํานวณ เช่น 0xffu8 * 3
ถูกตีความเป็น -3
กับประเภท byte
ขณะที่ 0xff * 3
มีค่าเป็น 765
กับประเภท int
โอเปอเรเตอร์ที่รองรับมี C++ และความหมายของ Java เรียงลำดับจากต่ำสุดไป
ที่มีลำดับความสำคัญสูงสุด
โอเปอเรเตอร์ไบนารีคือ
|| && | ^ & == != < > <= >= << >> + - * / %
โอเปอเรเตอร์แบบรวมคือ + - ! ~