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