ประกาศ Flag aconfig

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

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

วิธีประกาศแฟล็ก aconfig สำหรับ Java

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

  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 จะแสดงคีย์ที่ไม่ซ้ำกันเมื่อใช้ร่วมกับชื่อ 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>

  3. บันทึกไฟล์และออกจากเครื่องมือแก้ไข

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

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

  1. เพิ่มส่วน 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
  2. บันทึกไฟล์และออกจากเครื่องมือแก้ไข

ประกาศ Flag aconfig สําหรับ C และ C++

หากต้องการประกาศแฟล็ก aconfig สำหรับ C และ C++ ให้ทำดังนี้

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

  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 จะแสดงคีย์ที่ไม่ซ้ำกันเมื่อใช้ร่วมกับชื่อ 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>

  3. บันทึกไฟล์และออกจากเครื่องมือแก้ไข

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

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

  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 ที่ประกาศ Flag
  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++ ซึ่งจะสร้างไลบรารีที่มีโค้ดที่สร้างขึ้น ณ เวลาที่สร้าง

    ไลบรารี 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

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

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

วิธีประกาศแฟล็ก aconfig สำหรับ Rust

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

  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 จะแสดงคีย์ที่ไม่ซ้ำกันเมื่อใช้ร่วมกับชื่อ 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>

  3. บันทึกไฟล์และออกจากเครื่องมือแก้ไข

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

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

  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 ที่มีการประกาศ Flag
  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 รวมคลัง Flag ที่สร้างขึ้นจากโค้ดได้

  4. บันทึกไฟล์และออกจากเครื่องมือแก้ไข