Mendeklarasikan flag aconfig

Anda dapat menggunakan flag aconfig dalam kode Java, C, C++, dan Rust. Sistem build AOSP meluncurkan alat yang disebut aconfig yang digunakan untuk membuat library metode khusus bahasa yang dapat Anda gunakan untuk mengakses nilai setiap flag. Sebelum dapat membuat library, Anda harus mendeklarasikan flag dan menambahkannya ke build.

Mendeklarasikan flag aconfig untuk Java

Untuk mendeklarasikan flag aconfig untuk Java:

  1. Di direktori tempat kode baru berada, buat file dengan ekstensi .aconfig, misalnya, my_new_aconfig_flag_declarations.aconfig. File aconfig adalah file proto teks yang mengikuti skema standar.

  2. Tambahkan deklarasi tanda yang mirip dengan berikut ini:

    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>"
    }
    

    Dalam hal ini:

    • package, jika digabungkan dengan nama flag, akan memberikan kunci unik. Di Java, menetapkan package ke foo.bar akan menghasilkan class otomatis bernama foo.bar.Flags. Di C++, metode pengakses tanda akan diberi nama foo::bar::"flagname". Tanda dalam deklarasi yang sama file berada di paket yang sama, tetapi beberapa file deklarasi dapat berkontribusi pada paket yang sama.
    • container menentukan kumpulan kode yang dibuat dan dikirim bersama sebagai biner. Penampung yang valid adalah system, vendor, system_ext, product, name.of.apex, dan name.of.apk.

    • name berisi nama flag yang hanya berisi huruf kecil, garis bawah, dan angka.

    • namespace berisi namespace untuk kontribusi. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukan namespace Anda. Jika Anda menggunakan flag peluncuran fitur untuk mempertahankan stabilitas duplikat AOSP Anda sendiri, Anda dapat gunakan namespace sesuai keinginan Anda.

    • description berisi deskripsi singkat tentang fitur atau perubahan yang ditandai.

    • bug adalah nomor bug yang terkait dengan kontribusi kode baru. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukan bug Anda. Jika Anda menggunakan flag peluncuran fitur untuk mempertahankan stabilitas duplikat AOSP Anda sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan <none>.

  3. Simpan file dan keluar dari editor.

Menyiapkan build

Setelah mendeklarasikan flag, siapkan build agar dapat menghasilkan kode library yang digunakan untuk mengakses nilai flag.

  1. Dalam file build Android.bp, tambahkan bagian aconfig_declarations yang mirip dengan berikut:

    aconfig_declarations {
      name: "aconfig_demo_flags",
      package: "com.example.android.aconfig.demo.flags",
      srcs: [
        "my_new_aconfig_flag_declarations.aconfig"
      ],
    }
    

    Dalam hal ini:

    • name berisi nama deklarasi yang hanya berisi huruf kecil, garis bawah, dan angka.
    • package berisi nama paket yang sama dengan yang digunakan dalam deklarasi.
    • srcs berisi nama file .aconfig tempat tanda dideklarasikan.
  2. Simpan file dan keluar dari editor.

Mendeklarasikan flag aconfig untuk C dan C++

Untuk mendeklarasikan flag aconfig untuk C dan C++:

  1. Di direktori tempat kode baru berada, buat file dengan ekstensi tersebut .aconfig, misalnya, my_new_aconfig_flag_declarations.aconfig. File aconfig adalah file proto teks yang mengikuti skema standar.

  2. Tambahkan deklarasi tanda yang mirip dengan berikut ini:

    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>"
    }
    

    Dalam hal ini:

    • package, jika digabungkan dengan nama flag, akan memberikan kunci unik. Di Java, menetapkan package ke foo.bar akan menghasilkan class otomatis bernama foo.bar.Flags. Di C++, metode pengakses tanda akan diberi nama foo::bar::"flagname". Tanda dalam deklarasi yang sama file berada di paket yang sama, tetapi beberapa file deklarasi dapat berkontribusi pada paket yang sama.
    • container menentukan kumpulan kode yang dibuat dan dikirim bersama sebagai biner. Penampung yang valid adalah system, vendor, system_ext, product, name.of.apex, dan name.of.apk.

    • name berisi nama flag yang hanya berisi huruf kecil, garis bawah, dan angka.

    • namespace berisi namespace untuk kontribusi. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukan namespace Anda. Jika Anda menggunakan flag peluncuran fitur untuk mempertahankan stabilitas duplikat AOSP Anda sendiri, Anda dapat gunakan namespace sesuai keinginan Anda.

    • description berisi deskripsi singkat tentang fitur atau perubahan yang ditandai.

    • bug adalah nomor bug yang terkait dengan kontribusi kode baru. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukan bug Anda. Jika Anda menggunakan flag peluncuran fitur untuk mempertahankan stabilitas duplikat AOSP Anda sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan <none>.

  3. Simpan file dan keluar dari editor.

Menyiapkan build

