汎用システムイメージ(GSI)は、Androidデバイス用に構成が調整されたシステムイメージです。これは、Android 9以降を実行しているAndroidデバイスで正常に実行できる、変更されていないAndroid Open Source Project(AOSP)コードを使用した純粋なAndroid実装と見なされます。
GSIは、VTSおよびCTS-on-GSIテストの実行に使用されます。 AndroidデバイスのシステムイメージはGSIに置き換えられ、ベンダーテストスイート(VTS)および互換性テストスイート(CTS)でテストされ、デバイスが最新バージョンのAndroidでベンダーインターフェイスを正しく実装していることを確認します。
GSIの使用を開始するには、 GSIの構成(および許可される差異)とタイプの詳細について、次のセクションを確認してください。 GSIを使用する準備ができたら、デバイスターゲットのGSIをダウンロードしてビルドし、GSIをAndroidデバイスにフラッシュします。
GSIの構成と差異
現在のAndroidGSIの構成は次のとおりです。
- 高音。 GSIには、AIDLインターフェイスとHIDLインターフェイスのサポートを含む、 AIDL / HIDLベースのアーキテクチャの変更( Trebleとも呼ばれます)の完全なサポートが含まれています。 GSIは、AIDL / HIDLベンダーインターフェースを使用するすべてのAndroidデバイスで使用できます。 (詳細については、アーキテクチャリソースを参照してください。)
- ファイルシステム。 GSIはext4ファイルシステムを使用します。
現在のAndroidGSIには、次の主な違いがあります。
- CPUアーキテクチャ。さまざまなCPU命令(ARM、x86など)およびCPUビット数(32ビットまたは64ビット)のサポート。
TrebleコンプライアンステストのGSIターゲット
コンプライアンステストに使用されるGSIは、デバイスが起動するAndroidのバージョンによって決まります。
デバイスタイプ | ターゲットを構築する |
---|---|
Android12で起動するデバイス | gsi_$arch-user (署名済み) |
Android11で起動するデバイス | gsi_$arch-user (署名済み) |
Android10で起動するデバイス | gsi_$arch-user (署名済み) |
Android9で起動するデバイス | gsi_$arch-userdebug |
すべてのGSIはAndroid12コードベースからビルドされ、各CPUアーキテクチャには対応するGSIバイナリがあります( Building GSIのビルドターゲットのリストを参照してください)。
Android 12GSIの変更
Android 12で起動または更新されたデバイスは、コンプライアンステストにAndroid 12GSIを使用する必要があります。これには、以前のGSIからの次の主要な変更が含まれます。
- ターゲット名。コンプライアンステストのGSIターゲット名が
gsi_$arch
に変更されました。ターゲット名aosp_$arch
のGSIは、Androidアプリ開発者向けに保持されています。ベンダーインターフェイスをテストするために、テストプランCTS-on-GSI
も削減されます。 - レガシーGSIは段階的に廃止されます。 GSI 12は、完全にトレブライズされていないAndroid8.0または8.1デバイスに対応する回避策を削除します。
- UserdebugSEPolicy。 GSI
gsi_$arch
には、userdebug_plat_sepolicy.cil
が含まれています。 OEM固有のvendor_boot-debug.img
またはboot-debug.img
をフラッシュする場合、/system/bin/init
はuserdebug_plat_sepolicy.cil
からsystem.img
をロードします。詳細については、デバッグラムディスクを使用したVTSテストを参照してください。
Android 11GSIの変更
Android 11で起動または更新されたデバイスは、コンプライアンステストにAndroid 11GSIを使用する必要があります。これには、以前のGSIからの次の主要な変更が含まれます。
- system_extの内容。 Android 11は、新しいパーティション
system_ext
を定義します。 GSIは、システム拡張機能の内容をsystem/system_ext
フォルダーの下に置きます。 - 頂点。 GSIには、フラット化されたAPEXと圧縮されたAPEXの両方が含まれています。どちらを使用するかは、実行時にベンダーパーティションのシステムプロパティ
ro.apex.updatable
によって決定されます。詳細については、 APEX更新をサポートするようにシステムを構成するを参照してください。
Android 10GSIの変更
Android 10で起動または更新されたデバイスは、コンプライアンステストにAndroid 10GSIを使用する必要があります。これには、以前のGSIからの次の主要な変更が含まれます。
- ユーザービルド。 GSIにはAndroid10からのユーザービルドがあります。Android10では、ユーザービルドGSIをCTS-on-GSI / VTSコンプライアンステストで使用できます。詳細については、デバッグラムディスクを使用したVTSテストを参照してください。
- スパースされていないフォーマット。ターゲット
aosp_$arch
を使用するGSIは、スパースされていない形式で構築されています。必要に応じて、img2simg
を使用して、スパースされていないGSIをスパース形式に変換できます。 - ルートとしてのシステム。
aosp_$arch_a
という名前のレガシーGSIビルドターゲットは段階的に廃止されました。 ramdiskおよびnon-system-as-rootを使用してAndroid8または8.1からAndroid10にアップグレードされたデバイスの場合、レガシーGSIaosp_$arch_ab
を使用します。 ramdiskのアップグレードされたinit
は、system-as-rootレイアウトのOEMsystem.imgをサポートします。 - 起動を確認します。 GSIを使用すると、デバイスのロックを解除するだけで済みます。検証ブートを無効にする必要はありません。
Android 9GSIの変更
Android 9で起動または更新されたデバイスは、コンプライアンステストにAndroid 9GSIを使用する必要があります。これには、以前のGSIからの次の主要な変更が含まれます。
- GSIとエミュレーターをマージします。 GSIは、
aosp_arm64
やaosp_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以降、VNDKは必須であるため、
BOARD_VNDK_VERSION
を設定する必要があります。 - 互換性のあるシステムプロパティ。 Android 9では、互換性のあるシステムプロパティのアクセスチェックが有効になっています(
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
)。
Android9キーマスターの変更
以前のバージョンのAndroidでは、Keymaster 3以下を実装するデバイスは、実行中のシステムによって報告されたバージョン情報( ro.build.version.release
およびro.build.version.security_patch
)がブートローダーによって報告されたバージョン情報と一致することを確認する必要がありました。このような情報は通常、ブートイメージヘッダーから取得されました。
Android 9以降では、ベンダーがGSIを起動できるように、この要件が変更されました。具体的には、GSIによって報告されたバージョン情報がベンダーのブートローダーによって報告されたバージョン情報と一致しない可能性があるため、Keymasterは検証を実行しないでください。 Keymaster 3以下を実装しているデバイスの場合、ベンダーはKeymasterの実装を変更して、検証をスキップする(またはKeymaster 4にアップグレードする)必要があります。キーマスターの詳細については、ハードウェアでバックアップされたキーストアを参照してください。
GSIのダウンロード
ビルド済みのGSIは、AOSP継続的インテグレーション(CI)Webサイト( ci.android.com )からダウンロードできます。ハードウェアプラットフォームのGSIタイプをダウンロードできない場合は、特定のターゲットのGSIの構築の詳細について、次のセクションを参照してください。
GSIの構築
Android 9以降、各AndroidバージョンにはAOSPのDESSERT -gsi
という名前のGSIブランチがあります(たとえば、 android12-gsi
はAndroid 12のGSIブランチです)。 GSIブランチには、すべてのセキュリティパッチとGSIパッチが適用されたAndroidのコンテンツが含まれます。
GSIをビルドするには、GSIブランチからダウンロードし、 GSIビルドターゲットを選択して、Androidソースツリーを設定します。以下のビルドターゲットテーブルを使用して、デバイスの正しいGSIバージョンを決定します。ビルドが完了すると、GSIはシステムイメージ(つまり、 system.img
)になり、出力フォルダーout/target/product/ generic_arm64
に表示されます。
たとえば、GSIブランチandroid12-gsi
でGSIビルドターゲットgsi_arm64-userdebug
をビルドするには、次のコマンドを実行します。
$ 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
AndroidGSIビルドターゲット
次のGSIビルドターゲットは、Android9以降で起動するデバイスを対象としています。
GSI名 | CPUアーチ | バインダーインターフェースのビットネス | ルートとしてのシステム | ターゲットを構築する |
---|---|---|---|---|
gsi_arm | 腕 | 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 |
GSIをフラッシュするための要件
Androidデバイスはさまざまなデザインを持つことができるため、すべてのデバイスに適用するためにGSIをフラッシュするための一般的なコマンドや一連の手順はありません。明示的な点滅手順については、Androidデバイスの製造元に確認してください。一般的なガイドラインとして、次の手順を使用します。
- デバイスに次のものがあることを確認します。
- トレブライズド
- デバイスのロックを解除する方法(
fastboot
を使用してフラッシュできるようにするため) -
fastboot
を介してフラッシュ可能にするためのロック解除状態(最新バージョンのfastboot
を使用できるようにするには、Androidソースツリーからビルドします)。
- 現在のシステムパーティションを消去してから、GSIをシステムパーティションにフラッシュします。
- ユーザーデータをワイプし、他の必要なパーティション(たとえば、ユーザーデータやシステムパーティション)からデータをクリアします。
- デバイスを再起動します。
たとえば、GSIを任意のPixelデバイスにフラッシュするには:
-
fastboot
モードで起動し、ブートローダーのロックを解除します。 -
fastbootd
をサポートするデバイスは、次の方法でfastbootd
を起動する必要もあります$ fastboot reboot fastboot
- GSIを消去してシステムパーティションにフラッシュします:
$ fastboot erase system $ fastboot flash system system.img
- ユーザーデータをワイプし、他の必要なパーティション(ユーザーデータやシステムパーティションなど)からデータをクリアします
$ fastboot -w
- 再起動:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failed次のコマンドを使用して、製品パーティションを削除し、システムパーティション用のスペースを解放します。これにより、GSIをフラッシュするための追加のスペースが提供されます
$ fastboot delete-logical-partition product_a接尾辞
_a
は、この例のsystem_a
などのシステムパーティションのスロットIDと一致する必要があります。GSIへの貢献
Androidは、GSI開発への貢献を歓迎します。次の方法で参加し、GSIの改善に役立てることができます。
- GSIパッチの作成。
DESSERT -gsi
は開発ブランチではなく、AOSPマスターブランチからのチェリーピックのみを受け入れるため、GSIパッチを送信するには、次のことを行う必要があります。- パッチをAOSP
master
ブランチに送信します。 -
DESSERT -gsi
へのパッチをCherrypickします。 - バグを報告して、cherrypickをレビューしてもらいます。
- パッチをAOSP
- GSIのバグを報告したり、その他の提案をしたりします。バグの報告の手順を確認してから、 GSIバグを参照またはファイリングします。
チップ
adbを使用してナビゲーションバーモードを変更する
GSIで起動する場合、ナビゲーションバーモードはベンダーのオーバーライドによって構成されます。実行時に次のadbコマンドを実行すると、ナビゲーションバーのモードを変更できます。
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
modeには、3ボタン、 gestural
twobutton
threebutton
あります。