SDK Uzantıları

SDK Extensions modülü, cihazın uzantı SDK'sı seviyesini belirler ve Uygulamaların, uzantı SDK düzeyini sorgulaması için API'ler sağlar. Bu modül güncellenebilir yani normal dışında işlevlere yönelik güncellemeleri alabilir. Android sürüm döngüsü.

SDK Extensions şunlardan sorumludur:

  • Cihazın uzantı SDK'sı düzeyine karar verme.
  • Uygulamaların, uzantı SDK düzeyini sorgulamaları için API'ler sağlama.
  • (Android 12'den itibaren) BOOTCLASSPATH, DEX2OATBOOTCLASSPATH ve SYSTEMSERVERCLASSPATH ortam değişkeni.

Modül biçimi

SDK Extensions modülü (com.android.sdkext) APEX biçimindedir ve cihazlarda kullanılabilir Android 11 veya sonraki sürümleri çalıştıran.

Paket biçimi

SDK Extensions modülü (com.google.android.sdkext) APEX biçimi ve aşağıdaki bileşenleri içerir:

  • (Android 12'den itibaren) bin/derive_classpath: A cihaz önyüklemesinde erken çalıştırılan yerel ikili program bahsedeceğim. Sistemden bağımsız sınıf yolu yapılandırma dosyalarını okur ve Bu modülleri birleştirir ve CLASSPATH tanımını tanımlar değişkenlerine odaklanmalıdır.

  • bin/derive_sdk: Cihaz başlatma işleminin erken aşamalarında çalışan bir yerel ikili program ve o modülle ilgili sistem özelliklerini ayarlamak için diğer modüllerin meta verilerini uzantı SDK'sı (örneğin, build.version.extensions.r).

  • javalib/framework-sdkextension.jar: Bu dosya şu bootclasspath dosyasında: API'leri, uzantı SDK düzeyini sorgulamak için uygulamalara sunar.

Uzantı SDK'sı seviyesini türetme

derive_sdk programı, Her APEX modülünde etc/sdkinfo.binarypb alt yol. Protobuf ile ilgili ayrıntılar için daha fazla bilgi için protobuf dosyası olarak kaydedebilirsiniz.

Uzantı SDK seviyesi okuma

SDK Extensions modülü SdkExtensions java sınıfını android.os.ext paketine ekler. getExtensionVersion(int) kullanın bir SDK uzantısının sürümünü okuma yöntemi (örneğin, getExtensionVersion(Build.VERSION_CODES.R)) tıklayın.

Sınıf yolları türetme

derive_classpath hizmeti, buradaki yapılandırma dosyalarını tek tek okur ve birleştirir /system/etc/classpaths/ ve /apex/*/etc/classpaths/. Her yapılandırma, classpaths.proto adlı kullanıcıdan protobuf mesajı çok basittir. Sırayı belirleyen tam birleştirme algoritması hakkında daha fazla bilgi için derive_classpath.cpp ve zamanla değişebilir.