Cuttlefish: カスタム デバイスを作成する

このページでは、カスタマイズした Cuttlefish デバイスを作成する方法について説明します。Cuttlefish には、AndroidProducts.mk に示されているように、さまざまなフォーム ファクタの事前定義済みのデバイスタイプがあります。「新しいデバイスを追加する」に記載されている一般的なデバイス カスタマイズ オプションのほかに、仮想デバイスのボード構成プリセット(vsoc_x88_64、vsoc_arm64、vsoc_riscv64)、カーネル事前ビルド、ブートローダー事前ビルド、ベンダー プロパティ、システム構成、ネスト仮想化サポート、ディスプレイ オプションなど、Cuttlefish 固有のカスタマイズが可能です。カスタマイズ可能なビルド時間パラメータの完全なリストについては、device/google/cuttlefish/vsoc_x86_64/phone/aosp_cf.mk をご覧ください。

通常の Cuttlefish デバイスのサイズの 10 倍の架空の x86-64 big_phone デバイスを作成する手順を以下に示します。

既存のターゲットから継承する

既存のターゲットから継承するには:

  • device/google/cuttlefish/vsoc_x86_64/big_phone ディレクトリを作成します。
  • このディレクトリ内に aosp_cf.mk ファイルを作成します。
$(call inherit-product, device/google/cuttlefish/vsoc_x86_64_phone.mk)

PRODUCT_NAME: big_phone
PRODUCT_DEVICE: vsoc_x86_64
PRODUCT_MANUFACTURER := My Company
PRODUCT_MODEL: My Company very large phone

PRODUCT_VENDOR_PROPERTIES += \
    ro.soc.manufacturer=$(PRODUCT_MANUFACTURER) \
    ro.soc.model=$(PRODUCT_DEVICE)

lunch ターゲットを追加する

lunch ターゲットを device/google/cuttlefish/AndroidProducts.mk ファイルに挿入します。

PRODUCT_MAKEFILES := \
  ...
  big_phone:$(LOCAL_DIR)/vsoc_x86_64/big_phone/aosp_cf.mk
  ...
lunch big_phone

JSON 構成を定義する

Cuttlefish デバイスを起動するには、デバイス プロパティを表す階層構造の big_phone.json という JSON 構成ファイルを作成します。たとえば、JSON 構成ファイルで、VM に割り当てる RAM やディスプレイの構成などのオプションを指定できます。このファイルを AOSP ツリーに入れる必要はありません。構成の JSON 形式について詳しくは、正規設定をご覧ください。

{
  "instances":
      [
        {
          "vm": {
            "memory_mb": 40960,
          },
          "graphics": {
            "displays": [
              {
                "width": 7200,
                "height": 12800,
                "dpi": 320
              }
            ]
          }
        }
      ]
}

構成を起動するには、以下のコマンドを実行します。

cvd start --config_file=big_phone.json

launch_cvd(従来版)を実行する

一部の構成プロパティは階層構造の JSON 構成形式では指定できません。こうした構成については、シングルレベルの JSON ディクショナリから launch_cvd フラグのデフォルト値を設定できます。すべての構成オプションの完全なリストについては、cf_flags_validator.cpp をご覧ください。

以下に、JSON 構成ファイルを使用して launch_cvd フラグ オプションのデフォルト値をオーバーライドし、Cuttlefish ランチャーを有効にしてカスタムの構成を起動する方法の例について説明します。

  1. カスタム値を含む JSON 構成ファイル device/google/cuttlefish/shared/config/config_big_phone.json を作成します。

    {
      "x_res": 7200,
      "y_res": 12800,
      "dpi": 320,
      "memory_mb": 40960,
      "ddr_mem_mb": 49150,
    }
    
  2. Cuttlefish ランチャーで big_phone 構成を起動するため、以下を行って device/google/cuttlefish/shared/config/config_big_phone.json ファイルへのアクセス権を持つようにします。

    1. device/google/cuttlefish/shared/config/Android.bp ファイルに prebuilt_etc_host スタンザを追加して、JSON アーティファクトをビルド アーティファクトとして宣言します。

      prebuilt_etc_host {
          name: "cvd_config_big_phone.json",
          src: "config_big_phone.json",
          sub_dir: "cvd_config",
      }
      
    2. device/google/cuttlefish/shared/device.mk で以下を実行して、結果のビルド アーティファクト宣言を Cuttlefish ランチャーに追加します。

      $(call soong_config_append,cvd,launch_configs,cvd_config_big_phone)
      
    3. android_info.txt ファイルを作成し、device/google/cuttlefish/vsoc_x86_64/big_phone/aosp_cf.mk に以下の行を追加してそのファイルに big_phone 構成を結び付けます。

      TARGET_BOARD_INFO_FILE := device/google/cuttlefish/vsoc_x86_64/<var>big_phone</var>/android-info.txt
      
    4. 以下のコマンドで device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txt を生成して、big_phone 構成のデバイスタイプにラベルを付けます。

      config=big_phone