Obrazy systemu ogólnego

Podstawowy obraz systemu (GSI) to obraz systemu z dostosowanymi konfiguracjami na potrzeby urządzeń z Androidem. Jest to implementacja czystego Androida z niezmodyfikowanym kodem Projektu Android Open Source (AOSP), którą można uruchomić na każdym urządzeniu z Androidem 9 lub nowszym.

Obrazy GSI służą do przeprowadzania testów VTS i CTS-on-GSI. Obraz systemu urządzenia z Androidem jest zastępowany obrazem GSI, a następnie testowany za pomocą Vendor Test Suite (VTS)Compatibility Test Suite (CTS), aby sprawdzić, czy urządzenie prawidłowo implementuje interfejsy dostawcy w najnowszej wersji Androida.

Aby rozpocząć korzystanie z GSI, zapoznaj się z poniższymi sekcjami, w których znajdziesz szczegółowe informacje o konfiguracjach GSI (i dopuszczalnych odchyleniach) oraz typach. Gdy będziesz gotowy(-a) do użycia GSI, pobierz i skompiluj GSI dla urządzenia docelowego, a następnie wgraj GSI na urządzenie z Androidem.

Konfiguracja i różnice w GSI

Obecny obraz GSI Androida ma taką konfigurację:

Obecny obraz GSI Androida zawiera te główne różnice:

  • Architektura procesora Obsługa różnych instrukcji procesora (ARM, x86 itp.) i bitowości procesora (32-bitowy lub 64-bitowy).

Obrazy GSI na potrzeby testów zgodności z Treble

Obraz GSI używany do testów zgodności jest określany przez wersję Androida, z którą urządzenie jest wprowadzane na rynek.

Typ urządzenia Kompilowanie elementu docelowego
Urządzenia wprowadzane na rynek z Androidem 15 gsi_$arch-user (Podpisano)
Urządzenia wprowadzane na rynek z Androidem 14 gsi_$arch-user (Podpisano)
Urządzenia wprowadzane na rynek z Androidem 13 gsi_$arch-user (Podpisano)
Urządzenia wprowadzane na rynek z Androidem 12L gsi_$arch-user (Podpisano)
Urządzenia wprowadzane na rynek z Androidem 12 gsi_$arch-user (Podpisano)
Urządzenia wprowadzane na rynek z Androidem 11 gsi_$arch-user (Podpisano)

Wszystkie obrazy GSI są tworzone na podstawie kodu Androida 12, a każda architektura procesora ma odpowiadający jej binarny plik GSI (listę docelowych kompilacji znajdziesz w sekcji Tworzenie obrazów GSI).

Zmiany w GSI Androida 12

Urządzenia, które są wprowadzane na rynek z Androidem 12 lub są aktualizowane do tej wersji, muszą używać obrazów GSI Androida 12 do testów zgodności. Obejmuje to następujące główne zmiany w stosunku do wcześniejszych wersji GSI:

  • Nazwa miejsca docelowego. Nazwa docelowa GSI w przypadku testów zgodności została zmieniona na gsi_$arch. Interfejs GSI o nazwie docelowejaosp_$arch jest zachowywany dla deweloperów aplikacji na Androida. Plan testówCTS-on-GSI jest też ograniczony w przypadku interfejsu dostawcy testów.
  • Starsza wersja GSI jest wycofywana. GSI 12 usuwa obejścia dla urządzeń z Androidem 8.0 lub 8.1, które nie są w pełni zgodne z Treble.
  • SEPolicy w wersji userdebug GSI gsi_$arch zawiera userdebug_plat_sepolicy.cil. Podczas flashowania vendor_boot-debug.img lub boot-debug.img/system/bin/inituserdebug_plat_sepolicy.cilsystem.img specyficznego dla producenta OEM. Szczegółowe informacje znajdziesz w artykule Testowanie VTS z użyciem debugowania dysku RAM.

Zmiany w GSI Androida 11

Urządzenia wprowadzane na rynek z Androidem 11 lub aktualizowane do tej wersji muszą używać obrazów GSI Androida 11 do testów zgodności. Obejmuje to następujące główne zmiany w stosunku do wcześniejszych wersji GSI:

  • zawartość system_ext. Android 11 definiuje nową partycję system_ext. GSI umieszcza zawartość rozszerzenia systemowego w folderze system/system_ext.
  • APEXes GSI zawiera zarówno spłaszczone, jak i skompresowane pakiety APEX. To, który z nich zostanie użyty, jest określane przez właściwość systemu ro.apex.updatable w partycji dostawcy w czasie działania. Szczegółowe informacje znajdziesz w artykule Konfigurowanie systemu pod kątem obsługi aktualizacji APEX.

Zmiany w GSI Androida 10

