במאמר הזה מוסבר איך ליצור מכשיר 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, יוצרים קובץ הגדרות JSON בשם big_phone.json עם מבנה היררכי שמייצג את מאפייני המכשיר. לדוגמה, בקובץ התצורה בפורמט JSON, אפשר לציין אפשרויות כמו זיכרון ה-RAM שהוקצה למכונה הווירטואלית ותצורת התצוגה. הקובץ הזה לא חייב להיות בעץ 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 באמצעות קובץ תצורה בפורמט 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 כארטיפקט של בנייה על ידי הוספת פסקה - 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", }
- כדי להוסיף את ההצהרה של ארטיפקט ה-build שנוצר למפעיל של 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_phoneconfig על ידי מילוי- device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txtבהגדרות הבאות:- config=big_phone
 
