ส่วนขยาย SDK

โมดูลส่วนขยาย SDK จะเลือกระดับ SDK ส่วนขยายของอุปกรณ์และ มี API ให้แอปเพื่อค้นหาระดับ SDK ของส่วนขยาย โมดูลนี้ สามารถอัปเดตได้ หมายความว่าสามารถรับการอัปเดตฟังก์ชันการทำงานที่นอกเหนือจากฟังก์ชัน รอบการเผยแพร่ของ Android

ส่วนขยาย SDK มีหน้าที่ดังนี้

  • เลือกระดับ SDK ส่วนขยายของอุปกรณ์
  • การมอบ API สำหรับแอปเพื่อค้นหาระดับ SDK ของส่วนขยาย
  • (ตั้งแต่ Android 12 เป็นต้นไป) การกำหนดค่าสำหรับ BOOTCLASSPATH, DEX2OATBOOTCLASSPATH และ ตัวแปรสภาพแวดล้อม SYSTEMSERVERCLASSPATH

รูปแบบโมดูล

โมดูล SDK Extensions (com.android.sdkext) อยู่ใน รูปแบบ APEX และพร้อมให้บริการสำหรับอุปกรณ์ ที่ใช้ Android 11 ขึ้นไป

รูปแบบแพ็กเกจ

โมดูล SDK Extensions (com.google.android.sdkext) อยู่ใน APEX และ มีคอมโพเนนต์ต่อไปนี้

  • (ตั้งแต่ Android 12 เป็นต้นไป) bin/derive_classpath: A ไบนารีแบบเนทีฟที่ทำงานตั้งแต่แรกเมื่อเปิดอุปกรณ์ ขั้นตอนได้ โดยจะอ่านไฟล์การกำหนดค่า classpath แต่ละไฟล์จากระบบและ โมดูลอื่นๆ ผสานรวม และกำหนดคำจำกัดความของ CLASSPATH ตัวแปรสภาพแวดล้อม

  • bin/derive_sdk: ไบนารีที่มาพร้อมเครื่องที่ทำงานตั้งแต่ช่วงต้นๆ ระหว่างการเปิดเครื่อง และอ่านข้อมูลเมตาของโมดูลอื่นๆ เพื่อตั้งค่าพร็อพเพอร์ตี้ระบบที่เกี่ยวข้องกับ SDK ของส่วนขยาย (เช่น build.version.extensions.r)

  • javalib/framework-sdkextension.jar: ไฟล์นี้อยู่ใน Bootclasspath ที่ แสดง API กับแอปเพื่อค้นหาระดับ SDK ของส่วนขยาย

สร้างระดับ SDK ของส่วนขยาย

โปรแกรม derive_sdk จะอ่านข้อมูลเมตาที่จัดเก็บเป็นไฟล์ Protobuf แบบไบนารีใน etc/sdkinfo.binarypb เส้นทางย่อยภายในโมดูล APEX แต่ละรายการ ดูรายละเอียดเกี่ยวกับ Protobuf ให้อ้างอิงส่วน protobuf

อ่านระดับ SDK ของส่วนขยาย

โมดูล SDK Extensions จะแสดง SdkExtensions คลาส Java ในแพ็กเกจ android.os.ext ใช้ getExtensionVersion(int) ในการอ่านเวอร์ชันของส่วนขยาย SDK (เช่น getExtensionVersion(Build.VERSION_CODES.R))

สร้างคลาสพาธ

บริการ derive_classpath จะอ่านและรวมไฟล์การกำหนดค่าแต่ละรายการใน /system/etc/classpaths/ และ /apex/*/etc/classpaths/ ที่จัดเก็บการกำหนดค่าแต่ละรายการ ข้อความ Protobuf จาก classpaths.proto ในรูปแบบไบนารี Pro อัลกอริทึมการผสานที่แน่นอนซึ่งกำหนดลำดับ ของรายการ Classpath มีการอธิบายไว้ใน derive_classpath.cpp และอาจเปลี่ยนแปลงเมื่อเวลาผ่านไป