Setelah Anda mendeklarasikan flag, siapkan build sehingga dapat menghasilkan kode library yang digunakan untuk mengakses nilai flag.

  1. Dalam file build Android.bp, tambahkan bagian aconfig_declarations yang mirip dengan berikut:

    aconfig_declarations {
      name: "aconfig_demo_flags",
      package: "com.example.android.aconfig.demo.flags",
      srcs: [
        "my_new_aconfig_flag_declarations.aconfig"
      ],
    }
    

    Dalam hal ini:

    • name berisi nama deklarasi yang hanya berisi huruf kecil, garis bawah, dan angka.
    • package berisi nama paket yang sama dengan yang digunakan dalam deklarasi.
    • srcs berisi nama file aconfig tempat tanda dideklarasikan.
  2. Dalam file yang sama, buat target cc_aconfig_library yang mirip dengan berikut ini:

    cc_aconfig_library {
        name: "aconfig_demo_flags_c_lib",
        aconfig_declarations: "aconfig_demo_flags",
    }
    

    Dalam hal ini:

    • name berisi nama library yang hanya berisi huruf kecil, garis bawah, dan angka.
    • aconfig_declarations berisi name yang sama dengan yang digunakan dalam deklarasi.

    Target build cc_aconfig_library memanggil Codegen C atau C++, yang membuat library dengan kode yang dihasilkan pada waktu build.

    Library aconfig CC mirip dengan target library CC, tetapi memiliki opsi seperti vendor_available, product_available, host_supported, dan vndk. Jika target build yang bergantung pada cc_aconfig_library ini memerlukan jenis varian tertentu, Anda mungkin juga perlu menambahkan setelan yang sesuai di target library aconfig CC. Misalnya, jika target build induk telah menetapkan vendor_available ke true, Anda mungkin juga ingin menetapkan vendor_available ke true di target cc_aconfig_library ini.

    Setelah menambahkan target build ini, kode Anda dapat mengakses library ini. Anda dapat menyertakan library ini menggunakan sintaksis static_lib atau shared_lib. Catatan jika Anda ingin menambahkan library ini sebagai static_lib, tambahkan dependensi shared_lib pada server_configurable_flags. Langkah 3 menunjukkan cara menyertakan library flag yang dihasilkan kode ke dalam libexample_cpp_lib.

  3. Buat target yang menggunakan flag aconfig, seperti contoh berikut 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"],
    }
    

    Dalam hal ini:

    • shared_libs menyertakan dependensi tambahan yang diperlukan untuk flag aconfig.
    • static_libs adalah nama library yang dibuat oleh build sesuai dengan Kolom cc_aconfig_library name di langkah 2. Dengan membuat entri cc_library dengan nama library statis, Anda sekarang dapat menggunakan flag aconfig dalam kode Anda.

Mendeklarasikan flag aconfig untuk Rust

Untuk mendeklarasikan flag aconfig untuk Rust:

  1. Di direktori tempat kode baru berada, buat file dengan ekstensi tersebut .aconfig, misalnya, my_new_aconfig_flag_declarations.aconfig. File aconfig adalah file proto teks yang mengikuti skema standar.

  2. Tambahkan deklarasi tanda yang mirip dengan berikut ini:

    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>"
    }
    

    Dalam hal ini:

    • package, jika digabungkan dengan nama flag, akan memberikan kunci unik. Di Java, menetapkan package ke foo.bar akan menghasilkan class otomatis bernama foo.bar.Flags. Di C++, metode pengakses tanda akan diberi nama foo::bar::"flagname". Tanda dalam deklarasi yang sama file berada di paket yang sama, tetapi beberapa file deklarasi dapat berkontribusi pada paket yang sama.
    • container menentukan kumpulan kode yang dibuat dan dikirim bersama sebagai biner. Penampung yang valid adalah system, vendor, system_ext, product, name.of.apex, dan name.of.apk.

    • name berisi nama flag yang hanya berisi huruf kecil, garis bawah, dan angka.

    • namespace berisi namespace untuk kontribusi. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukan namespace Anda. Jika Anda menggunakan flag peluncuran fitur untuk mempertahankan stabilitas duplikat AOSP Anda sendiri, Anda dapat gunakan namespace sesuai keinginan Anda.

    • description berisi deskripsi singkat tentang fitur atau perubahan yang ditandai.

    • bug adalah nomor bug yang terkait dengan kontribusi kode baru. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukan bug Anda. Jika Anda menggunakan flag peluncuran fitur untuk mempertahankan stabilitas duplikat AOSP Anda sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan <none>.

  3. Simpan file dan keluar dari editor.

Menyiapkan build

Setelah mendeklarasikan flag, siapkan build agar dapat menghasilkan kode library yang digunakan untuk mengakses nilai flag.

  1. Dalam file build Android.bp, tambahkan bagian aconfig_declarations yang mirip dengan berikut:

    aconfig_declarations {
      name: "aconfig_demo_flags",
      package: "com.example.android.aconfig.demo.flags",
      srcs: [
        "my_new_aconfig_flag_declarations.aconfig"
      ],
    }
    

    Dalam hal ini:

    • name berisi nama deklarasi yang hanya berisi huruf kecil, garis bawah, dan angka.
    • package berisi nama paket yang sama dengan yang digunakan dalam deklarasi.
    • srcs berisi nama file aconfig tempat tanda dideklarasikan.
  2. Buat target rust_aconfig_library yang mirip dengan contoh berikutnya. Target ini memanggil Rust Codegen dan membuat library Rust dengan kode yang dihasilkan selama waktu build.

    rust_aconfig_library {
      name: "libaconfig_demo_flags_rust",
      crate_name: "aconfig_demo_flags_rust",
      aconfig_declarations: "aconfig_demo_flags",
    }
    

    Dalam hal ini:

    • name berisi nama deklarasi yang hanya berisi huruf kecil, garis bawah, dan angka.
    • crate_name berisi nama paket yang sama dengan yang digunakan dalam deklarasi.
    • aconfig_declarations berisi name yang sama dengan yang digunakan dalam deklarasi.

    Dengan perubahan ini, kode Anda dapat bergantung pada library Rust ini.

  3. Dalam file yang sama, buat entri rust_library yang mirip dengan berikut ini:

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

    Contoh ini memungkinkan target build kode sumber Anda libexample_demo_flags_rust untuk menyertakan library tanda yang dihasilkan oleh kode.

  4. Simpan file dan keluar dari editor.