Google致力於提高黑人社區的種族平等。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

通用系統映像

通用系統映像(GSI)是具有針對Android設備進行調整的配置的系統映像。它被認為是具有未修改的Android開放源代碼項目(AOSP)代碼的純Android實現,任何運行Android 8.1或更高版本的Android設備都可以成功運行。

GSI用於運行VTS和CTS-on-GSI測試。將Android設備的系統映像替換為GSI,然後通過供應商測試套件(VTS)兼容性測試套件(CTS)進行測試,以確保該設備正確地實現了供應商與最新版本的Android的接口。

要開始使用GSI,請查看以下各節,詳細了解GSI配置 (和允許的差異), 類型 (Android GSI和舊版GSI)以及供應商二進製文件和VNDK依賴項 。準備使用GSI時,請下載並為您的設備目標構建GSI ,然後將GSI閃存到Android設備。

GSI配置和差異

當前的Android GSI具有以下配置:

  • 高音 GSI完全支持Android 8.0中引入的基於HIDL的架構更改 (也稱為Treble ),包括對HIDL接口的支持。您可以在使用HIDL供應商界面的任何Android設備上使用GSI。 (有關更多詳細信息,請參閱體系結構資源 。)
  • 驗證啟動。 GSI不包含驗證啟動解決方案(例如vboot 1.0AVB )。要將GSI刷新到在Android 9或更早版本上啟動的設備,該設備必須具有禁用驗證啟動的方法。
  • 文件系統。 GSI使用ext4文件系統。
  • 分區佈局。 GSI使用系統作為根分區佈局。

當前的Android GSI包括以下主要差異:

  • CPU架構。支持不同的CPU指令(ARM,x86等)和CPU位(32位或64位)。

GSI高音一致性測試的目標

用於一致性測試的GSI由設備啟動時所用的Android版本確定。

設備類型建立目標
使用Android 10啟動的設備 aosp_$arch-user
使用Android 9啟動的設備 aosp_$arch-userdebug
使用Android 8.0或Android 8.1啟動的設備 aosp_$arch_ab-userdebug

所有GSIS從Android的代碼庫10內置,每個CPU架構都有相應的GSI二進制(見的構建目標列表中的大樓GSIS )。

Android 10 GSI變更

使用Android 10啟動的設備必須使用Android 10 GSI進行一致性測試。這包括對早期GSI的以下主要更改:

  • 用戶構建。 GSI具有來自Android 10的用戶構建。在Android 10中,用戶構建GSI可用於CTS-on-GSI / VTS一致性測試。有關詳細信息,請參考《 使用調試Ramdisk進行VTS測試 》。
  • 未保留的格式。目標aosp_$arch GSI是用未分配的格式構建的。如有必要,可以使用img2simg將未稀疏的GSI轉換為稀疏格式。
  • 根系統。名為aosp_$arch_a的舊版GSI構建目標已被淘汰。對於使用ramdisk和非root用戶身份從Android 8或8.1升級到Android 10的設備,請使用舊版GSI aosp_$arch_ab 。 ramdisk中升級後的init支持以system-as-root佈局的OEM system.img。

要測試使用CTS-on-GSI在Android 9或10上啟動的設備,請使用Android GSI構建目標

舊版GSI

傳統GSIS命名後綴_ab (例如, aosp_arm64_ab )。這些GSI是從Android 10源代碼樹構建的,但包含從Android 8或8.1升級的設備的以下向後兼容配置:

  • 32位用戶空間+ 32位活頁夾接口。 32位GSI可以繼續使用32位活頁夾接口。
  • 8.1越南盾。設備可以使用隨附的8.1 ​​VNDK。
  • 掛載目錄。某些舊式設備使用目錄作為安裝指針(例如/bluetooth/firmware/radio/persist )。

要測試使用CTS-on-GSI在Android 8或8.1上啟動的設備,請使用舊版GSI構建目標

Android 9 GSI變更

