Das Modul „SDK-Erweiterungen“ bestimmt die SDK-Ebene der Erweiterung des Geräts und stellt APIs für Apps bereit, mit denen die SDK-Ebene der Erweiterung abgefragt werden kann. Dieses Modul kann aktualisiert werden. Das bedeutet, dass es außerhalb des normalen Android-Releasezyklus Updates für Funktionen erhalten kann.
Das Modul „SDK-Erweiterungen“ ist für Folgendes zuständig:
- Bestimmen der SDK-Ebene der Erweiterung des Geräts
- Bereitstellen von APIs für Apps, mit denen die SDK-Ebene der Erweiterung abgefragt werden kann
- (Ab Android 12) Bestimmen der Werte für die
BOOTCLASSPATH,DEX2OATBOOTCLASSPATH, undSYSTEMSERVERCLASSPATHUmgebungsvariablen.
Modulformat
Das Modul „SDK-Erweiterungen“ (com.android.sdkext) ist im
APEX-Format verfügbar und kann auf Geräten
mit Android 11 oder höher verwendet werden.
Paketformat
Das Modul „SDK-Erweiterungen“ (com.google.android.sdkext) ist im
APEX-Format verfügbar und
enthält die folgenden Komponenten:
(Ab Android 12)
bin/derive_classpath: Eine native Binärdatei, die früh im Startprozess des Geräts ausgeführt wird. Sie liest einzelne Konfigurationsdateien für den Klassenpfad 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 Startprozess des Geräts ausgeführt wird und Metadaten anderer Module liest, um Systemeigenschaften im Zusammenhang mit dem SDK der Erweiterung festzulegen (z. B.build.version.extensions.r).javalib/framework-sdkextension.jar: Diese Datei befindet sich im Boot-Klassenpfad und stellt APIs für Apps bereit, mit denen die SDK-Ebene der Erweiterung abgefragt werden kann.
SDK-Ebene der Erweiterung ableiten
Das Programm derive_sdk 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
protobuf
Datei.
SDK-Ebene der Erweiterung lesen
Das Modul „SDK-Erweiterungen“ stellt eine
SdkExtensions
Java-Klasse im android.os.ext Paket bereit. Mit der Methode getExtensionVersion(int) können Sie die Version einer SDK-Erweiterung 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
eine Protobuf-Nachricht aus classpaths.proto
in einem binären Proto-Format. Der genaue Zusammenführungsalgorithmus, der die Reihenfolge
der Klassenpfadeinträge bestimmt, wird in
derive_classpath.cpp
beschrieben und kann sich im Laufe der Zeit ändern.