Ekstensi SDK

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

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