SDK-Erweiterungen

Das Modul „SDK-Erweiterungen“ bestimmt die SDK-Ebene der Erweiterung des Geräts und stellt APIs für Apps bereit, mit denen die SDK-Ebene der Erweiterung abgefragt werden kann. Dieses Modul kann aktualisiert werden. Das bedeutet, dass es außerhalb des normalen Android-Releasezyklus Updates für Funktionen erhalten kann.

Das Modul „SDK-Erweiterungen“ ist für Folgendes zuständig:

  • Bestimmen der SDK-Ebene der Erweiterung des Geräts
  • Bereitstellen von APIs für Apps, mit denen die SDK-Ebene der Erweiterung abgefragt werden kann
  • (Ab Android 12) Bestimmen der Werte für die BOOTCLASSPATH, DEX2OATBOOTCLASSPATH, und SYSTEMSERVERCLASSPATH Umgebungsvariablen.

Modulformat

Das Modul „SDK-Erweiterungen“ (com.android.sdkext) ist im APEX-Format verfügbar und kann auf Geräten mit Android 11 oder höher verwendet werden.

Paketformat

Das Modul „SDK-Erweiterungen“ (com.google.android.sdkext) ist im APEX-Format verfügbar und enthält die folgenden Komponenten:

  • (Ab Android 12) bin/derive_classpath: Eine native Binärdatei, die früh im Startprozess des Geräts ausgeführt wird. Sie liest einzelne Konfigurationsdateien für den Klassenpfad aus dem System und anderen Modulen, führt sie zusammen und definiert die Definition der Umgebungsvariablen CLASSPATH.

  • bin/derive_sdk: Eine native Binärdatei, die früh im Startprozess des Geräts ausgeführt wird und Metadaten anderer Module liest, um Systemeigenschaften im Zusammenhang mit dem SDK der Erweiterung festzulegen (z. B. build.version.extensions.r).

  • javalib/framework-sdkextension.jar: Diese Datei befindet sich im Boot-Klassenpfad und stellt APIs für Apps bereit, mit denen die SDK-Ebene der Erweiterung abgefragt werden kann.

SDK-Ebene der Erweiterung ableiten

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

SDK-Ebene der Erweiterung lesen

Das Modul „SDK-Erweiterungen“ stellt eine SdkExtensions Java-Klasse im android.os.ext Paket bereit. Mit der Methode getExtensionVersion(int) können Sie die Version einer SDK-Erweiterung 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 eine Protobuf-Nachricht aus classpaths.proto in einem binären Proto-Format. Der genaue Zusammenführungsalgorithmus, der die Reihenfolge der Klassenpfadeinträge bestimmt, wird in derive_classpath.cpp beschrieben und kann sich im Laufe der Zeit ändern.