אפשר להשתמש בדגלי aconfig בקוד Java, C, C++ ו-Rust. מערכת ה-build של AOSP מפעילה כלי שנקרא aconfig, שמשממש ליצירת ספרייה ספציפית לשפה של שיטות שאפשר להשתמש בהן כדי לגשת לערך של כל דגל. לפני שתוכלו ליצור את הספרייה, עליכם להצהיר על דגלים ולהוסיף אותם ל-build.
הצהרת דגל aconfig ל-Java
כדי להצהיר על דגל aconfig ל-Java:
בספרייה שבה נמצא הקוד החדש, יוצרים קובץ עם הסיומת
.aconfig
, למשלmy_new_aconfig_flag_declarations.aconfig
. קובץ aconfig הוא קובץ טקסט proto שתואם לסכימה רגילה.מוסיפים הצהרת דגל שדומה לזו:
package: "com.example.android.aconfig.demo.flags" container: "system" flag { name: "my_new_flag" namespace: "aconfig_demo_namespace" description: "This flag controls untested code" bug: "<none>" }
איפה:
- השדה
package
, בשילוב עם שם הדגל, מספק מפתח ייחודי. ב-Java, הגדרתpackage
ל-foo.bar
יוצרת כיתה שנוצרת באופן אוטומטי בשםfoo.bar.Flags
. ב-C++, השם של שיטות הגישה לדגלים יהיהfoo::bar::"flagname"
. דגלים באותו קובץ הצהרה שייכים לאותה חבילה, אבל כמה קובצי הצהרה יכולים לתרום דגלים לאותה חבילה. container
מגדיר אוסף של קוד שנוצר ונשלח יחד כקובץ בינארי. קונטיינרים חוקיים הםsystem
,vendor
,system_ext
,product
,name.of.apex
וגםname.of.apk
.השדה
name
מכיל את שם הדגל, שיכול להכיל רק אותיות קטנות, קווים תחתונים ומספרים.namespace
מכיל את מרחב השמות של התרומות. עליכם לעבוד עם בודק Google שהוקצה לכם כדי לקבוע את מרחב השמות. אם אתם משתמשים בדגלים להשקת תכונות כדי לשמור על יציבות של המראה שלכם ב-AOSP, אתם יכולים להשתמש במרחב השמות (namespace) כרצונכם.description
מכיל תיאור קצר של התכונה או השינוי שסומנו.bug
הוא מספר הבאג שמשויך לקוד החדש שתרמתם. עליכם לעבוד עם בודק Google שהוקצה לכם כדי לקבוע את הערך שלbug
. אם אתם משתמשים בדגלים להשקת תכונות כדי לשמור על יציבות של המראה שלכם ב-AOSP, תוכלו להשתמש במספר המעקב אחרי הבאגים או ב-<none>
.
- השדה
שומרים את הקובץ ויוצאים מהכלי לעריכה.
הגדרת ה-build
אחרי שמצהירים על הדגל, צריך להגדיר את ה-build כך שיוכל ליצור את קוד הספרייה שמשמש לגישה לערך הדגל.
בקובץ ה-build
Android.bp
, מוסיפים קטעaconfig_declarations
שדומה לקטע הבא:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
איפה:
- השדה
name
מכיל את שם ההצהרה, שיכול להכיל רק אותיות קטנות, קווים תחתונים ומספרים. package
מכיל את אותו שם חבילה שצוין בהצהרה.srcs
מכיל את השם של קובץ.aconfig
שבו הוצהר הדגל.
- השדה
שומרים את הקובץ ויוצאים מהכלי לעריכה.
הצהרת דגל aconfig עבור C ו-C++
כדי להצהיר על דגל aconfig עבור C ו-C++:
בספרייה שבה נמצא הקוד החדש, יוצרים קובץ עם הסיומת
.aconfig
, למשלmy_new_aconfig_flag_declarations.aconfig
. קובץ aconfig הוא קובץ טקסט proto שתואם לסכימה רגילה.מוסיפים הצהרת דגל שדומה לזו:
package: "com.example.android.aconfig.demo.flags" container: "system" flag { name: "my_new_flag" namespace: "aconfig_demo_namespace" description: "This flag controls untested code" bug: "<none>" }
איפה:
- השדה
package
, בשילוב עם שם הדגל, מספק מפתח ייחודי. ב-Java, הגדרתpackage
ל-foo.bar
יוצרת כיתה שנוצרת באופן אוטומטי בשםfoo.bar.Flags
. ב-C++, השם של שיטות הגישה לדגלים יהיהfoo::bar::"flagname"
. דגלים באותו קובץ הצהרה שייכים לאותה חבילה, אבל כמה קובצי הצהרה יכולים לתרום דגלים לאותה חבילה. container
מגדיר אוסף של קוד שנוצר ונשלח יחד כקובץ בינארי. קונטיינרים חוקיים הםsystem
,vendor
,system_ext
,product
,name.of.apex
וגםname.of.apk
.השדה
name
מכיל את שם הדגל, שיכול להכיל רק אותיות קטנות, קווים תחתונים ומספרים.namespace
מכיל את מרחב השמות של התרומות. עליכם לעבוד עם בודק Google שהוקצה לכם כדי לקבוע את מרחב השמות. אם אתם משתמשים בדגלים להשקת תכונות כדי לשמור על יציבות של המראה שלכם ב-AOSP, אתם יכולים להשתמש במרחב השמות (namespace) כרצונכם.description
מכיל תיאור קצר של התכונה או השינוי שסומנו.bug
הוא מספר הבאג שמשויך לקוד החדש שתרמתם. עליכם לעבוד עם בודק Google שהוקצה לכם כדי לקבוע את הערך שלbug
. אם אתם משתמשים בדגלים להשקת תכונות כדי לשמור על יציבות של המראה שלכם ב-AOSP, תוכלו להשתמש במספר המעקב אחרי הבאגים או ב-<none>
.
- השדה
שומרים את הקובץ ויוצאים מהכלי לעריכה.
הגדרת ה-build
אחרי שמצהירים על הדגל, צריך להגדיר את ה-build כך שיוכל ליצור את קוד הספרייה שמשמש לגישה לערך הדגל.
בקובץ ה-build
Android.bp
, מוסיפים קטעaconfig_declarations
שדומה לקטע הבא:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
איפה:
- השדה
name
מכיל את שם ההצהרה, שיכול להכיל רק אותיות קטנות, קווים תחתונים ומספרים. package
מכיל את אותו שם חבילה שצוין בהצהרה.srcs
מכיל את השם של קובץ aconfig שבו הדגל מוצהר.
- השדה
באותו קובץ, יוצרים יעד
cc_aconfig_library
שדומה לזה:cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", }
איפה:
- השדה
name
מכיל את שם הספרייה שמכיל רק אותיות קטנות, קווים תחתונים ומספרים. - השדה
aconfig_declarations
מכיל את אותוname
שצוין בהצהרה.
יעד ה-build
cc_aconfig_library
מפעיל את ה-Codegen של C או C++, שיוצר ספרייה עם הקוד שנוצר בזמן ה-build.ספריית CC aconfig דומה ליעד של ספריית CC, אבל יש לה אפשרויות כמו
vendor_available
,product_available
,host_supported
ו-vndk
. אם יעד ה-build שמבוסס עלcc_aconfig_library
הזה דורש סוג מסוים של וריאנטים, יכול להיות שתצטרכו להוסיף את ההגדרה המתאימה גם ליעד של ספריית CC aconfig. לדוגמה, אם הערך שלvendor_available
הואtrue
ביעד ה-build של ההורה, כדאי להגדיר אתvendor_available
גם לערךtrue
ביעדcc_aconfig_library
הזה.אחרי שמוסיפים את יעד ה-build הזה, הקוד יכול לגשת לספרייה הזו. אפשר לכלול את הספרייה הזו באמצעות תחביר
static_lib
אוshared_lib
. הערה: אם רוצים להוסיף את הספרייה הזו כ-static_lib
, צריך להוסיף תלותshared_lib
ב-server_configurable_flags
. בשלב 3 מוסבר איך לכלול את ספריית הדגלים שנוצרה בקוד ב-libexample_cpp_lib
.- השדה
יוצרים יעד שמשתמש בדגלי aconfig, כמו בדוגמה הבאה
cc_library
:cc_library { name: "libexample_cpp_lib", srcs: ["src/example_cpp_lib.cc"], double_loadable: true, cflags: [ "-Wall", "-Werror", "-Wno-unused-function", "-Wno-unused-parameter", ], header_libs: [ "jni_headers", ], shared_libs: [ "server_configurable_flags", ], static_libs: [ "aconfig_demo_flags_c_lib", ], export_include_dirs: ["src/include"], }
איפה:
shared_libs
כולל יחסי תלות נוספים שנדרשים לדגלי aconfig.static_libs
הוא שם הספרייה שנוצרת על ידי ה-build בהתאם לשדהcc_aconfig_library
name
בשלב 2. עכשיו אפשר להשתמש בדגלים של aconfig בקוד, אחרי שיוצרים רשומהcc_library
עם שם הספרייה הסטטית.
הצהרת דגל aconfig ל-Rust
כדי להצהיר על דגל aconfig ב-Rust:
בספרייה שבה נמצא הקוד החדש, יוצרים קובץ עם הסיומת
.aconfig
, למשלmy_new_aconfig_flag_declarations.aconfig
. קובץ aconfig הוא קובץ טקסט proto שתואם לסכימה רגילה.מוסיפים הצהרת דגל שדומה לזו:
package: "com.example.android.aconfig.demo.flags" container: "system" flag { name: "my_new_flag" namespace: "aconfig_demo_namespace" description: "This flag controls untested code" bug: "<none>" }
איפה:
- השדה
package
, בשילוב עם שם הדגל, מספק מפתח ייחודי. ב-Java, הגדרתpackage
ל-foo.bar
יוצרת כיתה שנוצרת באופן אוטומטי בשםfoo.bar.Flags
. ב-C++, השם של שיטות הגישה לדגלים יהיהfoo::bar::"flagname"
. דגלים באותו קובץ הצהרה שייכים לאותה חבילה, אבל כמה קובצי הצהרה יכולים לתרום דגלים לאותה חבילה. container
מגדיר אוסף של קוד שנוצר ונשלח יחד כקובץ בינארי. קונטיינרים חוקיים הםsystem
,vendor
,system_ext
,product
,name.of.apex
וגםname.of.apk
.השדה
name
מכיל את שם הדגל, שיכול להכיל רק אותיות קטנות, קווים תחתונים ומספרים.namespace
מכיל את מרחב השמות של התרומות. עליכם לעבוד עם בודק Google שהוקצה לכם כדי לקבוע את מרחב השמות. אם אתם משתמשים בדגלים להשקת תכונות כדי לשמור על יציבות של המראה שלכם ב-AOSP, אתם יכולים להשתמש במרחב השמות (namespace) כרצונכם.description
מכיל תיאור קצר של התכונה או השינוי שסומנו.bug
הוא מספר הבאג שמשויך לקוד החדש שתרמתם. עליכם לעבוד עם בודק Google שהוקצה לכם כדי לקבוע את הערך שלbug
. אם אתם משתמשים בדגלים להשקת תכונות כדי לשמור על יציבות של המראה שלכם ב-AOSP, תוכלו להשתמש במספר המעקב אחרי הבאגים או ב-<none>
.
- השדה
שומרים את הקובץ ויוצאים מהכלי לעריכה.
הגדרת ה-build
אחרי שמצהירים על הדגל, צריך להגדיר את ה-build כך שיוכל ליצור את קוד הספרייה שמשמש לגישה לערך הדגל.
בקובץ ה-build
Android.bp
, מוסיפים קטעaconfig_declarations
שדומה לזה:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
איפה:
- השדה
name
מכיל את שם ההצהרה, שיכול להכיל רק אותיות קטנות, קווים תחתונים ומספרים. package
מכיל את אותו שם חבילה שצוין בהצהרה.srcs
מכיל את השם של קובץ aconfig שבו הדגל מוצהר.
- השדה
יוצרים יעד
rust_aconfig_library
בדומה לדוגמה הבאה. היעד הזה מפעיל את Rust Codegen ויוצר ספריית Rust עם הקוד שנוצר במהלך ה-build.rust_aconfig_library { name: "libaconfig_demo_flags_rust", crate_name: "aconfig_demo_flags_rust", aconfig_declarations: "aconfig_demo_flags", }
איפה:
- השדה
name
מכיל את שם ההצהרה, שיכול להכיל רק אותיות קטנות, קווים תחתונים ומספרים. crate_name
מכיל את אותו שם חבילה שצוין בהצהרה.- השדה
aconfig_declarations
מכיל את אותוname
שצוין בהצהרה.
בעקבות השינוי הזה, הקוד שלכם יכול להסתמך על ספריית Rust הזו.
- השדה
באותו קובץ, יוצרים רשומה
rust_library
שדומה לזו:rust_library { name: "libexample_lib", rustlibs: [ "libaconfig_demo_flags_rust", ] }
הדוגמה הזו מאפשרת ליעד ה-build של קוד המקור
libexample_demo_flags_rust
לכלול את ספריית הדגלים שנוצרו בקוד.שומרים את הקובץ ויוצאים מהכלי לעריכה.