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