ประกาศ Flag aconfig

คุณใช้แฟล็ก aconfig ในโค้ด Java, C, C++ และ Rust ได้ ระบบบิลด์ AOSP จะเปิดใช้เครื่องมือชื่อ aconfig ซึ่งใช้ในการสร้างไลบรารีของเมธอดที่เฉพาะเจาะจงภาษา ที่คุณใช้เพื่อเข้าถึงค่าของแต่ละฟีเจอร์แฟลกได้ ก่อนที่จะสร้างไลบรารีได้ คุณต้องประกาศ Flag และเพิ่มลงในการสร้าง

ประกาศฟีเจอร์แฟล็ก aconfig สำหรับ Java

วิธีกำหนดแฟล็ก aconfig สำหรับ Java

  1. ในไดเรกทอรีที่มีโค้ดใหม่ ให้สร้างไฟล์ที่มีนามสกุล .aconfig เช่น my_new_aconfig_flag_declarations.aconfig ไฟล์ aconfig เป็นไฟล์ข้อความ proto ที่เป็นไปตามสคีมามาตรฐาน

  2. เพิ่มการประกาศ 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>

  3. บันทึกไฟล์และออกจากโปรแกรมแก้ไข

ตั้งค่าบิวด์

หลังจากประกาศฟีเจอร์แล้ว ให้ตั้งค่าบิลด์เพื่อให้สร้าง โค้ดไลบรารีที่ใช้ในการเข้าถึงค่าของฟีเจอร์ได้

  1. ในไฟล์บิลด์ 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ไฟล์ที่ประกาศแฟล็ก
  2. บันทึกไฟล์และออกจากโปรแกรมแก้ไข

ประกาศแฟล็ก aconfig สำหรับ C และ C++

วิธีประกาศ Flag aconfig สำหรับ C และ C++

  1. ในไดเรกทอรีที่มีโค้ดใหม่ ให้สร้างไฟล์ที่มีนามสกุล .aconfig เช่น my_new_aconfig_flag_declarations.aconfig ไฟล์ aconfig เป็นไฟล์ข้อความ proto ที่เป็นไปตามสคีมามาตรฐาน

  2. เพิ่มการประกาศ 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>

  3. บันทึกไฟล์และออกจากโปรแกรมแก้ไข

ตั้งค่าบิวด์

หลังจากประกาศฟีเจอร์แล้ว ให้ตั้งค่าบิลด์เพื่อให้สร้าง โค้ดไลบรารีที่ใช้ในการเข้าถึงค่าของฟีเจอร์ได้

  1. ในไฟล์บิลด์ 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 ที่ประกาศแฟล็ก
  2. ในไฟล์เดียวกัน ให้สร้าง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

  3. สร้างเป้าหมายที่ใช้แฟล็ก 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 ของ Aconfig
    • static_libs คือชื่อของไลบรารีที่สร้างโดยบิลด์ตามฟิลด์ cc_aconfig_library name ในขั้นตอนที่ 2 การสร้างรายการ cc_library ด้วยชื่อไลบรารีแบบคงที่ช่วยให้คุณใช้แฟล็ก aconfig ในโค้ดได้แล้ว

ประกาศฟีเจอร์แฟล็ก aconfig สำหรับ Rust

วิธีกำหนดแฟล็ก aconfig สำหรับ Rust

  1. ในไดเรกทอรีที่มีโค้ดใหม่ ให้สร้างไฟล์ที่มีนามสกุล .aconfig เช่น my_new_aconfig_flag_declarations.aconfig ไฟล์ aconfig เป็นไฟล์ข้อความ proto ที่เป็นไปตามสคีมามาตรฐาน

  2. เพิ่มการประกาศ 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>

  3. บันทึกไฟล์และออกจากโปรแกรมแก้ไข

ตั้งค่าบิวด์

หลังจากประกาศฟีเจอร์แล้ว ให้ตั้งค่าบิลด์เพื่อให้สร้าง โค้ดไลบรารีที่ใช้ในการเข้าถึงค่าของฟีเจอร์ได้

  1. ใน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 ที่ประกาศแฟล็ก
  2. สร้าง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 นี้ได้

  3. ในไฟล์เดียวกัน ให้สร้างรายการ rust_library ที่คล้ายกับรายการต่อไปนี้

    rust_library {
      name: "libexample_lib",
      rustlibs: [
          "libaconfig_demo_flags_rust",
      ]
    }
    

    ตัวอย่างนี้ช่วยให้เป้าหมายการสร้างซอร์สโค้ด libexample_demo_flags_rust รวมไลบรารีแฟล็กที่สร้างโค้ดได้

  4. บันทึกไฟล์และออกจากโปรแกรมแก้ไข