דיונון: יצירת מכשיר מותאם אישית

בדף הזה נסביר איך יוצרים מכשיר Cuttlefish בהתאמה אישית. Cuttlefish כולל סוגי מכשירים מוגדרים מראש בגורמי צורה שונים, כפי שמפורטים ב-AndroidProducts.mk. בנוסף לאפשרויות הכלליות של התאמה אישית של המכשיר שמתוארות במאמר הוספת מכשיר חדש, אפשר לבצע התאמות אישיות ספציפיות ל-Cuttlefish. כמו למשל הגדרות קבועות מראש לתצורה של לוח מכשיר וירטואלי (vsoc_x88_64, mode_arm64, mode_riscv64), ליבה מראש של ליבה, הגדרות מובנות מראש של תוכנת אתחול, מאפייני ספק, הגדרות תצוגה בתוך מערכת, אפשרויות תצוגה וירטואלית, אפשרויות תצוגה בתוך מערכת, תמיכה בתצוגה וירטואלית. ב-device/google/cuttlefish/vsoc_x86_64/phone/aosp_cf.mk תוכלו למצוא רשימה מלאה של הפרמטרים של זמן ה-build שאפשר להתאים אישית.

בשלבים הבאים מתואר איך ליצור מכשיר x86-64 בדיוני big_phone מהגודל של פי 10 מגודל של מכשיר דגים רגיל.

ירושה מיעד קיים

כדי לקבל בירושה מיעד קיים:

  • יוצרים ספרייה של 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

הפעלת start_cvd (מדור קודם)

מאפיינים מסוימים של הגדרות אישיות לא זמינים בפורמט ההיררכי של הגדרות JSON. בהגדרות כאלה, אפשר להגדיר את ערכי ברירת המחדל של הדגל launch_cvd ממילון JSON ברמה אחת. לרשימה המלאה של כל אפשרויות ההגדרה: cf_flags_validator.cpp.

הדוגמה הבאה מראה איך לשנות את ערכי ברירת המחדל של אפשרויות הדגל launch_cvd באמצעות קובץ תצורה של JSON, ולאפשר למרכז האפליקציות ל-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. כדי להפעיל את ההגדרה big_phone במרכז האפליקציות של ה-Cuttlefish, צריך לוודא שיש לו גישה לקובץ device/google/cuttlefish/shared/config/config_big_phone.json באמצעות הפעולות הבאות:

    1. כדי להצהיר על פריט ה-JSON כפריט build, מוסיפים את הבית 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",
      }
      
    2. מוסיפים את ההצהרה של פריט המידע שנוצר בתהליך הפיתוח (Artifact) שנוצרת למרכז האפליקציות ב-Cuttlefish על ידי הרצת הפקודה הבאה ב-device/google/cuttlefish/shared/device.mk.

      $(call soong_config_append,cvd,launch_configs,cvd_config_big_phone)
      
    3. יוצרים קובץ 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
      
    4. כדי לתייג את סוג המכשיר עם ההגדרה big_phone, מאכלסים את device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txt כך:

      config=big_phone