แฟล็กบิลด์เป็นค่าคงที่ในเวลาบิลด์และจะเปลี่ยนแปลงไม่ได้ในระหว่างรันไทม์ โดยจะใช้แฟล็กเหล่านี้ในกรณีที่ไม่สามารถใช้แฟล็ก aconfig ได้ เช่น
- คุณมีโค้ดที่คอมไพล์หรือบิลด์ไว้ล่วงหน้าซึ่งต้องการรวมไว้ในบิลด์โดยไม่บังคับ
- คุณต้องการทำการเปลี่ยนแปลงระบบบิลด์เอง
- คุณต้องการใส่แฟล็กไว้รอบๆ การขึ้นต่อกันเพื่อจัดการขนาดโค้ด
- คุณต้องการจัดการการเปิดตัวฟีเจอร์ แต่ต้องตรวจสอบค่าของแฟล็กก่อนที่ระบบจะทำให้แฟล็ก aconfig พร้อมใช้งาน
ประกาศแฟล็กบิลด์
แฟล็กบิลด์จะประกาศในไฟล์ textproto วิธีประกาศแฟล็กบิลด์
- ไปที่
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 Mirror ของคุณเอง คุณสามารถใช้เนมสเปซได้ตามต้องการvalueคือประเภทและค่าเริ่มต้นของแฟล็ก ประเภทอาจเป็นbool_valueหรือstring_valueหากประเภทเป็นstring_valueค่าต้องอยู่ในเครื่องหมายอัญประกาศ หากไม่ได้ระบุ ค่าจะเป็นสตริงว่าง ค่าบูลีนจะแสดงเป็นtrueหรือสตริงว่างสำหรับ falseworkflowคือLAUNCHหรือPREBUILTใช้LAUNCHสำหรับแฟล็กบูลีนที่เปลี่ยนจากfalseเป็นtrueซึ่งคล้ายกับแฟล็กการเปิดตัวฟีเจอร์ ใช้PREBUILTสำหรับแฟล็กที่ตั้งค่าเวอร์ชัน ซึ่งโดยปกติจะเป็นเวอร์ชันของบิลด์ล่วงหน้าcontainersคือประเภทโค้ดที่คุณเขียน เช่น "vendor" สำหรับโค้ดของผู้ให้บริการ หรือ "product" สำหรับโค้ดผลิตภัณฑ์ หากไม่แน่ใจว่าจะใช้ค่าใด ให้ใช้คอนเทนเนอร์ทั้ง 4 ประเภทตามที่แสดงในตัวอย่างก่อนหน้า
ใช้แฟล็กบิลด์ในไฟล์ Soong
ในไฟล์บิลด์และโมดูลที่คุณต้องการค้นหาค่าแฟล็ก ให้ใช้เงื่อนไขเพื่อแยกตามค่าแฟล็ก ตัวอย่างเช่น ในข้อมูลโค้ดต่อไปนี้ ระบบจะค้นหาค่าของแฟล็ก 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: [],)
ใช้แฟล็กบิลด์ในไฟล์ Make
ในไฟล์ Make แฟล็กบิลด์จะเป็นตัวแปร Make แบบอ่านอย่างเดียว ตัวอย่างไฟล์ Make ต่อไปนี้จะเข้าถึงแฟล็กบิลด์ที่ชื่อว่า 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