SDK-Erweiterungen

Das SDK-Erweiterungsmodul bestimmt das Erweiterungs-SDK-Level des Geräts und stellt APIs für Apps bereit, mit denen das Erweiterungs-SDK-Level abgefragt werden kann. Dieses Modul ist aktualisierbar. Das bedeutet, dass es außerhalb des normalen Android-Releasezyklus Funktionsupdates erhalten kann.

SDK-Erweiterungen sind für Folgendes verantwortlich:

  • Die SDK-Ebene der Erweiterung des Geräts festlegen.
  • Bereitstellung von APIs für Apps zum Abfragen des Extension SDK-Levels.
  • (Ab Android 12) Werte für die Umgebungsvariablen BOOTCLASSPATH, DEX2OATBOOTCLASSPATH und SYSTEMSERVERCLASSPATH ermitteln.

Modulformat

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

Paketformat

Das SDK Extensions-Modul (com.google.android.sdkext) ist im APEX-Format und enthält die folgenden Komponenten:

  • (Ab Android 12) bin/derive_classpath: Ein natives Binärprogramm, das früh im Startvorgang des Geräts ausgeführt wird. Sie liest einzelne Classpath-Konfigurationsdateien 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 Geräte-Bootprozess ausgeführt wird und Metadaten anderer Module liest, um Systemattribute 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 bereitstellt, um den Erweiterungs-SDK-Level abzufragen.

SDK-Ebene der Erweiterung ableiten

Das derive_sdk-Programm 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 Datei protobuf.

SDK-Ebene der Erweiterung lesen

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

Klassenpfade ableiten

Der Dienst derive_classpath liest und führt einzelne Konfigurationsdateien in /system/etc/classpaths/ und /apex/*/etc/classpaths/ zusammen. In jeder Konfiguration wird eine Protobuf-Nachricht aus classpaths.proto in einem binären Proto-Format gespeichert. Der genaue Zusammenführungsalgorithmus, der die Reihenfolge der Classpath-Einträge bestimmt, wird in derive_classpath.cpp beschrieben und kann sich im Laufe der Zeit ändern.