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

Flag การสร้างคือค่าคงที่ของเวลาสร้างและเปลี่ยนแปลงไม่ได้ระหว่างรันไทม์ แฟล็กเหล่านี้ใช้ในกรณีที่ใช้แฟล็ก aconfig ไม่ได้ เช่น

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

ประกาศ Flag การสร้าง

ประกาศ Flag การสร้างในไฟล์ textproto วิธีประกาศ Flag บิลด์

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

ใช้ Flag การสร้างในไฟล์ Soong

ในไฟล์บิลด์และโมดูลที่คุณต้องการค้นหาค่า Flag ให้ใช้เงื่อนไขเพื่อแยกสาขาตามค่า Flag ตัวอย่างเช่น ในข้อมูลโค้ดต่อไปนี้ ระบบจะค้นหาค่าของ Flag 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: [],
  }),
}

หากค่าของ Flag นี้คือ true ระบบจะลิงก์โมดูล libaconfig_storage_read_api_cc กับโมดูล cc_defaults แบบไดนามิก

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

ใช้ Flag การสร้างในไฟล์ Make

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