ส่วนขยาย SDK

โมดูลส่วนขยาย 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 : ไฟล์นี้อยู่บน bootclasspath ที่แสดง API ให้กับแอปเพื่อสืบค้นระดับ SDK ส่วนขยาย

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

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

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

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

การได้มาซึ่งคลาสพาธ

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