Modul Ekstensi SDK menentukan level SDK ekstensi perangkat dan menyediakan API bagi aplikasi untuk mengkueri level SDK ekstensi. Modul ini dapat diupdate, yang berarti modul ini dapat menerima update fungsi di luar siklus rilis Android normal.
Ekstensi SDK bertanggung jawab untuk:
- Menentukan tingkat SDK ekstensi perangkat.
- Menyediakan API bagi aplikasi untuk mengkueri level SDK ekstensi.
- (Mulai Android 12) Menentukan nilai untuk variabel lingkungan
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
, danSYSTEMSERVERCLASSPATH
.
Format modul
Modul Ekstensi SDK (com.android.sdkext
) dalam format
APEX dan tersedia untuk perangkat yang menjalankan
Android 11 atau yang lebih tinggi.
Format paket
Modul Ekstensi SDK (com.google.android.sdkext
) berada dalam format
APEX dan
berisi komponen berikut:
(Mulai Android 12)
bin/derive_classpath
: Biner native yang berjalan lebih awal dalam proses booting perangkat. Plugin ini membaca setiap file konfigurasi classpath dari sistem dan modul lain, menggabungkannya, dan menentukan definisi variabel lingkunganCLASSPATH
.bin/derive_sdk
: Biner native yang berjalan lebih awal dalam proses booting perangkat dan membaca metadata modul lain untuk menyetel properti sistem yang terkait dengan SDK ekstensi (misalnya,build.version.extensions.r
).javalib/framework-sdkextension.jar
: File ini ada di bootclasspath yang mengekspos API ke aplikasi untuk mengkueri level SDK ekstensi.
Mendapatkan tingkat SDK ekstensi
Program derive_sdk
membaca metadata yang disimpan sebagai file protobuf biner di subjalur etc/sdkinfo.binarypb
dalam setiap modul APEX. Untuk mengetahui detail tentang struktur protobuf, lihat file protobuf
.
Membaca level SDK ekstensi
Modul Ekstensi SDK mengekspos class java
SdkExtensions
dalam paket android.os.ext
. Gunakan metode getExtensionVersion(int)
untuk membaca versi ekstensi SDK (misalnya,
getExtensionVersion(Build.VERSION_CODES.R)
).
Mendapatkan jalur class
Layanan derive_classpath
membaca dan menggabungkan setiap file konfigurasi di
/system/etc/classpaths/
dan /apex/*/etc/classpaths/
. Setiap konfigurasi menyimpan pesan protobuf dari classpaths.proto
dalam format biner proto. Algoritma penggabungan persis yang menentukan urutan entri classpath dijelaskan dalam derive_classpath.cpp
dan dapat berubah dari waktu ke waktu.