Cuttlefish:建立自訂裝置

本頁說明如何建立自訂 Cuttlefish 裝置。Cuttlefish 包含不同板型規格的預先定義裝置類型,如 AndroidProducts.mk 所列。除了「新增裝置」一文所述的一般裝置自訂選項外,您還可以進行 Cuttlefish 專屬的自訂作業,例如虛擬裝置主機板設定預設值 (vsoc_x86_64、vsoc_arm64、vsoc_riscv64)、核心預建版本、開機載入程式預建版本、供應商屬性、系統設定、巢狀虛擬化支援和顯示選項。如需可自訂的建構時間參數完整清單,請參閱 device/google/cuttlefish/vsoc_x86_64/phone/aosp_cf.mk

下列步驟說明如何建立虛構的 x86-64 big_phone 裝置,大小是一般 Cuttlefish 裝置的十倍。

沿用現有目標

如要沿用現有目標的設定,請按照下列步驟操作:

  • 建立 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 目標插入 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 和螢幕設定。這個檔案不一定要位於 Android 開放原始碼計畫 (AOSP) 樹狀結構中。 如要進一步瞭解設定的 JSON 格式,請參閱標準設定

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

如要啟動設定,請執行下列指令:

cvd create --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. 使用 big_phone 設定標記裝置類型,方法是填入 device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txt ,並提供下列資訊:

      config=big_phone