ตั้งแต่วันที่ 27 มีนาคม 2025 เป็นต้นไป เราขอแนะนำให้ใช้ android-latest-release
แทน aosp-main
เพื่อสร้างและมีส่วนร่วมใน AOSP โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการเปลี่ยนแปลงใน AOSP
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
ที่มีขนาดเป็น 10 เท่าของอุปกรณ์ 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 ให้สร้างไฟล์การกําหนดค่า JSON ที่ชื่อ big_phone.json
โดยมีโครงสร้างตามลําดับชั้นที่แสดงถึงพร็อพเพอร์ตี้ของอุปกรณ์ เช่น ในไฟล์การกําหนดค่า JSON คุณสามารถระบุตัวเลือกต่างๆ เช่น RAM ที่จัดสรรสําหรับ VM และการกําหนดค่าการแสดงผล ไฟล์นี้ไม่จำเป็นต้องอยู่ในต้นไม้ 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 แบบลําดับชั้น สําหรับการกําหนดค่าดังกล่าว คุณสามารถตั้งค่าlaunch_cvd
flag
ค่าเริ่มต้นจากพจนานุกรม JSON ระดับเดียว ดูรายการตัวเลือกการกำหนดค่าทั้งหมดได้ที่ cf_flags_validator.cpp
ต่อไปนี้เป็นตัวอย่างวิธีลบล้างค่าเริ่มต้นของตัวเลือกlaunch_cvd
Flag โดยใช้ไฟล์การกําหนดค่า JSON และเปิดใช้ Cuttlefish Launcher เพื่อเปิดการกําหนดค่าที่กําหนดเอง
สร้างไฟล์การกําหนดค่า 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,
}
หากต้องการให้ตัวเปิด Cuttlefish เปิดการกําหนดค่า big_phone
ให้ตรวจสอบว่าตัวเปิดมีสิทธิ์เข้าถึงไฟล์ device/google/cuttlefish/shared/config/config_big_phone.json
โดยทําดังนี้
ประกาศอาร์ติแฟกต์ JSON เป็นอาร์ติแฟกต์การสร้างโดยเพิ่ม stanza prebuilt_etc_host
ในไฟล์ device/google/cuttlefish/shared/config/Android.bp
prebuilt_etc_host {
name: "cvd_config_big_phone.json",
src: "config_big_phone.json",
sub_dir: "cvd_config",
}
เพิ่มประกาศอาร์ติแฟกต์การสร้างที่ได้ลงในตัวเปิด Cuttlefish โดยเรียกใช้คำสั่งต่อไปนี้ใน device/google/cuttlefish/shared/device.mk
$(call soong_config_append,cvd,launch_configs,cvd_config_big_phone)
สร้างไฟล์ android_info.txt
และเชื่อมโยงการกําหนดค่า big_phone
กับไฟล์โดยเพิ่มบรรทัดต่อไปนี้ลงใน device/google/cuttlefish/vsoc_x86_64/big_phone/aosp_cf.mk
TARGET_BOARD_INFO_FILE := device/google/cuttlefish/vsoc_x86_64/<var>big_phone</var>/android-info.txt
ติดป้ายกำกับประเภทอุปกรณ์ด้วยการกำหนดค่า big_phone
โดยป้อนข้อมูลต่อไปนี้ใน
device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txt
config=big_phone
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Cuttlefish: Create a custom device\n\nThis page describes how to create a customized Cuttlefish device. Cuttlefish\nincludes predefined device types in different form factors as listed in\n[`AndroidProducts.mk`](https://cs.android.com/android/platform/superproject/+/android-latest-release:device/google/cuttlefish/AndroidProducts.mk). In addition to the general device customization\noptions described in\n[Adding a new device](/docs/setup/create/new-device), you can make\nCuttlefish-specific customizations such as virtual device board\nconfiguration presets (vsoc_x86_64, vsoc_arm64, vsoc_riscv64), kernel prebuilts,\nbootloader prebuilts, vendor properties, system configurations, nested\nvirtualization support, and display options. For a full list of the\nbuild time parameters that can be customized, see\n[`device/google/cuttlefish/vsoc_x86_64/phone/aosp_cf.mk`](https://cs.android.com/android/platform/superproject/+/android-latest-release:device/google/cuttlefish/vsoc_x86_64/phone/aosp_cf.mk).\n\nThe following steps describe how to create a fictional x86-64\n\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e device ten times the size of an ordinary\nCuttlefish device.\n\nInherit from an existing target\n-------------------------------\n\nTo inherit from an existing target:\n\n- Create a `device/google/cuttlefish/vsoc_x86_64/`\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e directory.\n- Create an `aosp_cf.mk` file in that directory.\n\n $(call inherit-product, device/google/cuttlefish/vsoc_x86_64_phone.mk)\n\n PRODUCT_NAME: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003ebig_phone\u003c/span\u003e\u003c/var\u003e\n PRODUCT_DEVICE: vsoc_x86_64\n PRODUCT_MANUFACTURER := \u003cvar translate=\"no\"\u003eMy\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003eCompany\u003c/var\u003e\n PRODUCT_MODEL: \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-n\"\u003eMy\u003c/span\u003e \u003cspan class=\"devsite-syntax-n\"\u003eCompany\u003c/span\u003e \u003cspan class=\"devsite-syntax-n\"\u003every\u003c/span\u003e \u003cspan class=\"devsite-syntax-n\"\u003elarge\u003c/span\u003e \u003cspan class=\"devsite-syntax-n\"\u003ephone\u003c/span\u003e\u003c/var\u003e\n\n PRODUCT_VENDOR_PROPERTIES += \\\n ro.soc.manufacturer=$(PRODUCT_MANUFACTURER) \\\n ro.soc.model=$(PRODUCT_DEVICE)\n\nAdd a lunch target\n------------------\n\nInsert the `lunch` target into the\n`device/google/cuttlefish/AndroidProducts.mk` file: \n\n PRODUCT_MAKEFILES := \\\n ...\n \u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e:$(LOCAL_DIR)/vsoc_x86_64/\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e/aosp_cf.mk\n ...\n\n lunch \u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e\n\nDefine JSON configuration\n-------------------------\n\nTo launch the Cuttlefish device, create a JSON configuration file named\n\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e`.json` with a hierarchical structure representing\nthe device properties. For example, in the JSON configuration file, you can\nspecify options such as the RAM allocated for the VM and the display\nconfiguration. This file doesn't have to be in the AOSP tree.\nFor details on the JSON format for configurations, see\n[Canonical configurations](/docs/devices/cuttlefish/multi-tenancy#canonical-configs). \n\n {\n \"instances\":\n [\n {\n \"vm\": {\n \"memory_mb\": 40960,\n },\n \"graphics\": {\n \"displays\": [\n {\n \"width\": 7200,\n \"height\": 12800,\n \"dpi\": 320\n }\n ]\n }\n }\n ]\n }\n\nTo launch the configuration, run: \n\n cvd create --config_file=\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e.json\n\nRun launch_cvd (legacy)\n-----------------------\n\nCertain configuration properties aren't available in the hierarchical JSON\nconfiguration format. For such configurations, you can set `launch_cvd` flag\ndefault values from a single-level JSON dictionary. For a full list of all\nconfiguration options, see\n[`cf_flags_validator.cpp`](https://github.com/google/android-cuttlefish/blob/main/base/cvd/cuttlefish/host/commands/cvd/parser/cf_flags_validator.cpp).\n\nThe following describes an example of how to override the default values of the\n[`launch_cvd` flag options](/docs/devices/cuttlefish/restart#flags)\nusing a JSON configuration file and enable the Cuttlefish launcher to launch the\ncustom configuration.\n\n1. Create a JSON configuration file,\n `device/google/cuttlefish/shared/config/config_`\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e`.json`,\n with custom values.\n\n {\n \"x_res\": 7200,\n \"y_res\": 12800,\n \"dpi\": 320,\n \"memory_mb\": 40960,\n \"ddr_mem_mb\": 49150,\n }\n\n2. For the Cuttlefish launcher to launch the `big_phone` config, ensure it has\n access to the\n `device/google/cuttlefish/shared/config/config_`\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e`.json`\n file by doing the following:\n\n 1. Declare the JSON artifact as a build artifact by adding the\n `prebuilt_etc_host` stanza in the\n `device/google/cuttlefish/shared/config/Android.bp` file.\n\n prebuilt_etc_host {\n name: \"cvd_config_\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e.json\",\n src: \"config_\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e.json\",\n sub_dir: \"cvd_config\",\n }\n\n 2. Add the resulting build artifact declaration into the Cuttlefish\n launcher by running the following in\n `device/google/cuttlefish/shared/device.mk`.\n\n $(call soong_config_append,cvd,launch_configs,cvd_config_\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e)\n\n 3. Create an `android_info.txt` file and tie the `big_phone` config to the\n file by adding the following line to\n `device/google/cuttlefish/vsoc_x86_64/`\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e`/aosp_cf.mk`:\n\n TARGET_BOARD_INFO_FILE := device/google/cuttlefish/vsoc_x86_64/\u003cvar\u003ebig_phone\u003c/var\u003e/android-info.txt\n\n 4. Label the device type with the `big_phone` config by populating\n `device/google/cuttlefish/vsoc_x86_64/`\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e`/android-info.txt`\n with the following:\n\n config=\u003cvar translate=\"no\"\u003ebig_phone\u003c/var\u003e"]]