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

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

  • יש לכם קטע קוד שנוצר מראש או נוצר מראש שרוצים לכלול באופן אופציונלי ב-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. אם הסוג הוא string_value, הערך חייב להיות במירכאות. אם לא מציינים ערך, הערך יהיה מחרוזת ריקה. ערכים בוליאניים מייצגים את הערך true או את המחרוזת הריקה כדי לציין false.
    • workflow הוא LAUNCH או PREBUILT. השתמשו ב-LAUNCH לדגלים בוליאניים שמקדמים מ-false ל-true, בדומה לדגלים של הפעלת פיצ'רים. שימוש ב-PREBUILT לדגלים שמגדירים גרסה, בדרך כלל של גרסה מוכנה מראש.
    • containers סוג הקוד שאתם כותבים, למשל 'vendor' לקוד של ספק או 'product' לקוד של מוצר. אם יש לכם ספק לגבי הערך שצריך להשתמש בו, השתמשו בכל ארבעת סוגי הקונטיינרים, כפי שמוצג בדוגמה הקודמת.

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

בקובץ ה-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

בקובץ create, דגל build הוא משתנה create לקריאה בלבד. בדוגמה הבאה של קובץ 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.