คุณสามารถใช้ Flag aconfig ในโค้ด Java, C, C++ และ Rust ระบบบิลด์ AOSP เปิดตัวเครื่องมือที่เรียกว่า aconfig ซึ่งใช้ในการสร้างไลบรารีเฉพาะภาษา ที่คุณสามารถใช้เพื่อเข้าถึงค่าของแฟล็กแต่ละรายการ ก่อนที่คุณจะสร้าง ไลบรารี คุณต้องประกาศแฟล็กและเพิ่มลงในบิลด์
ประกาศแฟล็ก aconfig สำหรับ Java
วิธีประกาศแฟล็ก aconfig สำหรับ Java
ในไดเรกทอรีที่มีโค้ดใหม่ ให้สร้างไฟล์ที่มีนามสกุล
.aconfig
เช่นmy_new_aconfig_flag_declarations.aconfig
ไฟล์ aconfig คือไฟล์โปรโตคอลข้อความที่เป็นไปตามสคีมามาตรฐานเพิ่มการประกาศ Flag คล้ายกับตัวอย่างต่อไปนี้
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
จะแสดงคีย์ที่ไม่ซ้ำกันเมื่อใช้ร่วมกับชื่อ Flag ใน Java การกําหนดpackage
เป็นfoo.bar
จะทําให้คลาสที่สร้างขึ้นโดยอัตโนมัติมีชื่อว่าfoo.bar.Flags
ใน C++ เมธอดการเข้าถึง Flag จะตั้งชื่อว่าfoo::bar::"flagname"
แฟล็กในการประกาศเดียวกัน เป็นของแพ็กเกจเดียวกัน แต่สามารถใส่ไฟล์ประกาศหลายไฟล์ได้ ใส่ค่าสถานะในแพ็กเกจเดียวกันcontainer
กำหนดคอลเล็กชันโค้ดที่สร้างขึ้นและจัดส่งด้วยกัน เป็นไบนารี คอนเทนเนอร์ที่ถูกต้องคือsystem
,vendor
,system_ext
product
,name.of.apex
และname.of.apk
name
มีชื่อของ Flag ที่มีเฉพาะตัวอักษรพิมพ์เล็ก ขีดล่าง และตัวเลขเท่านั้นnamespace
มีเนมสเปซสำหรับการมีส่วนร่วม คุณต้องทำงานร่วมกับ ผู้ตรวจสอบของ Google ที่ได้รับมอบหมายให้กำหนดเนมสเปซของคุณ หากคุณกำลังใช้ แฟล็กการเปิดตัวฟีเจอร์เพื่อรักษาเสถียรภาพของกระจก AOSP ของคุณเอง คุณสามารถ ใช้เนมสเปซตามต้องการdescription
มีคำอธิบายสั้นๆ เกี่ยวกับฟีเจอร์หรือการเปลี่ยนแปลงที่มีการแจ้งว่าไม่เหมาะสมbug
คือหมายเลขข้อบกพร่องที่เชื่อมโยงกับการมีส่วนร่วมของโค้ดใหม่ คุณต้องทำงานร่วมกับผู้ตรวจสอบของ Google ที่ได้รับมอบหมายเพื่อกำหนดbug
หากคุณใช้ Flag การเปิดตัวฟีเจอร์เพื่อรักษาเสถียรภาพของมิเรอร์ AOSP ของคุณเอง ให้ใช้หมายเลขติดตามข้อบกพร่องหรือใช้<none>
บันทึกไฟล์และออกจากเครื่องมือแก้ไข
ตั้งค่าบิลด์
หลังจากที่คุณประกาศ Flag ให้ตั้งค่าบิลด์เพื่อสร้าง รหัสไลบรารีที่ใช้ในการเข้าถึงค่าของแฟล็ก
เพิ่มส่วน
aconfig_declarations
ในไฟล์บิลด์Android.bp
ที่คล้ายกับข้อความต่อไปนี้aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }
สถานที่:
name
มีชื่อประกาศที่มีเฉพาะตัวอักษรพิมพ์เล็ก ขีดล่าง และตัวเลขเท่านั้นpackage
มีชื่อแพ็กเกจเดียวกับที่ใช้ในการประกาศsrcs
มีชื่อไฟล์.aconfig
ที่ประกาศ Flag
บันทึกไฟล์และออกจากเครื่องมือแก้ไข
ประกาศ Flag aconfig สําหรับ C และ C++
หากต้องการประกาศแฟล็ก aconfig สำหรับ C และ C++ ให้ทำดังนี้
ในไดเรกทอรีที่มีโค้ดใหม่อยู่ ให้สร้างไฟล์ที่มีส่วนขยาย
.aconfig
เช่นmy_new_aconfig_flag_declarations.aconfig
ไฟล์ aconfig คือไฟล์โปรโตคอลข้อความที่เป็นไปตามสคีมามาตรฐานเพิ่มการประกาศ Flag คล้ายกับตัวอย่างต่อไปนี้
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
จะแสดงคีย์ที่ไม่ซ้ำกันเมื่อใช้ร่วมกับชื่อ Flag ใน Java การกําหนดpackage
เป็นfoo.bar
จะทําให้คลาสที่สร้างขึ้นโดยอัตโนมัติมีชื่อว่าfoo.bar.Flags
ใน C++ เมธอดการเข้าถึง Flag จะตั้งชื่อว่าfoo::bar::"flagname"
แฟล็กในการประกาศเดียวกัน เป็นของแพ็กเกจเดียวกัน แต่สามารถใส่ไฟล์ประกาศหลายไฟล์ได้ ใส่ค่าสถานะในแพ็กเกจเดียวกันcontainer
กำหนดคอลเล็กชันโค้ดที่สร้างขึ้นและจัดส่งด้วยกัน เป็นไบนารี คอนเทนเนอร์ที่ถูกต้องคือsystem
,vendor
,system_ext
product
,name.of.apex
และname.of.apk
name
มีชื่อของ Flag ที่มีเฉพาะตัวอักษรพิมพ์เล็ก ขีดล่าง และตัวเลขเท่านั้นnamespace
มีเนมสเปซสำหรับการมีส่วนร่วม คุณต้องทำงานร่วมกับ ผู้ตรวจสอบของ Google ที่ได้รับมอบหมายให้กำหนดเนมสเปซของคุณ หากคุณกำลังใช้ แฟล็กการเปิดตัวฟีเจอร์เพื่อรักษาเสถียรภาพของกระจก AOSP ของคุณเอง คุณสามารถ ใช้เนมสเปซตามต้องการdescription
มีคำอธิบายสั้นๆ เกี่ยวกับฟีเจอร์หรือการเปลี่ยนแปลงที่มีการแจ้งว่าไม่เหมาะสมbug
คือหมายเลขข้อบกพร่องที่เชื่อมโยงกับการมีส่วนร่วมของโค้ดใหม่ คุณต้องทำงานร่วมกับผู้ตรวจสอบของ Google ที่ได้รับมอบหมายเพื่อกำหนดbug
หากคุณใช้ Flag การเปิดตัวฟีเจอร์เพื่อรักษาเสถียรภาพของมิเรอร์ AOSP ของคุณเอง ให้ใช้หมายเลขติดตามข้อบกพร่องหรือใช้<none>
บันทึกไฟล์และออกจากเครื่องมือแก้ไข
ตั้งค่าบิลด์
หลังจากประกาศ Flag แล้ว ให้ตั้งค่าบิลด์เพื่อให้สร้างโค้ดไลบรารีที่ใช้เข้าถึงค่าของ Flag ได้
ในไฟล์บิลด์
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 ที่ประกาศ Flag
ในไฟล์เดียวกัน ให้สร้างเป้าหมาย
cc_aconfig_library
ที่คล้ายกับตัวอย่างต่อไปนี้cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", }
สถานที่:
name
มีชื่อคลังที่มีเฉพาะตัวอักษรพิมพ์เล็ก ขีดล่าง และตัวเลขเท่านั้นaconfig_declarations
มีname
เดียวกับที่ใช้ในการประกาศ
เป้าหมายการสร้าง
cc_aconfig_library
จะเรียกใช้ Codegen ของ C หรือ C++ ซึ่งจะสร้างไลบรารีที่มีโค้ดที่สร้างขึ้น ณ เวลาที่สร้างไลบรารี aconfig ของ CC คล้ายกับเป้าหมายไลบรารี CC แต่มีตัวเลือก เช่น
vendor_available
,product_available
,host_supported
และvndk
หากเป้าหมายการสร้างที่ขึ้นอยู่กับcc_aconfig_library
นี้ต้องใช้ตัวแปรบางประเภท คุณอาจต้องเพิ่มการตั้งค่าที่เกี่ยวข้องในเป้าหมายคลัง aconfig ของ CC ด้วย เช่น หากเป้าหมายการสร้างระดับบนสุดมีการตั้งค่าvendor_available
เป็นtrue
คุณอาจต้องตั้งค่าvendor_available
เป็นtrue
ในเป้าหมายcc_aconfig_library
นี้ด้วยหลังจากเพิ่มเป้าหมายการสร้างนี้แล้ว โค้ดของคุณจะเข้าถึงไลบรารีนี้ได้ คุณ สามารถรวมไลบรารีนี้โดยใช้
static_lib
หรือ ไวยากรณ์shared_lib
โปรดทราบว่าหากคุณต้องการเพิ่มไลบรารีนี้เป็นstatic_lib
เพิ่มการอ้างอิงshared_lib
ในserver_configurable_flags
ขั้นตอนที่ 3 จะแสดงวิธีรวมไลบรารี Flag ที่สร้างขึ้นจากโค้ดลงในlibexample_cpp_lib
สร้างเป้าหมายที่ใช้ Flag 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
มีไลบรารีเพิ่มเติมที่จําเป็นสําหรับ Flag ของ aconfigstatic_libs
คือชื่อของไลบรารีที่สร้างขึ้นโดยบิลด์ตามcc_aconfig_library
name
ในขั้นตอนที่ 2 โดยการสร้างรายการcc_library
ด้วยชื่อไลบรารีแบบคงที่ ตอนนี้คุณใช้แฟล็ก aconfig ในโค้ดได้แล้ว
ประกาศแฟล็ก aconfig สำหรับ Rust
วิธีประกาศแฟล็ก aconfig สำหรับ Rust
ในไดเรกทอรีที่มีโค้ดใหม่อยู่ ให้สร้างไฟล์ที่มีส่วนขยาย
.aconfig
เช่นmy_new_aconfig_flag_declarations.aconfig
ไฟล์ aconfig คือไฟล์โปรโตคอลข้อความที่เป็นไปตามสคีมามาตรฐานเพิ่มการประกาศ Flag คล้ายกับตัวอย่างต่อไปนี้
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
จะแสดงคีย์ที่ไม่ซ้ำกันเมื่อใช้ร่วมกับชื่อ Flag ใน Java การกําหนดpackage
เป็นfoo.bar
จะทําให้คลาสที่สร้างขึ้นโดยอัตโนมัติมีชื่อว่าfoo.bar.Flags
ใน C++ เมธอดการเข้าถึง Flag จะตั้งชื่อว่าfoo::bar::"flagname"
แฟล็กในการประกาศเดียวกัน เป็นของแพ็กเกจเดียวกัน แต่สามารถใส่ไฟล์ประกาศหลายไฟล์ได้ ใส่ค่าสถานะในแพ็กเกจเดียวกันcontainer
กำหนดคอลเล็กชันโค้ดที่สร้างขึ้นและจัดส่งด้วยกัน เป็นไบนารี คอนเทนเนอร์ที่ถูกต้องคือsystem
,vendor
,system_ext
product
,name.of.apex
และname.of.apk
name
มีชื่อของ Flag ที่มีเฉพาะตัวอักษรพิมพ์เล็ก ขีดล่าง และตัวเลขเท่านั้นnamespace
มีเนมสเปซสำหรับการมีส่วนร่วม คุณต้องทำงานร่วมกับ ผู้ตรวจสอบของ Google ที่ได้รับมอบหมายให้กำหนดเนมสเปซของคุณ หากคุณกำลังใช้ แฟล็กการเปิดตัวฟีเจอร์เพื่อรักษาเสถียรภาพของกระจก AOSP ของคุณเอง คุณสามารถ ใช้เนมสเปซตามต้องการdescription
มีคำอธิบายสั้นๆ เกี่ยวกับฟีเจอร์หรือการเปลี่ยนแปลงที่มีการแจ้งว่าไม่เหมาะสมbug
คือหมายเลขข้อบกพร่องที่เชื่อมโยงกับการมีส่วนร่วมของโค้ดใหม่ คุณต้องทำงานร่วมกับผู้ตรวจสอบของ Google ที่ได้รับมอบหมายเพื่อกำหนดbug
หากคุณใช้ Flag การเปิดตัวฟีเจอร์เพื่อรักษาเสถียรภาพของมิเรอร์ AOSP ของคุณเอง ให้ใช้หมายเลขติดตามข้อบกพร่องหรือใช้<none>
บันทึกไฟล์และออกจากเครื่องมือแก้ไข
ตั้งค่าบิลด์
หลังจากประกาศ Flag แล้ว ให้ตั้งค่าบิลด์เพื่อให้สร้างโค้ดไลบรารีที่ใช้เข้าถึงค่าของ Flag ได้
ในไฟล์บิลด์
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 ที่มีการประกาศ Flag
สร้างเป้าหมาย
rust_aconfig_library
ที่คล้ายกับตัวอย่างถัดไป เป้าหมายนี้จะเรียกใช้ Rust Codegen และสร้างไลบรารี Rust ด้วยโค้ดที่สร้างขึ้นในระหว่างเวลาสร้าง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", ] }
ตัวอย่างนี้ช่วยให้เป้าหมายการสร้างซอร์สโค้ด
libexample_demo_flags_rust
รวมคลัง Flag ที่สร้างขึ้นจากโค้ดได้บันทึกไฟล์และออกจากเครื่องมือแก้ไข