Ekstensi SDK

Modul SDK Extensions memutuskan tingkat SDK ekstensi perangkat dan menyediakan API bagi aplikasi untuk mengkueri tingkat SDK ekstensi. Modul ini dapat diperbarui, artinya dapat menerima pembaruan untuk fungsionalitas di luar siklus rilis Android normal.

Ekstensi SDK bertanggung jawab untuk:

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

Format modul

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

Format paket

Modul SDK Extensions ( com.google.android.sdkext ) dalam format APEX dan berisi komponen berikut:

  • (Memulai Android 12) bin/derive_classpath : Biner asli yang berjalan di awal proses boot 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 boot perangkat dan membaca metadata modul lain untuk mengatur properti sistem yang terkait dengan SDK ekstensi (misalnya, build.version.extensions.r ).

  • javalib/framework-sdkextension.jar : File ini berada di bootclasspath yang memaparkan API ke aplikasi untuk menanyakan tingkat ekstensi SDK.

Turunan tingkat SDK ekstensi

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

Membaca level SDK ekstensi

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

Turunan classpath

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