Android 9 GSI與以前的GSI相比包括以下主要變化:

  • 合併GSI和模擬器。 GSI是根據仿真器產品的系統映像(例如aosp_arm64aosp_x86
  • 根系統。在早期版本的Android中,不支持A / B更新的設備可以將系統映像安裝在/system目錄下。在Android 9中,系統映像的根目錄將作為設備的根目錄掛載。
  • 64位活頁夾接口。在Android 8.x中,32位GSI使用32位活頁夾接口。 Android 9不支持32位活頁夾接口,因此32位GSI和64位GSI均使用64位活頁夾接口。
  • VNDK執行。在Android 8.1中,VNDK是可選的。從Android 9開始, 必須使用BOARD_VNDK_VERSION ,因此必須設置BOARD_VNDK_VERSION
  • 兼容的系統屬性。 Android 9啟用了對兼容系統屬性的訪問檢查( PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true )。

Android 9 Keymaster更改

在Android的早期版本中,需要使用實施Keymaster 3或更低版本的設備來驗證運行系統報告的版本信息( ro.build.version.releasero.build.version.security_patchro.build.version.release與引導加載程序報告的版本信息匹配。通常從引導映像頭獲得此類信息。

在Android 9及更高版本中,此要求已更改,以使供應商能夠啟動GSI。具體來說,Keymaster不應執行驗證,因為GSI報告的版本信息可能與供應商的引導加載程序報告的版本信息不匹配。對於實施Keymaster 3或更低版本的設備,供應商必須修改Keymaster實施以跳過驗證(或升級到Keymaster 4)。有關Keymaster的詳細信息,請參閱硬件支持的Keystore

供應商二進製文件和VNDK依賴項

升級到Android 10的設備具有不同的升級路徑,具體取決於設備上使用的供應商二進製文件的版本以及用於構建設備的VNDK相關配置。下表總結了對已升級設備的舊版GSI支持。

用例供應商
二進製文件
BOARD_VNDK_VERSION 舊版GSI
系統二進製版本
舊版GSI支持
0 8.0 (任何) 10 沒有
1個 8.1 (空) 10 沒有
2 8.1 current 10
3 10 current 10

受支持的最常見用例是#2,其中舊版GSI支持運行Android 8.1且將BOARD_VNDK_VERSION設置為current

不支持案例1。在這種情況下,舊版GSI不支持運行Android 8.1 BOARD_VNDK_VERSION從構建中省略BOARD_VNDK_VERSION設備。無法支持這些設備,因為它們的供應商二進製文件依賴於Android 8.1非VNDK共享庫,而這些文件未包含在舊版GSI中。要使這些設備與舊版GSI兼容,您必須執行以下任一操作:

  • BOARD_VNDK_VERSION不使用BOARD_VNDK_RUNTIME_DISABLE情況下啟用BOARD_VNDK_VERSION (用例2)。

    要么

  • 移植/升級供應商的二進製文件,以依賴於Android 10中的共享庫(用例3)。

下載GSI

您可以從AOSP持續集成(CI)網站ci.android.com下載預構建的GSI 。如果您的硬件平台的GSI類型不可下載,請參考以下部分,以了解有關為特定目標構建GSI的詳細信息。

建立GSI

與Android 9開始,每個Android版本具有GSI分支命名DESSERT -gsi上AOSP(例如, android10-gsi是在Android 10的GSI分支)。 GSI分支包括Android的內容以及所有安全補丁GSI補丁

要構建GSI,請通過從GSI分支下載選擇GSI構建目標來設置Android源代碼樹。使用下面的構建目標表來確定您設備的正確GSI版本。構建完成後,GSI是系統映像(即system.img ),並出現在輸出文件夾out/target/product/ generic_arm64 。該構建還會輸出vbmeta.img ,您可以使用它在使用Android驗證啟動的設備上禁用驗證啟動。

例如,要在GSI分支android10-gsi上構建GSI構建目標aosp_arm64-userdebug android10-gsi ,請運行以下命令。

$ repo init -u https://android.googlesource.com/platform/manifest -b android10-gsi
$ repo sync -cq
$ source build/envsetup.sh
$ lunch aosp_arm64-userdebug
$ make -j4

Android GSI構建目標

以下GSI構建目標適用於在Android 9或更高版本上啟動的設備。由於減少了架構之間的差異,Android 10僅包含四個GSI產品。

GSI名稱 CPU架構活頁夾接口位根系統建立目標
aosp_arm 64 ÿ aosp_arm-user
aosp_arm-userdebug
aosp_arm64 的ARM64 64 ÿ aosp_arm64-user
aosp_arm64-userdebug
aosp_x86 x86 64 ÿ aosp_x86-user
aosp_x86-userdebug
aosp_x86_64 x86-64 64 ÿ aosp_x86_64-user
aosp_x86_64-userdebug

舊版GSI構建目標

以下舊版GSI構建目標適用於從Android 8.0或8.1升級到Android 10的設備。舊版GSI名稱包括後綴_ab以將其與Android 10 GSI名稱區分開。

GSI名稱 CPU架構活頁夾接口位根系統建立目標
aosp_arm_ab 32 ÿ aosp_arm_ab-userdebug
aosp_arm_64b_ab 64 ÿ aosp_arm_64b_ab-userdebug
aosp_arm64_ab 的ARM64 64 ÿ aosp_arm64_ab-userdebug
aosp_x86_ab x86 32 ÿ aosp_x86_ab-userdebug
aosp_x86_64_ab x86-64 64 ÿ aosp_x86_64_ab-userdebug

刷新GSI的要求

Android設備可以具有不同的設計,因此沒有通用的命令或指令集可用於刷新GSI以應用於所有設備。請與Android設備的製造商聯繫,以獲取明確的閃爍說明。使用以下步驟作為一般準則:

  1. 確保設備具有以下功能:
    • 透頂
    • 一種解鎖設備的方法(以便可以使用fastboot
    • 一種禁用驗證啟動的方法(例如, vboot 1.0AVB
    • 一種解鎖狀態,使其可以通過fastboot (要確保您具有fastboot的最新版本,請從Android源代碼樹中進行構建。)
  2. 禁用驗證啟動。
  3. 擦除當前系統分區,然後將GSI閃存到系統分區。
  4. 擦除用戶數據並清除其他必要分區(例如,用戶數據和系統分區)中的數據。
  5. 重新啟動設備。

例如,要將GSI閃存到任何Pixel設備:

  1. 引導到fastboot模式解鎖引導程序 。支持fastbootd的設備還需要通過以下方式引導到fastbootd
    $ fastboot reboot fastboot
  2. 通過刷新vbmeta.img禁用驗證啟動(AVB):
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  3. 擦除並將GSI刷新到系統分區:
    $ fastboot erase system
    $ fastboot flash system system.img
    
  4. 擦除用戶數據並清除其他必要分區(例如,用戶數據和系統分區)中的數據:
    $ fastboot -w
  5. 重啟:
    $ fastboot reboot
在具有較小系統分區的Android 10設備上,刷新GSI時可能會出現以下錯誤消息:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
使用以下命令刪除產品分區並釋放系統分區的空間。這提供了額外的空間來刷新GSI:
$ fastboot delete-logical-partition product_a
後綴_a應該與系統分區的插槽ID相匹配,例如本例中的system_a

為GSI做出貢獻

Android歡迎您為GSI開發做出貢獻。您可以通過以下方式參與並幫助改善GSI:

  • 創建GSI補丁。 DESSERT -gsi不是一個發展分支並接受來自AOSP主分支僅cherrypicks,所以提交GSI補丁,你必須:
    1. 將補丁提交到AOSP master分支。
    2. Cherrypick補丁到DESSERT -gsi
    3. 提交錯誤以使Cherrypick複審。
  • 報告GSI錯誤或提出其他建議。查看“ 報告錯誤 ”中的說明,然後瀏覽或歸檔GSI錯誤

提示

使用ADB更改導航欄模式

使用GSI引導時,導航欄模式由供應商優先配置。您可以通過在運行時運行以下adb命令來更改導航欄模式。

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

mode可以threebuttontwobuttongestural等。