ประกาศและใช้ Flag การสร้าง

แฟล็กบิลด์เป็นค่าคงที่ในเวลาบิลด์และจะเปลี่ยนแปลงไม่ได้ในระหว่างรันไทม์ โดยจะใช้แฟล็กเหล่านี้ในกรณีที่ไม่สามารถใช้แฟล็ก aconfig ได้ เช่น

  • คุณมีโค้ดที่คอมไพล์หรือบิลด์ไว้ล่วงหน้าซึ่งต้องการรวมไว้ในบิลด์โดยไม่บังคับ
  • คุณต้องการทำการเปลี่ยนแปลงระบบบิลด์เอง
  • คุณต้องการใส่แฟล็กไว้รอบๆ การขึ้นต่อกันเพื่อจัดการขนาดโค้ด
  • คุณต้องการจัดการการเปิดตัวฟีเจอร์ แต่ต้องตรวจสอบค่าของแฟล็กก่อนที่ระบบจะทำให้แฟล็ก aconfig พร้อมใช้งาน

ประกาศแฟล็กบิลด์

แฟล็กบิลด์จะประกาศในไฟล์ textproto วิธีประกาศแฟล็กบิลด์

  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 Mirror ของคุณเอง คุณสามารถใช้เนมสเปซได้ตามต้องการ
    • value คือประเภทและค่าเริ่มต้นของแฟล็ก ประเภทอาจเป็น bool_value หรือ string_value หากประเภทเป็น string_value ค่าต้องอยู่ในเครื่องหมายอัญประกาศ หากไม่ได้ระบุ ค่าจะเป็นสตริงว่าง ค่าบูลีนจะแสดงเป็น true หรือสตริงว่างสำหรับ false
    • workflow คือ 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