דגלי build הם קבועים בזמן ה-build ואי אפשר לשנות אותם במהלך זמן הריצה. הדגלים האלה משמשים במקרים שבהם אי אפשר להשתמש בדגלי הגדרה, כמו
- יש לכם קטע קוד שעבר קומפילציה מראש או שנבנה מראש, ואתם רוצים לכלול אותו ב-build באופן אופציונלי.
- אתם רוצים לבצע שינויים במערכת הבנייה עצמה.
- אתם רוצים להוסיף סימון לתלויות כדי לנהל את גודל הקוד.
- אתם רוצים לנהל את ההשקה של תכונה, אבל אתם צריכים לבדוק את הערך של הדגל לפני שהמערכת מאפשרת להשתמש בדגלי aconfig.
הצהרה על דגל build
הצהרות על דגלי build מופיעות בקובצי textproto. כדי להצהיר על דגל build:
- ניווט אל
WORKING_DIRECTORY/build/release/flag_declarations/ - יוצרים קובץ בשם
RELEASE_MY_FLAG_NAME.textproto. עורכים את הקובץ ומוסיפים רשומה שדומה לרשומה הבאה:
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.