Modul Ekstensi SDK menentukan level SDK ekstensi perangkat dan menyediakan API bagi aplikasi untuk membuat kueri level SDK ekstensi. Modul ini dapat diupdate, yang berarti dapat menerima update pada fungsi di luar siklus rilis Android normal.
Ekstensi SDK bertanggung jawab untuk:
- Menentukan tingkat SDK ekstensi perangkat.
- Menyediakan API bagi aplikasi untuk membuat kueri 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 SDK Extensions (com.google.android.sdkext
) dalam
format APEX dan
berisi komponen berikut:
(Mulai Android 12)
bin/derive_classpath
: biner native yang berjalan lebih awal dalam proses booting perangkat. Classloader 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 menetapkan properti sistem yang terkait dengan SDK ekstensi (misalnya,build.version.extensions.r
).javalib/framework-sdkextension.jar
: File ini berada di bootclasspath yang mengekspos API ke aplikasi untuk membuat kueri level SDK ekstensi.
Memperoleh level SDK ekstensi
Program derive_sdk
membaca metadata yang disimpan sebagai file protobuf biner di
subjalur etc/sdkinfo.binarypb
di dalam setiap modul APEX. Untuk mengetahui detail tentang struktur
protobuf, lihat
file
protobuf
.
Membaca level SDK ekstensi
Modul Ekstensi SDK menampilkan class java
SdkExtensions
dalam paket android.os.ext
. Gunakan metode getExtensionVersion(int)
untuk membaca versi ekstensi SDK (misalnya,
getExtensionVersion(Build.VERSION_CODES.R)
).
Mendapatkan classpath
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 yang tepat yang menentukan urutan
entri classpath dijelaskan di
derive_classpath.cpp
dan dapat berubah dari waktu ke waktu.