הצהרה על דגל build ושימוש בו

דגלי build הם קבועים בזמן ה-build ואי אפשר לשנות אותם במהלך זמן הריצה. הדגלים האלה משמשים במקרים שבהם אי אפשר להשתמש בדגלי הגדרה, כמו

  • יש לכם קטע קוד שעבר קומפילציה מראש או שנבנה מראש, ואתם רוצים לכלול אותו ב-build.
  • אתם רוצים לבצע שינויים במערכת build עצמה.
  • אתם רוצים להוסיף סימון לתלויות כדי לנהל את גודל הקוד.
  • אתם רוצים לנהל את ההשקה של תכונה, אבל אתם צריכים לבדוק את הערך של הדגל לפני שהמערכת מאפשרת להשתמש בדגלי aconfig.

הצהרה על דגל build

הצהרות על דגלי build מופיעות בקובצי textproto. כדי להצהיר על דגל build:

  1. ניווט אל WORKING_DIRECTORY/build/release/flag_declarations/
  2. יוצרים קובץ בשם RELEASE_MY_FLAG_NAME.textproto.
  3. עורכים את הקובץ ומוסיפים רשומה שדומה לרשומה הבאה:

    name: "RELEASE_MY_FLAG_NAME"
    namespace: "android_UNKNOWN"
    description: "Control if we should read from new storage."
    workflow: LAUNCH
    containers: "product"
    containers: "system"
    containers: "system_ext"
    containers: "vendor"
    

    כאשר:

    • name מכיל את שם הדגל עם הקידומת RELEASE_. מותר להשתמש רק באותיות רישיות ובקו תחתון.
    • namespace מכיל את מרחב השמות של התרומות. כדי לקבוע את מרחב השמות, צריך לעבוד עם בודק Google שהוקצה לכם. אם אתם משתמשים בדגלים להשקת תכונות כדי לשמור על יציבות של שיקוף AOSP משלכם, אתם יכולים להשתמש במרחב השמות איך שאתם רוצים.
    • value הוא הסוג והערך הראשוניים של הדגל. הסוג יכול להיות bool_value או string_value. אם הערך של type הוא string_value, צריך להוסיף מירכאות לערך. אם לא מציינים ערך, הערך הוא מחרוזת ריקה. ערכים בוליאניים מיוצגים כ-true או כמחרוזת ריקה לערך false.
    • workflow הוא LAUNCH או PREBUILT. משתמשים ב-LAUNCH לדגלים בוליאניים שמתקדמים מ-false ל-true, בדומה לדגלים להשקת תכונות. משתמשים ב-PREBUILT לדגלים שמגדירים גרסה, בדרך כלל של גרסה מוכנה מראש.
    • containers סוג הקוד שאתם כותבים, למשל vendor לקוד ספק או product לקוד מוצר. אם אתם לא בטוחים איזה ערך להזין, אתם יכולים להשתמש בכל ארבעת סוגי המאגדים כמו בדוגמה הקודמת.

שימוש בדגל build בקובץ Soong

בקובץ ה-build ובמודול שבו רוצים לשלוח שאילתה לגבי ערך הדגל, משתמשים בתנאי כדי ליצור הסתעפות לפי ערך הדגל. לדוגמה, בקטע הקוד הבא, מתבצעת שאילתה על הערך של הדגל RELEASE__READ_FROM_NEW_STORAGE:

cc_defaults {
  name: "aconfig_lib_cc_shared_link.defaults",
  shared_libs: select(release_flag("RELEASE_READ_FROM_NEW_STORAGE"), {
    true: ["libaconfig_storage_read_api_cc],
    default: [],
  }),
}

אם הערך של הדגל הזה הוא true, המודול libaconfig_storage_read_api_cc מקושר באופן דינמי למודול cc_defaults.

אם הערך של הדגל הזה הוא false, לא קורה כלום (default: [],).

שימוש בדגל build בקובץ makefile

בקובץ make, דגל build הוא משתנה make לקריאה בלבד. בדוגמה הבאה של קובץ makefile יש גישה לדגל build שנקרא RELEASED_PACKAGE_NFC_STCK:

# NFC and Secure Element packages
PRODUCT_PACKAGES += \
    $(RELEASE_PACKAGE_NFC_STACK) \
    Tag \
    SecureElement \
    android.hardware.nfc-service.st \
    android.hardware.secure_element@1.0-service.st \
    NfcOverlayCoral

ההצהרה על הסימון הזה כוללת שדה workflow שמוגדר כ-PREBUILT בקובץ RELEASE_PACKAGE_NFC_STACK.textproto, וערך מחרוזת של com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto בקובץ הערכים של הסימון עבור הגדרת הפיתוח trunk_staging.