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

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

  • คุณมีโค้ดที่คอมไพล์หรือสร้างไว้ล่วงหน้าซึ่งคุณต้องการรวมไว้ในการบิลด์ (ไม่บังคับ)
  • คุณต้องการทำการเปลี่ยนแปลงเพื่อสร้างระบบบิลด์ด้วยตนเอง
  • คุณต้องการใส่เครื่องหมายรอบๆ การอ้างอิงเพื่อจัดการขนาดโค้ด
  • คุณต้องการจัดการการเปิดตัวฟีเจอร์ แต่ต้องตรวจสอบค่า ของฟีเจอร์ก่อนที่ระบบจะทำให้ฟีเจอร์ 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 หรือสตริงว่างสำหรับค่าเท็จ
    • workflow คือ LAUNCH หรือ PREBUILT ใช้ LAUNCH สำหรับบูลีน แฟล็กที่เปลี่ยนจาก false เป็น true เช่นเดียวกับฟีเจอร์ที่เปิดตัว ใช้ PREBUILT สำหรับแฟล็กที่ตั้งค่าเวอร์ชัน ซึ่งโดยปกติจะเป็นเวอร์ชันที่สร้างไว้ล่วงหน้า
    • containers ประเภทของโค้ดที่คุณเขียน เช่น "ผู้ขาย" สำหรับรหัสผู้ขาย หรือ "ผลิตภัณฑ์" สำหรับรหัสผลิตภัณฑ์ หากไม่แน่ใจว่าจะใช้ค่าใด ให้ใช้คอนเทนเนอร์ทั้ง 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

หากค่าของ Flag นี้เป็น false จะไม่มีอะไรเกิดขึ้น (default: [],)

ใช้แฟล็กบิลด์ใน Makefile

ในไฟล์ Make แฟล็กบิลด์คือตัวแปร Make แบบอ่านอย่างเดียว ตัวอย่าง Makefile ต่อไปนี้เข้าถึงแฟล็กการสร้างที่ชื่อ 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