Ekstensi SDK

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, dan SYSTEMSERVERCLASSPATH.

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 lingkungan CLASSPATH.

  • 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.