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

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

  • יש לכם קטע קוד שנוצר מראש או נוצר מראש שרוצים לכלול באופן אופציונלי ב-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, אתם יכולים להשתמש במרחב השמות (namespace) כרצונכם.
    • value הוא הסוג והערך הראשוניים של הדגל. הסוג יכול להיות bool_value או string_value. אם הערך של type הוא string_value, צריך להקיף אותו במירכאות. אם לא מציינים ערך, הערך יהיה מחרוזת ריקה. ערכים בוליאניים מיוצגים כ-true או כמחרוזת ריקה עבור false.
    • workflow הוא LAUNCH או PREBUILT. משתמשים ב-LAUNCH לדגלים בוליאניים שמתקדמים מ-false ל-true, בדומה לדגלים להשקת תכונות. משתמשים ב-PREBUILT לדגלים שמגדירים גרסה, בדרך כלל של גרסת build מוכנה מראש.
    • 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.