ส่วนขยาย 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: ไบนารีเนทีฟที่ทํางานในช่วงต้นของกระบวนการบูตอุปกรณ์ และอ่านข้อมูลเมตาของโมดูลอื่นๆ เพื่อตั้งค่าพร็อพเพอร์ตี้ของระบบที่เกี่ยวข้องกับ 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 และอาจเปลี่ยนแปลงเมื่อเวลาผ่านไป