Das SDK-Erweiterungsmodul bestimmt die Erweiterungs-SDK-Ebene des Geräts und stellt APIs für Apps bereit, um die Erweiterungs-SDK-Ebene abzufragen. Dieses Modul kann aktualisiert werden, d. h. es kann außerhalb des normalen Android-Releasezyklus Updates für Funktionen erhalten.
SDK-Erweiterungen sind verantwortlich für:
- Die SDK-Ebene der Erweiterung für das Gerät festlegen
- APIs für Apps bereitstellen, um die Erweiterung auf SDK-Ebene abzufragen.
- (Ab Android 12) Festlegen der Werte für die Umgebungsvariablen
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
undSYSTEMSERVERCLASSPATH
Modulformat
Das Modul für SDK-Erweiterungen (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
) ist im APEX-Format und enthält die folgenden Komponenten:
(Ab Android 12)
bin/derive_classpath
: Ein nativer Binärcode, der früh im Bootvorgang des Geräts ausgeführt wird. Es liest einzelne Classpath-Konfigurationsdateien aus dem System und anderen Modulen, führt sie zusammen und definiert die Definition der UmgebungsvariablenCLASSPATH
.bin/derive_sdk
: Ein nativer Binärcode, der 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 in der Boot-Klassenbibliothek, die APIs für Apps freigibt, um die Erweiterungs-SDK-Ebene abzufragen.
SDK-Level für Erweiterungen ableiten
Das derive_sdk
-Programm liest Metadaten, die als binäre protobuf-Dateien im Unterpfad etc/sdkinfo.binarypb
jedes APEX-Moduls gespeichert sind. Weitere Informationen zur protobuf-Struktur finden Sie in der Datei protobuf
.
Lesezugriff auf SDK-Ebene der Erweiterung
Das SDK-Erweiterungsmodul stellt eine Java-Klasse SdkExtensions
im android.os.ext
-Paket bereit. Mit der Methode getExtensionVersion(int)
kannst du die Version einer SDK-Erweiterung lesen (z. B. getExtensionVersion(Build.VERSION_CODES.R)
).
Klassenpfade ableiten
Der Dienst derive_classpath
liest und kombiniert einzelne Konfigurationsdateien in /system/etc/classpaths/
und /apex/*/etc/classpaths/
. In jeder Konfiguration wird die protobuf-Nachricht von classpaths.proto
in einem proto-Binärformat gespeichert. Der genaue Algorithmus zum Zusammenführen, der die Reihenfolge der Classpath-Einträge bestimmt, wird in derive_classpath.cpp
beschrieben und kann sich im Laufe der Zeit ändern.