Urządzenia, które są wprowadzane na rynek z Androidem 10 lub są aktualizowane do tej wersji, muszą używać obrazów GSI Androida 10 do testów zgodności. Obejmuje to następujące główne zmiany w stosunku do wcześniejszych wersji GSI:

  • Wersja użytkownika GSI ma kompilację użytkownika z Androida 10. W Androidzie 10 obraz GSI w wersji użytkownika może być używany w testach zgodności CTS-on-GSI/VTS. Szczegółowe informacje znajdziesz w artykule Testowanie VTS za pomocą debugowania dysku RAM.
  • Format bez rozrzedzenia GSI z celami aosp_$arch są tworzone w formacie bez rozrzedzania. W razie potrzeby możesz użyć polecenia img2simg, aby przekonwertować nieprzetworzony GSI na format rzadki.
  • System-as-root Starszy cel kompilacji GSI o nazwie aosp_$arch_a został wycofany. W przypadku urządzeń zaktualizowanych z Androida 8 lub 8.1 do Androida 10 z ramdiskiem i bez systemu jako roota użyj starszego obrazu GSI aosp_$arch_ab. Ulepszony init w ramdysku obsługuje system.img OEM z układem system-as-root.
  • Weryfikacja podczas uruchamiania. W przypadku GSI wystarczy odblokować urządzenie. Nie musisz wyłączać weryfikacji podczas uruchamiania.

Zmiany w GSI Androida 9

Urządzenia, które są wprowadzane na rynek z Androidem 9 lub zaktualizowane do tej wersji, muszą używać obrazów GSI Androida 9 do testów zgodności. Obejmuje to następujące główne zmiany w stosunku do wcześniejszych wersji GSI:

  • Łączy GSI i emulator. Obrazy GSI są tworzone na podstawie obrazów systemowych produktów emulatora, np. aosp_arm64aosp_x86.
  • System-as-root W poprzednich wersjach Androida urządzenia, które nie obsługiwały aktualizacji A/B, mogły montować obraz systemu w katalogu /system. W Androidzie 9 katalog główny obrazu systemu jest montowany jako katalog główny urządzenia.
  • 64-bitowy interfejs narzędzia do łączenia plików. W Androidzie 8.x 32-bitowe obrazy GSI korzystały z 32-bitowego interfejsu bindera. Android 9 nie obsługuje 32-bitowego interfejsu bindera, więc zarówno 32-bitowe, jak i 64-bitowe obrazy GSI korzystają z 64-bitowego interfejsu bindera.
  • Egzekwowanie VNDK W Androidzie 8.1 VNDK było opcjonalne. Od Androida 9 VNDK jest obowiązkowy, więc należy ustawić BOARD_VNDK_VERSION must.
  • Zgodna właściwość systemu. Android 9 umożliwia sprawdzanie dostępu do zgodnej właściwości systemu (PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true).

Android 9 Zmiany w Keymasterze

W starszych wersjach Androida urządzenia z Keymasterem 3 lub starszym musiały sprawdzać, czy informacje o wersji (ro.build.version.releasero.build.version.security_patch) zgłaszane przez działający system są zgodne z informacjami o wersji zgłaszanymi przez program rozruchowy. Takie informacje były zwykle pobierane z nagłówka obrazu rozruchowego.

W Androidzie 9 i nowszych wersjach to wymaganie zostało zmienione, aby umożliwić dostawcom uruchamianie obrazu GSI. W szczególności Keymaster nie powinien przeprowadzać weryfikacji, ponieważ informacje o wersji zgłaszane przez GSI mogą nie być zgodne z informacjami o wersji zgłaszanymi przez program rozruchowy dostawcy. W przypadku urządzeń z Keymasterem 3 lub starszym dostawcy muszą zmodyfikować implementację Keymastera, aby pominąć weryfikację (lub uaktualnić ją do Keymastera 4). Więcej informacji o Keymasterze znajdziesz w artykule Sprzętowy magazyn kluczy.

Pobieranie GSI

Gotowe obrazy GSI możesz pobrać ze strony internetowej ciągłej integracji (CI) AOSP pod adresem ci.android.com. Jeśli typ obrazu GSI dla Twojej platformy sprzętowej jest niedostępny do pobrania, w sekcji poniżej znajdziesz szczegółowe informacje o tworzeniu obrazów GSI dla konkretnych celów.

Tworzenie GSI

Od Androida 9 każda wersja Androida ma w AOSP gałąź GSI o nazwie DESSERT-gsi (np. android12-gsi to gałąź GSI w Androidzie 12). Gałęzie GSI zawierają treść Androida ze wszystkimi zastosowanymi łatkami zabezpieczeńłatkami GSI.

