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
undSYSTEMSERVERCLASSPATH
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 UmgebungsvariablenCLASSPATH
.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.