Ogólny obraz systemu (GSI) to obraz systemu z dostosowanymi konfiguracjami dla urządzeń z systemem Android. Jest uważany za czystą implementację systemu Android z niezmodyfikowanym kodem projektu Android Open Source Project (AOSP), który można pomyślnie uruchomić na dowolnym urządzeniu z systemem Android 9 lub nowszym.
GSI są używane do przeprowadzania testów VTS i CTS-on-GSI. Obraz systemu urządzenia z systemem Android jest zastępowany przez GSI, a następnie testowany za pomocą pakietu Vendor Test Suite (VTS) i Compatibility Test Suite (CTS) , aby upewnić się, że urządzenie poprawnie implementuje interfejsy dostawcy z najnowszą wersją systemu Android.
Aby rozpocząć korzystanie z GSI, przejrzyj poniższe sekcje, aby uzyskać szczegółowe informacje na temat konfiguracji GSI (i dozwolonych wariancji) oraz typów . Kiedy będziesz gotowy do użycia GSI, pobierz i utwórz GSI dla swojego docelowego urządzenia, a następnie sflashuj GSI na urządzenie z Androidem.
Konfiguracja i wariancje GSI
Obecny Android GSI ma następującą konfigurację:
- Potroić. GSI zawiera pełną obsługę zmian architektonicznych opartych na AIDL/HIDL (znanych również jako Treble ), w tym obsługę interfejsów AIDL i interfejsów HIDL . Z GSI można korzystać na dowolnym urządzeniu z systemem Android, które korzysta z interfejsów dostawcy AIDL/HIDL. (Aby uzyskać więcej informacji, zobacz Zasoby dotyczące architektury .)
- System plików. GSI używa systemu plików ext4.
Obecny Android GSI obejmuje następujące główne warianty:
- Architektura procesora. Obsługa różnych instrukcji procesora (ARM, x86 itp.) i bitowości procesora (32 bity lub 64 bity).
Cele GSI dla testów zgodności Treble
GSI używany do testowania zgodności zależy od wersji Androida, z którą urządzenie jest uruchamiane.
Rodzaj urządzenia | Zbuduj cel |
---|---|
Urządzenia uruchamiane z systemem Android 12 | gsi_$arch-user (podpisany) |
Urządzenia uruchamiane z systemem Android 11 | gsi_$arch-user (podpisany) |
Urządzenia uruchamiane z systemem Android 10 | gsi_$arch-user (podpisany) |
Urządzenia uruchamiane z systemem Android 9 | gsi_$arch-userdebug |
Wszystkie GSI są budowane na podstawie kodu Android 12, a każda architektura procesora ma odpowiedni plik binarny GSI (zobacz listę celów kompilacji w Building GSI ).
Zmiany w Androidzie 12 GSI
Urządzenia uruchamiane z systemem Android 12 lub aktualizowane do niego muszą korzystać z GSI systemu Android 12 w celu testowania zgodności. Obejmuje to następujące główne zmiany w stosunku do wcześniejszych GSI:
- Nazwa docelowa. Nazwa docelowa GSI dla testów zgodności została zmieniona na
gsi_$arch
. GSI o nazwie docelowejaosp_$arch
jest zachowywany dla programistów aplikacji na Androida. Plan testówCTS-on-GSI
jest również ograniczony do testowania interfejsu dostawcy. - Starsze GSI jest wycofywane. GSI 12 usuwa obejścia dotyczące urządzeń z Androidem 8.0 lub 8.1, które nie są w pełni potreblizowane.
- Polityka SEPolityka debugowania użytkownika. GSI
gsi_$arch
zawierauserdebug_plat_sepolicy.cil
. Podczas flashowania specyficznego dla OEMvendor_boot-debug.img
lubboot-debug.img
,/system/bin/init
załadujeuserdebug_plat_sepolicy.cil
z GSIsystem.img
. Aby uzyskać szczegółowe informacje, zapoznaj się z testowaniem VTS z debugowaniem Ramdisk .
Zmiany w Androidzie 11 GSI
Urządzenia uruchamiane z systemem Android 11 lub aktualizowane do tego systemu muszą używać GSI systemu Android 11 do testowania zgodności. Obejmuje to następujące główne zmiany w stosunku do wcześniejszych GSI:
- zawartość system_ext. Android 11 definiuje nową partycję
system_ext
. GSI umieszcza zawartość rozszerzenia systemowego w folderzesystem/system_ext
. - APEX. GSI zawiera zarówno spłaszczone, jak i skompresowane pliki APEX. To, którego użyć, zależy od właściwości systemowej
ro.apex.updatable
w partycji dostawcy w czasie wykonywania. Szczegółowe informacje można znaleźć w sekcji Konfiguracja systemu do obsługi aktualizacji APEX .
Zmiany w Androidzie 10 GSI
Urządzenia uruchamiane z systemem Android 10 lub aktualizowane do tego systemu muszą używać interfejsów GSI systemu Android 10 do testowania zgodności. Obejmuje to następujące główne zmiany w stosunku do wcześniejszych GSI:
- Kompilacja użytkownika. GSI ma kompilację użytkownika z Androida 10. W Androidzie 10, kompilacja użytkownika GSI może być używana w testach zgodności CTS-on-GSI/VTS. Aby uzyskać szczegółowe informacje, zapoznaj się z testowaniem VTS z debugowaniem Ramdisk .
- Niesparowany format. GSI z celami
aosp_$arch
są budowane w niesparsowanym formacie. Możesz użyćimg2simg
, aby przekonwertować niesparsowany GSI na format sparse, jeśli to konieczne. - System jako root. Starszy cel kompilacji GSI o nazwie
aosp_$arch_a
został wycofany. W przypadku urządzeń uaktualnionych z Androida 8 lub 8.1 do Androida 10 z ramdyskiem i bez systemu jako root użyj starszego GSIaosp_$arch_ab
. Ulepszonyinit
w ramdysku obsługuje OEM system.img z układem system-as-root. - Sprawdź rozruch. Korzystając z GSI wystarczy tylko odblokować urządzenie. Nie ma potrzeby wyłączania weryfikacji rozruchu.
Zmiany w Androidzie 9 GSI
Urządzenia uruchamiane z systemem Android 9 lub aktualizowane do niego muszą używać GSI systemu Android 9 do testowania zgodności. Obejmuje to następujące główne zmiany w stosunku do wcześniejszych GSI:
- Łączy GSI i emulator. GSI są budowane na podstawie obrazów systemu produktów emulujących, na przykład
aosp_arm64
iaosp_x86
. - System jako root. W poprzednich wersjach systemu Android urządzenia, które nie obsługiwały aktualizacji A/B, mogły montować obraz systemu w katalogu
/system
. W systemie Android 9 katalog główny obrazu systemu jest montowany jako katalog główny urządzenia. - 64-bitowy interfejs bindera. W systemie Android 8.x 32-bitowe GSI używały 32-bitowego interfejsu bindera. Android 9 nie obsługuje 32-bitowego interfejsu bindera, więc zarówno 32-bitowe GSI, jak i 64-bitowe GSI używają 64-bitowego interfejsu bindera.
- Egzekwowanie VNDK. W Androidzie 8.1 VNDK był opcjonalny. Począwszy od Androida 9, VNDK jest obowiązkowe, więc musi być ustawione
BOARD_VNDK_VERSION
. - Zgodna właściwość systemu. Android 9 umożliwia sprawdzenie dostępu dla zgodnej właściwości systemowej (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
).
Zmiany w systemie Android 9 Keymaster
We wcześniejszych wersjach Androida urządzenia implementujące Keymaster 3 lub starsze musiały sprawdzić, czy informacje o wersji ( ro.build.version.release
i ro.build.version.security_patch
) zgłoszone przez działający system są zgodne z informacjami o wersji zgłoszonymi przez bootloader. Takie informacje były zwykle uzyskiwane z nagłówka obrazu rozruchowego.
W systemie Android 9 i nowszych wymaganie to zostało zmienione, aby umożliwić dostawcom uruchamianie GSI. W szczególności Keymaster nie powinien przeprowadzać weryfikacji, ponieważ informacje o wersji zgłaszane przez GSI mogą nie zgadzać się z informacjami o wersji zgłaszanymi przez bootloader dostawcy. W przypadku urządzeń z implementacją Keymaster 3 lub starszej dostawcy muszą zmodyfikować implementację Keymaster, aby pominąć weryfikację (lub uaktualnić do Keymaster 4). Aby uzyskać szczegółowe informacje na temat Keymaster, zobacz Magazyn kluczy wspierany sprzętowo .
Pobieranie GSI
Gotowe dane GSI można pobrać ze strony internetowej AOSP Continuous Integration (CI) pod adresem ci.android.com . Jeśli typ GSI dla Twojej platformy sprzętowej jest niedostępny do pobrania, zapoznaj się z poniższą sekcją, aby uzyskać szczegółowe informacje na temat tworzenia GSI dla określonych celów.
Budynek GSI
Począwszy od Androida 9, każda wersja Androida ma gałąź GSI o nazwie DESSERT -gsi
w AOSP (na przykład android12-gsi
to gałąź GSI w Android 12). Gałęzie GSI zawierają zawartość Androida z zastosowanymi wszystkimi łatami bezpieczeństwa i łatami GSI .
Aby zbudować GSI, skonfiguruj drzewo źródłowe Androida, pobierając z gałęzi GSI i wybierając cel kompilacji GSI . Skorzystaj z poniższych tabel docelowych kompilacji, aby określić poprawną wersję GSI dla swojego urządzenia. Po zakończeniu kompilacji GSI jest obrazem systemu (czyli system.img
) i pojawia się w folderze wyjściowym out/target/product/ generic_arm64
.
Na przykład, aby zbudować obiekt GSI build target gsi_arm64-userdebug
w gałęzi GSI android12-gsi
, uruchom następujące polecenia.
$ 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
Cele kompilacji Androida GSI
Poniższe cele kompilacji GSI dotyczą urządzeń uruchamianych z systemem Android 9 lub nowszym.
Nazwa GSI | Łuk procesora | Bitowość interfejsu Binder | System jako root | Zbuduj cel |
---|---|---|---|---|
gsi_arm | RAMIĘ | 64 | Y | gsi_arm-user gsi_arm-userdebug |
gsi_arm64 | ARM64 | 64 | Y | gsi_arm64-user gsi_arm64-userdebug |
gsi_x86 | x86 | 64 | Y | gsi_x86-user gsi_x86-userdebug |
gsi_x86_64 | x86-64 | 64 | Y | gsi_x86_64-user gsi_x86_64-userdebug |
Wymagania dotyczące flashowania GSI
Urządzenia z systemem Android mogą mieć różne konstrukcje, więc nie ma ogólnych poleceń ani zestawu instrukcji dotyczących flashowania GSI, które można by zastosować do wszystkich urządzeń. Skontaktuj się z producentem urządzenia z systemem Android, aby uzyskać wyraźne instrukcje dotyczące flashowania. Użyj następujących kroków jako ogólnych wskazówek:
- Upewnij się, że urządzenie posiada:
- Potrójny
- Metoda odblokowywania urządzeń (aby można je było sflashować za pomocą
fastboot
) - Stan odblokowany, aby można go było flashować za pomocą
fastboot
(Aby upewnić się, że masz najnowszą wersjęfastboot
, skompiluj ją z drzewa źródłowego Androida).
- Usuń bieżącą partycję systemową, a następnie sflashuj GSI na partycję systemową.
- Wyczyść dane użytkownika i usuń dane z innych niezbędnych partycji (na przykład danych użytkownika i partycji systemowych).
- Uruchom ponownie urządzenie.
Na przykład, aby sflashować GSI do dowolnego urządzenia Pixel:
- Uruchom w trybie
fastboot
i odblokuj bootloader . - Urządzenia obsługujące
fastbootd
również muszą zostać uruchomione wfastbootd
przez:$ fastboot reboot fastboot
- Wymaż i sflashuj GSI na partycję systemową:
$ fastboot erase system $ fastboot flash system system.img
- Wyczyść dane użytkownika i usuń dane z innych niezbędnych partycji (na przykład danych użytkownika i partycji systemowych):
$ fastboot -w
- Uruchom ponownie:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failedUżyj następującego polecenia, aby usunąć partycję produktu i zwolnić miejsce na partycję systemową. Zapewnia to dodatkowe miejsce na flashowanie GSI:
$ fastboot delete-logical-partition product_aPostfiks
_a
powinien odpowiadać identyfikatorowi gniazda partycji systemowej, na przykład system_a
w tym przykładzie.Wkład w GSI
Android wita Twój wkład w rozwój GSI. Możesz się zaangażować i pomóc ulepszyć GSI poprzez:
- Tworzenie poprawki GSI.
DESSERT -gsi
nie jest gałęzią programistyczną i akceptuje tylko cherrypicki z gałęzi master AOSP, więc aby przesłać łatkę GSI, należy:- Prześlij poprawkę do
master
gałęzi AOSP . - Cherrywybierz łatkę do
DESSERT -gsi
. - Zgłoś błąd, aby zrecenzować Cherrypick.
- Prześlij poprawkę do
- Zgłaszanie błędów GSI lub zgłaszanie innych sugestii. Zapoznaj się z instrukcjami w sekcji Zgłaszanie błędów , a następnie przeglądaj lub zgłaszaj błędy GSI .
Porady
Zmiana trybu paska nawigacji za pomocą adb
Podczas uruchamiania z GSI tryb paska nawigacji jest konfigurowany przez nadpisanie dostawcy. Tryb paska nawigacji można zmienić, uruchamiając następujące polecenie adb w czasie wykonywania.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
Gdzie mode może być threebutton
, twobutton
, gestural
i tak dalej.