SDK-Erweiterungen

Das SDK Extensions-Modul bestimmt das Erweiterungs-SDK-Level des Geräts stellt APIs für Apps bereit, mit denen die SDK-Ebene der Erweiterung abgefragt werden kann. Dieses Modul ist aktualisierbar, d. h. es kann Updates für Funktionen erhalten, die nicht Android-Releasezyklus

SDK-Erweiterungen sind verantwortlich für:

  • Festlegen des SDK-Levels für die Erweiterung auf dem Gerät
  • Bereitstellung von APIs für Apps zum Abfragen des SDK-Levels der Erweiterung
  • (Ab Android 12) Die Werte für die BOOTCLASSPATH, DEX2OATBOOTCLASSPATH und SYSTEMSERVERCLASSPATH-Umgebungsvariablen.

Modulformat

Das Modul für SDK-Erweiterungen (com.android.sdkext) befindet sich in APEX-Format und ist für Geräte verfügbar. mit Android 11 oder höher.

Paketformat

Das Modul für SDK-Erweiterungen (com.google.android.sdkext) befindet sich in APEX-Format und enthält die folgenden Komponenten:

  • (Ab Android 12) bin/derive_classpath: A natives Binärprogramm, das zu Beginn des Gerätestarts ausgeführt wird . Sie liest individuelle Klassenpfad-Konfigurationsdateien aus dem System und andere Module, führt sie zusammen und definiert die Definition von CLASSPATH Umgebungsvariablen.

  • bin/derive_sdk: Natives Binärprogramm, das zu Beginn des Gerätestartvorgangs ausgeführt wird und liest die Metadaten anderer Module, um die Systemeigenschaften Erweiterungs-SDK (z. B. build.version.extensions.r).

  • javalib/framework-sdkextension.jar: Diese Datei befindet sich im Bootclasspath, macht APIs für Apps verfügbar, um das Erweiterungs-SDK-Level abzufragen.

SDK-Level für Erweiterungen ableiten

Das Programm derive_sdk liest Metadaten, die als binäre protobuf-Dateien in der etc/sdkinfo.binarypb-Unterpfad innerhalb jedes APEX-Moduls. Weitere Informationen zu protobuf finden Sie in den protobuf -Datei.

SDK-Level der Erweiterung lesen

Das Modul SDK-Erweiterungen enthält eine SdkExtensions im Paket android.os.ext. getExtensionVersion(int) verwenden um die Version einer SDK-Erweiterung zu lesen, z. B. getExtensionVersion(Build.VERSION_CODES.R)).

Klassenpfade ableiten

Der Dienst derive_classpath liest einzelne Konfigurationsdateien und führt sie zusammen. /system/etc/classpaths/ und /apex/*/etc/classpaths/. Jede Konfiguration speichert protobuf-Nachricht von classpaths.proto im .proto-Binärformat. Der genaue Zusammenführungsalgorithmus, der die Reihenfolge bestimmt der Klassenpfadeinträge wird in derive_classpath.cpp und kann sich im Laufe der Zeit ändern.