SDK-Erweiterungen

Das SDK-Erweiterungsmodul entscheidet über die Erweiterungs-SDK-Ebene des Geräts und stellt APIs für Apps bereit, um die Erweiterungs-SDK-Ebene abzufragen. Dieses Modul ist aktualisierbar, was bedeutet, dass es außerhalb des normalen Android-Release-Zyklus Funktionsaktualisierungen erhalten kann.

SDK Extensions ist verantwortlich für:

  • Festlegen der Erweiterungs-SDK-Ebene des Geräts.
  • Bereitstellung von APIs für Apps zum Abfragen der Erweiterungs-SDK-Ebene.
  • (Ab Android 12) Bestimmen der Werte für die Umgebungsvariablen BOOTCLASSPATH , DEX2OATBOOTCLASSPATH und SYSTEMSERVERCLASSPATH .

Modulformat

Das SDK-Erweiterungsmodul ( com.android.sdkext ) liegt im APEX- Format vor und ist für Geräte mit Android 11 oder höher verfügbar.

Paketformat

Das SDK-Erweiterungsmodul ( com.google.android.sdkext ) liegt im APEX- Format vor und enthält die folgenden Komponenten:

  • (Ab Android 12) bin/derive_classpath : Eine native Binärdatei, die früh im Gerätestartvorgang ausgeführt wird. Es liest einzelne Klassenpfad-Konfigurationsdateien aus dem System und anderen Modulen, führt sie zusammen und definiert die Definition von CLASSPATH Umgebungsvariablen.

  • bin/derive_sdk : Eine native Binärdatei, die zu Beginn des Gerätestartvorgangs ausgeführt wird und Metadaten anderer Module liest, um Systemeigenschaften im Zusammenhang mit dem Erweiterungs-SDK festzulegen (z. B. build.version.extensions.r ).

  • javalib/framework-sdkextension.jar : Diese Datei befindet sich im Bootclasspath, der APIs für Apps verfügbar macht, um die SDK-Ebene der Erweiterung abzufragen.

Ableiten der Erweiterungs-SDK-Ebene

Das Programm derive_sdk liest Metadaten, die als binäre Protobuf-Dateien im Unterpfad etc/sdkinfo.binarypb in jedem APEX-Modul gespeichert sind. Einzelheiten zur Protobuf-Struktur finden Sie in der protobuf Datei.

SDK-Ebene der Leseerweiterung

Das SDK-Erweiterungsmodul stellt eine SdkExtensions Java-Klasse im Paket android.os.ext bereit. Verwenden Sie die Methode getExtensionVersion(int) , um die Version einer SDK-Erweiterung zu lesen (z. B. getExtensionVersion(Build.VERSION_CODES.R) ).

Klassenpfade ableiten

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