Ein generisches Systemimage (GSI) ist ein Systemimage mit angepassten Konfigurationen für Android-Geräte. Es gilt als reine Android-Implementierung mit unverändertem Open-Source-Projekt für Android (AOSP)-Code, die auf jedem Android-Gerät mit Android 9 oder höher ausgeführt werden kann.
GSIs werden für die Ausführung von VTS- und CTS‑on‑GSI-Tests verwendet. Das Systemimage eines Android-Geräts wird durch ein GSI ersetzt und dann mit der Vendor Test Suite (VTS) und der Compatibility Test Suite (CTS) getestet, um sicherzustellen, dass das Gerät die Herstellerschnittstellen mit der neuesten Version von Android korrekt implementiert.
Weitere Informationen zu GSI-Konfigurationen (und zulässigen Abweichungen) und -Typen finden Sie in den folgenden Abschnitten. Wenn Sie ein GSI verwenden möchten, laden Sie es herunter und erstellen Sie es für Ihr Zielgerät, anschließend können Sie es auf ein Android Gerät flashen.
GSI-Konfiguration und -Abweichungen
Das aktuelle Android-GSI hat die folgende Konfiguration:
- Treble Das GSI bietet vollständige Unterstützung für die auf AIDL/HIDL basierenden architektonischen Änderungen (auch bekannt als Treble), einschließlich Unterstützung für die AIDL-Schnittstellen und HIDL-Schnittstellen. Sie können das GSI auf jedem Android-Gerät verwenden, das AIDL/HIDL-Herstellerschnittstellen nutzt. Weitere Informationen finden Sie unter Architekturressourcen.
- Dateisystem Das GSI verwendet das ext4-Dateisystem.
Das aktuelle Android-GSI weist die folgenden Hauptabweichungen auf:
- CPU-Architektur Unterstützung für verschiedene CPU-Anweisungen (ARM, x86 usw.) und CPU-Bit-Anzahl (32 Bit oder 64 Bit).
GSI-Ziele für Treble-Konformitätstests
Das für Konformitätstests verwendete GSI wird durch die Android-Version bestimmt, mit der das Gerät auf den Markt kommt.
| Gerätetyp | Ziel-Build |
|---|---|
| Geräte, die bei Markteinführung Android 15 nutzen | gsi_$arch-user (signiert) |
| Geräte, die bei Markteinführung Android 14 nutzen | gsi_$arch-user (signiert) |
| Geräte, die bei Markteinführung Android 13 nutzen | gsi_$arch-user (signiert) |
| Geräte, die bei Markteinführung Android 12L nutzen | gsi_$arch-user (signiert) |
| Geräte, die bei Markteinführung Android 12 nutzen | gsi_$arch-user (signiert) |
| Geräte, die bei Markteinführung Android 11 nutzen | gsi_$arch-user (signiert) |
Alle GSIs werden aus der Android 12-Codebasis erstellt und für jede CPU-Architektur gibt es eine entsprechende GSI-Binärdatei (siehe die Liste der Build-Ziele unter GSIs erstellen).
Änderungen bei Android 12-GSIs
Geräte, die bei Markteinführung Android 12 nutzen oder auf Android 12 aktualisiert werden, müssen für Konformitätstests Android 12-GSIs verwenden. Dazu gehören die folgenden wichtigen Änderungen gegenüber früheren GSIs:
- Zielname Der GSI-Zielname für Konformitätstests wurde in
gsi_$archgeändert. Das GSI mit dem Zielnamenaosp_$archwird für Android-App-Entwickler beibehalten. Der TestplanCTS-on-GSIwurde ebenfalls reduziert, um die Herstellerschnittstelle zu testen. - Das alte GSI wird eingestellt Mit GSI 12 werden die Workarounds für Android 8.0- oder 8.1-Geräte entfernt, die nicht vollständig Treble-kompatibel sind.
- Userdebug-SEPolicy Das GSI
gsi_$archenthältuserdebug_plat_sepolicy.cil. Wenn Sie das OEM-spezifischevendor_boot-debug.imgoderboot-debug.imgflashen, lädt/system/bin/inituserdebug_plat_sepolicy.cilaus dem GSIsystem.img. Weitere Informationen finden Sie unter VTS-Tests mit Debug-Ramdisk.
Änderungen bei Android 11-GSIs
Geräte, die bei Markteinführung Android 11 nutzen oder auf Android 11 aktualisiert werden, müssen für Konformitätstests Android 11-GSIs verwenden. Dazu gehören die folgenden wichtigen Änderungen gegenüber früheren GSIs:
- Inhalte von „system_ext“ In Android
11 wird eine neue Partition
system_extdefiniert. Das GSI platziert die Inhalte der Systemerweiterung im Ordnersystem/system_ext. - APEX-Dateien Das GSI enthält sowohl nicht komprimierte als auch komprimierte APEX-Dateien.
Welche verwendet wird, wird zur Laufzeit durch die System-Property
ro.apex.updatablein der Herstellerpartition bestimmt. Weitere Informationen finden Sie unter System für APEX-Updates konfigurieren.
Änderungen bei Android 10-GSIs
Geräte, die bei Markteinführung Android 10 nutzen oder auf Android 10 aktualisiert werden, müssen für Konformitätstests Android 10-GSIs verwenden. Dazu gehören die folgenden wichtigen Änderungen gegenüber früheren GSIs:
- Nutzer-Build Das GSI hat einen Nutzer-Build aus Android 10. In Android 10 kann das GSI des Nutzer-Builds in CTS‑on‑GSI-/VTS-Konformitätstests verwendet werden. Weitere Informationen finden Sie unter VTS-Tests mit Debug-Ramdisk.
- Nicht komprimiertes Format GSIs mit den Zielen
aosp_$archwerden mit einem nicht komprimierten Format erstellt. Bei Bedarf können Sieimg2simgverwenden, um ein nicht komprimiertes GSI in ein komprimiertes Format zu konvertieren, falls erforderlich. - System-as-root Das alte GSI-Ziel-Build mit dem Namen
aosp_$arch_awurde eingestellt. Für Geräte, die von Android 8 oder 8.1 auf Android 10 aktualisiert wurden und eine Ramdisk und kein System-as-root verwenden, verwenden Sie das alte GSIaosp_$arch_ab. Das aktualisierteinitin der Ramdisk unterstützt OEM-System.img mit dem System-as-root-Layout. - Verifizierter Bootmodus Wenn Sie ein GSI verwenden, müssen Sie das Gerät nur entsperren. Es ist nicht erforderlich, den verifizierten Bootmodus zu deaktivieren.
Änderungen bei Android 9-GSIs
Geräte, die bei Markteinführung Android 9 nutzen oder auf Android 9 aktualisiert werden, müssen für Konformitätstests Android 9-GSIs verwenden. Dazu gehören die folgenden wichtigen Änderungen gegenüber früheren GSIs:
- GSI und Emulator werden zusammengeführt GSIs werden aus den System
images von Emulatorprodukten erstellt, z. B.
aosp_arm64undaosp_x86. - System-as-root In früheren Android-Versionen konnten Geräte,
die keine A/B-Updates unterstützten, das Systemimage im
/systemVerzeichnis einbinden. In Android 9 wird das Stammverzeichnis des Systemimages als Stammverzeichnis des Geräts eingebunden. - 64-Bit-Binder-Schnittstelle In Android 8.x verwendeten 32-Bit-GSIs die 32-Bit-Binder-Schnittstelle. Android 9 unterstützt die 32-Bit-Binder-Schnittstelle nicht. Daher verwenden sowohl 32-Bit- als auch 64-Bit-GSIs die 64-Bit-Binder-Schnittstelle.
- VNDK-Erzwingung In Android 8.1 war VNDK optional.
Ab Android 9 ist VNDK obligatorisch. Daher
BOARD_VNDK_VERSIONmuss festgelegt werden. - Kompatible System-Property Android
9 aktiviert die Zugriffsprüfung für eine kompatible
System-Property (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true).
Änderungen bei Android 9-Keymaster
In früheren Android-Versionen mussten Geräte, die Keymaster 3 oder niedriger implementierten,
überprüfen, ob die vom ausgeführten System gemeldeten Versionsinformationen
(ro.build.version.release und
ro.build.version.security_patch) mit den vom Bootloader gemeldeten Angaben übereinstimmten. Diese Informationen wurden in der Regel aus dem Bootimage-Header abgerufen.
In Android 9 und höher wurde diese Anforderung geändert, damit Anbieter ein GSI starten können. Insbesondere sollte Keymaster keine Überprüfung durchführen da die vom GSI gemeldeten Versionsinformationen möglicherweise nicht mit den vom Anbieter gemeldeten Versionsinformationen des Bootloaders übereinstimmen. Für Geräte, die Keymaster 3 oder niedriger implementieren, müssen Anbieter die Keymaster-Implementierung ändern, um die Überprüfung zu überspringen (oder auf Keymaster 4 zu aktualisieren). Weitere Informationen zu Keymaster finden Sie unter Hardwaregestützter Keystore.
GSIs herunterladen
Sie können vorgefertigte GSIs auf der AOSP-Website für Continuous Integration (CI) unter ci.android.com herunterladen. Wenn der GSI-Typ für Ihre Hardware Plattform nicht zum Download verfügbar ist, finden Sie im folgenden Abschnitt weitere Informationen zum Erstellen von GSIs für bestimmte Ziele.
GSIs erstellen
Ab Android 9 hat jede Android-Version einen
GSI-Branch mit dem Namen DESSERT-gsi in AOSP. android12-gsi ist beispielsweise der GSI-Branch in Android
12. GSI-Branches enthalten die Inhalte von Android mit
allen Sicherheitspatches und
GSI-Patches angewendet.
Um ein GSI zu erstellen, richten Sie die Android-Quellstruktur ein, indem Sie sie aus einem GSI-Branch herunterladen und ein GSI-Ziel-Build auswählen. Anhand der Tabellen mit den Ziel-Builds unten können Sie die richtige GSI
Version für Ihr Gerät ermitteln. Nach Abschluss des Builds ist das GSI das System
image (that is, system.img) und wird im Ausgabeverzeichnis
out/target/product/generic_arm64.
Führen Sie beispielsweise die folgenden Befehle aus, um das GSI-Ziel-Build
gsi_arm64-userdebug im GSI-Branch android12-gsi,
zu erstellen.
$ repo init -u https://android.googlesource.com/platform/manifest -b android12-gsi $ repo sync -cq $ source build/envsetup.sh $ lunch gsi_arm64-userdebug $ make -j4
Android-GSI-Ziel-Builds
Die folgenden GSI-Ziel-Builds sind für Geräte, die bei Markteinführung Android 9 oder höher nutzen.
| GSI-Name | CPU-Architektur | Bit-Anzahl der Binder-Schnittstelle | System-as-root | Ziel-Build |
|---|---|---|---|---|
gsi_arm |
ARM | 32 | J | gsi_arm-usergsi_arm-userdebug |
gsi_arm64 |
ARM64 | 64 | J | gsi_arm64-usergsi_arm64-userdebug |
gsi_x86 |
x86 | 32 | J | gsi_x86-usergsi_x86-userdebug |
gsi_x86_64 |
x86-64 | 64 | J | gsi_x86_64-usergsi_x86_64-userdebug |
Anforderungen für das Flashen von GSIs
Android-Geräte können unterschiedliche Designs haben. Daher gibt es keinen generischen Befehl oder keine generische Anleitung zum Flashen eines GSIs, die für alle Geräte gilt. Wenden Sie sich an den Hersteller des Android-Geräts, um eine genaue Anleitung zum Flashen zu erhalten. Verwenden Sie die folgenden Schritte als allgemeine Richtlinie:
- Das Gerät muss Folgendes haben:
- Treble-kompatibel
- Eine Methode zum Entsperren von Geräten, damit sie mit
fastbootgeflasht werden können - Ein entsperrter Zustand, damit es über
fastbootgeflasht werden kann. Um sicherzustellen, dass Sie die neueste Version vonfastboothaben, erstellen Sie sie aus der Android-Quellstruktur.
- Löschen Sie die aktuelle Systempartition und flashen Sie dann das GSI auf die System partition.
- Löschen Sie die Nutzerdaten und die Daten aus anderen erforderlichen Partitionen (z. B. Nutzerdaten- und Systempartitionen).
- Starten Sie das Gerät neu.
So flashen Sie beispielsweise ein GSI auf ein beliebiges Pixel-Gerät:
- Starten Sie im
fastbootModus und entsperren Sie den Bootloader. - Geräte, die
fastbootdunterstützen, müssen auch infastbootdgestartet werden. Gehen Sie dazu so vor:$ fastboot reboot fastboot
- Löschen Sie das GSI und flashen Sie es auf die Systempartition:
$ fastboot erase system $ fastboot flash system system.img
- Wenn Ihr Gerät Android Virtual Framework unterstützt, flashen Sie die Firmware der geschützten virtuellen Maschine:
$ fastboot flash pvmfw pvmfw.img
- Löschen Sie die Nutzerdaten und die Daten aus anderen erforderlichen Partitionen (z.
B. Nutzerdaten- und Systempartitionen):
$ fastboot -w
- Starten Sie den Bootloader neu:
$ fastboot reboot-bootloader
- Deaktivieren Sie die Überprüfung des Bootmodus mit Verifikation, während Sie die bereitgestellte
vbmeta flashen:
$ fastboot --disable-verification flash vbmeta vbmeta.img
- Reboot:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition')
fastboot: error: Command failed$ fastboot delete-logical-partition product_a
_a sollte mit der Slot-ID der Systempartition übereinstimmen,
z. B. system_a in diesem Beispiel.
Beiträge zu GSIs leisten
Android freut sich über Ihre Beiträge zur GSI-Entwicklung. Sie können sich beteiligen und zur Verbesserung des GSIs beitragen, indem Sie Folgendes tun:
- Einen GSI-Patch erstellen
DESSERT-gsiist kein Entwicklungs-Branch und akzeptiert nur Cherrypicks aus dem neuesten AOSP-Release-Branch (android17-release). Wenn Sie also einen GSI Patch einreichen möchten, müssen Sie so vorgehen:- Reichen Sie den Patch im
AOSP
android17-releaseBranch ein. - Cherrypicken Sie den Patch zu
DESSERT-gsi. - Melden Sie einen Fehler, damit der Cherrypick überprüft werden kann.
- Reichen Sie den Patch im
AOSP
- GSI-Fehler melden oder andere Vorschläge machen. Folgen Sie der Anleitung unter Fehler melden und suchen Sie nach GSI Fehlern oder melden Sie sie.
Tipps
Navigationsleistenmodus mit adb ändern
Beim Starten mit GSI wird der Navigationsleistenmodus durch die Überschreibung des Herstellers konfiguriert. Sie können den Navigationsleistenmodus ändern, indem Sie zur Laufzeit den folgenden adb-Befehl ausführen.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
Dabei kann mode threebutton, twobutton,
gestural usw. sein.