โมดูลส่วนขยาย SDK จะกำหนดระดับ SDK ส่วนขยายของอุปกรณ์และ จัดเตรียม API ให้แอปค้นหาระดับ SDK ส่วนขยาย โมดูลนี้อัปเดตได้ ซึ่งหมายความว่าสามารถรับการอัปเดตฟังก์ชันการทำงานนอกรอบการเผยแพร่ Android ปกติได้
ส่วนขยาย SDK มีหน้าที่รับผิดชอบในเรื่องต่อไปนี้
- การกำหนดระดับ SDK ของส่วนขยายของอุปกรณ์
- จัดเตรียม API ให้แอปค้นหาระดับ SDK ของส่วนขยาย
- (เริ่มตั้งแต่ Android 12) การกำหนดค่าสำหรับตัวแปรสภาพแวดล้อม
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
และSYSTEMSERVERCLASSPATH
รูปแบบโมดูล
โมดูลส่วนขยาย SDK (com.android.sdkext
) อยู่ในรูปแบบ
APEX และพร้อมใช้งานสำหรับอุปกรณ์
ที่ใช้ Android 11 ขึ้นไป
รูปแบบแพ็กเกจ
โมดูลส่วนขยาย SDK (com.google.android.sdkext
) อยู่ในรูปแบบ APEX และมีคอมโพเนนต์ต่อไปนี้
(เริ่มตั้งแต่ Android 12)
bin/derive_classpath
: ไบนารีเนทีฟที่ทำงานในช่วงต้นของกระบวนการ การบูตอุปกรณ์ โดยจะอ่านไฟล์การกำหนดค่า classpath แต่ละไฟล์จากระบบและโมดูลอื่นๆ ผสานรวมไฟล์เหล่านั้น และกำหนดคำจำกัดความของCLASSPATH
ตัวแปรสภาพแวดล้อมbin/derive_sdk
: ไบนารีเนทีฟที่ทํางานในช่วงต้นของกระบวนการบูตอุปกรณ์ และอ่านข้อมูลเมตาของโมดูลอื่นๆ เพื่อตั้งค่าพร็อพเพอร์ตี้ของระบบที่เกี่ยวข้องกับ Extension SDK (เช่นbuild.version.extensions.r
)javalib/framework-sdkextension.jar
: ไฟล์นี้อยู่ใน Bootclasspath ที่ แสดง API ให้แอปใช้เพื่อค้นหาระดับ SDK ของส่วนขยาย
กำหนดระดับ SDK ของส่วนขยาย
derive_sdk
โปรแกรมจะอ่านข้อมูลเมตาที่จัดเก็บเป็นไฟล์ Protobuf แบบไบนารีในเส้นทางย่อย
etc/sdkinfo.binarypb
ภายในแต่ละโมดูล APEX โปรดดูรายละเอียดเกี่ยวกับโครงสร้าง protobuf
ในไฟล์
protobuf
อ่านระดับ SDK ของส่วนขยาย
โมดูลส่วนขยาย SDK จะแสดงคลาส
SdkExtensions
Java ในแพ็กเกจ android.os.ext
ใช้เมธอด getExtensionVersion(int)
เพื่ออ่านเวอร์ชันของส่วนขยาย SDK (เช่น
getExtensionVersion(Build.VERSION_CODES.R)
)
สร้างเส้นทางคลาส
derive_classpath
บริการจะอ่านและผสานไฟล์การกำหนดค่าแต่ละไฟล์ใน
/system/etc/classpaths/
และ /apex/*/etc/classpaths/
การกำหนดค่าแต่ละรายการจะจัดเก็บข้อความ protobuf จาก classpaths.proto
ในรูปแบบไบนารีของ Proto อัลกอริทึมการผสานที่แน่นอนซึ่งกำหนดลำดับ
ของรายการในเส้นทางคลาสอธิบายไว้ใน
derive_classpath.cpp
และอาจเปลี่ยนแปลงเมื่อเวลาผ่านไป