Ekstensi SDK

Modul Ekstensi SDK menentukan tingkat SDK ekstensi perangkat dan menyediakan API bagi aplikasi untuk menanyakan tingkat SDK ekstensi. Modul ini dapat diperbarui, artinya dapat menerima pembaruan fungsi di luar siklus rilis normal Android.

Ekstensi SDK bertanggung jawab untuk:

  • Memutuskan tingkat ekstensi SDK perangkat.
  • Menyediakan API bagi aplikasi untuk menanyakan tingkat SDK ekstensi.
  • (Memulai Android 12) Menentukan nilai untuk variabel lingkungan BOOTCLASSPATH , DEX2OATBOOTCLASSPATH , dan SYSTEMSERVERCLASSPATH .

Format modul

Modul Ekstensi SDK ( com.android.sdkext ) dalam format APEX dan tersedia untuk perangkat yang menjalankan Android 11 atau lebih tinggi.

Format paket

Modul Ekstensi SDK ( com.google.android.sdkext ) berformat APEX dan berisi komponen berikut:

  • (Memulai Android 12) bin/derive_classpath : Biner asli yang berjalan di awal proses booting perangkat. Ia membaca file konfigurasi classpath individual dari sistem dan modul lain, menggabungkannya, dan mendefinisikan definisi variabel lingkungan CLASSPATH .

  • bin/derive_sdk : Biner asli yang berjalan di awal proses booting perangkat dan membaca metadata modul lain untuk menyetel properti sistem yang terkait dengan ekstensi SDK (misalnya, build.version.extensions.r ).

  • javalib/framework-sdkextension.jar : File ini ada di jalur bootclass yang mengekspos API ke aplikasi untuk menanyakan tingkat ekstensi SDK.

Mendapatkan tingkat SDK ekstensi

Program derive_sdk membaca metadata yang disimpan sebagai file protobuf biner di subjalur etc/sdkinfo.binarypb di dalam setiap modul APEX. Untuk detail tentang struktur protobuf, lihat file protobuf .

Membaca tingkat SDK ekstensi

Modul SDK Extensions mengekspos kelas java SdkExtensions dalam paket android.os.ext . Gunakan metode getExtensionVersion(int) untuk membaca versi ekstensi SDK (misalnya, getExtensionVersion(Build.VERSION_CODES.R) ).

Mendapatkan jalur kelas

Layanan derive_classpath membaca dan menggabungkan file konfigurasi individual di /system/etc/classpaths/ dan /apex/*/etc/classpaths/ . Setiap konfigurasi menyimpan pesan protobuf dari classpaths.proto dalam format proto biner. Algoritme penggabungan yang tepat yang menentukan urutan entri classpath dijelaskan di derive_classpath.cpp dan mungkin berubah seiring waktu.