โมดูลส่วนขยาย 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
: ไฟล์ไบนารีแบบเนทีฟที่ทำงานในช่วงต้นของกระบวนการบูตอุปกรณ์ และอ่านข้อมูลเมตาของโมดูลอื่นๆ เพื่อตั้งค่าพร็อพเพอร์ตี้ของระบบที่เกี่ยวข้องกับ SDK ส่วนขยาย (เช่นbuild.version.extensions.r
)javalib/framework-sdkextension.jar
: ไฟล์นี้อยู่ในบูตไนพแอตที่นำ API ไปแสดงต่อแอปเพื่อค้นหาระดับ SDK ของส่วนขยาย
ดึงข้อมูลระดับ SDK ของส่วนขยาย
โปรแกรม derive_sdk
จะอ่านข้อมูลเมตาที่จัดเก็บเป็นไฟล์ protobuf แบบไบนารีในเส้นทางย่อย etc/sdkinfo.binarypb
ภายในโมดูล APEX แต่ละรายการ ดูรายละเอียดเกี่ยวกับโครงสร้าง Protobuf ได้ที่ไฟล์ protobuf
อ่านระดับ SDK ของส่วนขยาย
โมดูล SDK Extensions จะแสดงคลาส Java SdkExtensions
ในแพ็กเกจ android.os.ext
ใช้getExtensionVersion(int)
วิธีอ่านเวอร์ชันของส่วนขยาย SDK (เช่น
getExtensionVersion(Build.VERSION_CODES.R)
)
ดึงข้อมูล classpath
บริการ derive_classpath
จะอ่านและรวมไฟล์การกำหนดค่าแต่ละรายการใน /system/etc/classpaths/
และ /apex/*/etc/classpaths/
การกำหนดค่าแต่ละรายการจะจัดเก็บข้อความ Protobuf จาก classpaths.proto
ในรูปแบบไบนารีของ Proto อัลกอริทึมการผสานที่แน่นอนซึ่งกำหนดลําดับของรายการ classpath อธิบายไว้ใน derive_classpath.cpp
และอาจเปลี่ยนแปลงได้เมื่อเวลาผ่านไป