一般的なシステム画像

汎用システムイメージ(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の構成は次のとおりです。

現在の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/inituserdebug_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にアップグレードされたデバイスの場合、レガシーGSI aosp_$arch_abを使用します。 ramdiskのアップグレードされたinitは、system-as-rootレイアウトのOEMsystem.imgをサポートします。
  • 起動を確認します。 GSIを使用すると、デバイスのロックを解除するだけで済みます。検証ブートを無効にする必要はありません。

Android 9GSIの変更

Android 9で起動または更新されたデバイスは、コンプライアンステストにAndroid 9GSIを使用する必要があります。これには、以前の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以降、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_arm64 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デバイスの製造元に確認してください。一般的なガイドラインとして、次の手順を使用します。

  1. デバイスに次のものがあることを確認します。
    • トレブライズド
    • デバイスのロックを解除する方法( fastbootを使用してフラッシュできるようにするため)
    • fastbootを介してフラッシュ可能にするためのロック解除状態(最新バージョンのfastbootを使用できるようにするには、Androidソースツリーからビルドします)。
  2. 現在のシステムパーティションを消去してから、GSIをシステムパーティションにフラッシュします。
  3. ユーザーデータをワイプし、他の必要なパーティション(たとえば、ユーザーデータやシステムパーティション)からデータをクリアします。
  4. デバイスを再起動します。

たとえば、GSIを任意のPixelデバイスにフラッシュするには:

  1. fastbootモードで起動し、ブートローダーのロックを解除します
  2. fastbootdをサポートするデバイスは、次の方法でfastbootdを起動する必要もあります
    $ fastboot reboot fastboot
  3. GSIを消去してシステムパーティションにフラッシュします:
    $ fastboot erase system
    $ fastboot flash system system.img
    
  4. ユーザーデータをワイプし、他の必要なパーティション(ユーザーデータやシステムパーティションなど)からデータをクリアします
    $ fastboot -w
  5. 再起動:
    $ fastboot reboot
システムパーティションが小さいAndroid10以降のデバイスでは、GSIのフラッシュ時に次のエラーメッセージが表示される場合があります
    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パッチを送信するには、次のことを行う必要があります。
    1. パッチをAOSP masterブランチに送信します。
    2. DESSERT -gsiへのパッチをCherrypickします。
    3. バグを報告して、cherrypickをレビューしてもらいます。
  • GSIのバグを報告したり、その他の提案をしたりします。バグの報告の手順を確認してから、 GSIバグを参照またはファイリングします。

チップ

adbを使用してナビゲーションバーモードを変更する

GSIで起動する場合、ナビゲーションバーモードはベンダーのオーバーライドによって構成されます。実行時に次のadbコマンドを実行すると、ナビゲーションバーのモードを変更できます。

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

modeには、3ボタン、 gestural twobutton threebuttonあります。