Das SDK Extensions-Modul bestimmt das Erweiterungs-SDK-Level des Geräts stellt APIs für Apps bereit, mit denen die SDK-Ebene der Erweiterung abgefragt werden kann. Dieses Modul ist aktualisierbar, d. h. es kann Updates für Funktionen erhalten, die nicht Android-Releasezyklus
SDK-Erweiterungen sind verantwortlich für:
- Festlegen des SDK-Levels für die Erweiterung auf dem Gerät
- Bereitstellung von APIs für Apps zum Abfragen des SDK-Levels der Erweiterung
- (Ab Android 12) Die Werte für die
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
undSYSTEMSERVERCLASSPATH
-Umgebungsvariablen.
Modulformat
Das Modul für SDK-Erweiterungen (com.android.sdkext
) befindet sich in
APEX-Format und ist für Geräte verfügbar.
mit Android 11 oder höher.
Paketformat
Das Modul für SDK-Erweiterungen (com.google.android.sdkext
) befindet sich in
APEX-Format und
enthält die folgenden Komponenten:
(Ab Android 12)
bin/derive_classpath
: A natives Binärprogramm, das zu Beginn des Gerätestarts ausgeführt wird . Sie liest individuelle Klassenpfad-Konfigurationsdateien aus dem System und andere Module, führt sie zusammen und definiert die Definition vonCLASSPATH
Umgebungsvariablen.bin/derive_sdk
: Natives Binärprogramm, das zu Beginn des Gerätestartvorgangs ausgeführt wird und liest die Metadaten anderer Module, um die Systemeigenschaften Erweiterungs-SDK (z. B.build.version.extensions.r
).javalib/framework-sdkextension.jar
: Diese Datei befindet sich im Bootclasspath, macht APIs für Apps verfügbar, um das Erweiterungs-SDK-Level abzufragen.
SDK-Level für Erweiterungen ableiten
Das Programm derive_sdk
liest Metadaten, die als binäre protobuf-Dateien in der
etc/sdkinfo.binarypb
-Unterpfad innerhalb jedes APEX-Moduls. Weitere Informationen zu protobuf
finden Sie in den
protobuf
-Datei.
SDK-Level der Erweiterung lesen
Das Modul SDK-Erweiterungen enthält eine
SdkExtensions
im Paket android.os.ext
. getExtensionVersion(int)
verwenden
um die Version einer SDK-Erweiterung zu lesen, z. B.
getExtensionVersion(Build.VERSION_CODES.R)
).
Klassenpfade ableiten
Der Dienst derive_classpath
liest einzelne Konfigurationsdateien und führt sie zusammen.
/system/etc/classpaths/
und /apex/*/etc/classpaths/
. Jede Konfiguration speichert
protobuf-Nachricht von classpaths.proto
im .proto-Binärformat. Der genaue Zusammenführungsalgorithmus, der die Reihenfolge bestimmt
der Klassenpfadeinträge wird in
derive_classpath.cpp
und kann sich im Laufe der Zeit ändern.