Aby utworzyć GSI, skonfiguruj drzewo źródłowe Androida, pobierając je z gałęzi GSI i wybierając docelową kompilację GSI. Z tabel poniżej określ odpowiednią wersję GSI dla swojego urządzenia. Po zakończeniu kompilacji obraz GSI będzie obrazem systemu (czyli system.img) i pojawi się w folderze wyjściowym out/target/product/generic_arm64.

Aby na przykład utworzyć docelowy pakiet GSI gsi_arm64-userdebug w gałęzi GSI android12-gsi, uruchom te 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 GSI Androida

Te docelowe kompilacje GSI są przeznaczone dla urządzeń wprowadzanych na rynek z Androidem 9 lub nowszym.

Nazwa GSI Architektura procesora Ciąg bitowy interfejsu Binder System jako katalog główny Kompilowanie elementu docelowego
gsi_arm WŁĄCZ WYKRYWANIE 32 Y gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 Y gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 32 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 instalowania obrazów GSI

Urządzenia z Androidem mogą mieć różne konstrukcje, więc nie ma ogólnego polecenia ani zestawu instrukcji flashowania obrazu GSI, które można by zastosować do wszystkich urządzeń. Aby uzyskać szczegółowe instrukcje flashowania, skontaktuj się z producentem urządzenia z Androidem. Postępuj zgodnie z tymi ogólnymi wytycznymi:

  1. Sprawdź, czy urządzenie ma:
    • Podbicie tonów wysokich
    • Metoda odblokowywania urządzeń (aby można było je flashować za pomocą narzędzia fastboot).
    • Odblokowany stan, aby można było wgrać oprogramowanie za pomocą fastboot. (Aby mieć pewność, że masz najnowszą wersję fastboot, skompiluj ją z drzewa źródłowego Androida).
  2. Usuń bieżącą partycję systemową, a następnie wgraj GSI na partycję systemową.
  3. Wymaż dane użytkownika i usuń dane z innych niezbędnych partycji (np. partycji danych użytkownika i partycji systemowych).
  4. Zrestartuj urządzenie.

Aby na przykład wgrać GSI na dowolne urządzenie Pixel:

  1. Uruchomfastboot trybodblokuj program rozruchowy.
  2. Urządzenia obsługujące fastbootd muszą też uruchamiać się w trybie fastbootd, wykonując te czynności:
    $ fastboot reboot fastboot
  3. Usuń i zainstaluj GSI w partycji systemowej:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. Jeśli urządzenie obsługuje Android Virtual Framework, wgraj oprogramowanie Protected Virtual Machine Firmware:
    $ fastboot flash pvmfw pvmfw.img
    
  5. Wymaż dane użytkownika i usuń dane z innych niezbędnych partycji (np. partycji danych użytkownika i partycji systemowej):
    $ fastboot -w
  6. Uruchom ponownie w trybie bootloadera:
    $ fastboot reboot-bootloader
  7. Wyłącz weryfikację podczas uruchamiania podczas flashowania dostarczonego pliku vbmeta:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  8. Reboot:
    $ fastboot reboot
Na urządzeniach z Androidem 10 lub nowszym, które mają mniejsze partycje systemowe, podczas flashowania obrazu GSI może pojawić się ten komunikat o błędzie:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
Aby usunąć partycję produktu i zwolnić miejsce na partycję systemową, użyj tego polecenia. Zapewnia to dodatkowe miejsce na wgranie GSI:
$ fastboot delete-logical-partition product_a
Sufiks _a powinien odpowiadać identyfikatorowi gniazda partycji systemowej, np. system_a w tym przykładzie.

Współtworzenie GSI

Android zachęca do udziału w rozwijaniu GSI. Możesz się zaangażować i pomóc w ulepszaniu GSI, wykonując te czynności:

  • Tworzenie poprawki GSI DESSERT-gsi nie jest gałęzią deweloperską i akceptuje tylko wybrane zmiany z najnowszej gałęzi AOSP (android16-release), więc aby przesłać poprawkę GSI, musisz:
    1. Prześlij poprawkę do gałęzi AOSP android16-release.
    2. Wybrać poprawkę do DESSERT-gsi.
    3. Zgłoś błąd, aby sprawdzić, czy zmiany zostały wprowadzone.
  • zgłaszanie błędów GSI lub przesyłanie innych sugestii. Zapoznaj się z instrukcjami w artykule Zgłaszanie błędów, a następnie przejrzyj lub zgłoś błędy GSI.

Wskazówki

Zmiana trybu paska nawigacyjnego za pomocą adb

Podczas uruchamiania z GSI tryb paska nawigacyjnego jest konfigurowany przez zastąpienie dostawcy. Tryb paska nawigacyjnego możesz zmienić, uruchamiając w czasie działania to polecenie adb.

adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode

gdzie mode może być threebutton, twobutton, gestural itd.