Mendeklarasikan flag aconfig

Anda dapat menggunakan flag aconfig di 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 tersebut 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 yang dibuat secara otomatis bernama foo.bar.Flags. Pada C++, metode pengakses flag akan diberi nama foo::bar::"flagname". Flag dalam file deklarasi yang sama termasuk dalam paket yang sama, tetapi beberapa file deklarasi dapat berkontribusi pada flag ke paket yang sama.
    • container menentukan kumpulan kode yang di-build 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 ditetapkan untuk menentukan namespace Anda. Jika menggunakan flag peluncuran fitur untuk mempertahankan stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan namespace sesuai keinginan.

    • 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 ditetapkan untuk menentukan bug Anda. Jika Anda menggunakan tanda peluncuran fitur untuk mempertahankan stabilitas pencerminan AOSP 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 .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 yang dibuat secara otomatis bernama foo.bar.Flags. Pada C++, metode pengakses flag akan diberi nama foo::bar::"flagname". Flag dalam file deklarasi yang sama termasuk dalam paket yang sama, tetapi beberapa file deklarasi dapat berkontribusi pada flag ke paket yang sama.
    • container menentukan kumpulan kode yang di-build 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 ditetapkan untuk menentukan namespace Anda. Jika menggunakan flag peluncuran fitur untuk mempertahankan stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan namespace sesuai keinginan.

    • 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 ditetapkan untuk menentukan bug Anda. Jika Anda menggunakan tanda peluncuran fitur untuk mempertahankan stabilitas pencerminan AOSP 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. Di file build Android.bp, tambahkan bagian aconfig_declarations yang mirip dengan berikut ini:

    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 seperti berikut:

    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, bergantung pada cc_aconfig_library ini, memerlukan jenis varian tertentu, Anda mungkin juga perlu menambahkan setelan yang sesuai dalam target library aconfig CC. Misalnya, jika target build induk memiliki vendor_available yang ditetapkan ke true, Anda mungkin juga ingin menetapkan vendor_available ke true dalam 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. Perhatikan bahwa jika Anda ingin menambahkan library ini sebagai static_lib, tambahkan dependensi shared_lib pada server_configurable_flags. Langkah 3 menunjukkan cara menyertakan library tanda yang dihasilkan kode ke libexample_cpp_lib.

  3. Buat target yang menggunakan flag aconfig, seperti contoh cc_library berikut:

    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 kini dapat menggunakan flag aconfig dalam kode.

Mendeklarasikan flag aconfig untuk Rust

Untuk mendeklarasikan flag aconfig untuk Rust:

  1. Di direktori tempat kode baru tersebut 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 yang dibuat secara otomatis bernama foo.bar.Flags. Pada C++, metode pengakses flag akan diberi nama foo::bar::"flagname". Flag dalam file deklarasi yang sama termasuk dalam paket yang sama, tetapi beberapa file deklarasi dapat berkontribusi pada flag ke paket yang sama.
    • container menentukan kumpulan kode yang di-build 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 ditetapkan untuk menentukan namespace Anda. Jika menggunakan flag peluncuran fitur untuk mempertahankan stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan namespace sesuai keinginan.

    • 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 ditetapkan untuk menentukan bug Anda. Jika Anda menggunakan tanda peluncuran fitur untuk mempertahankan stabilitas pencerminan AOSP 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 menyertakan library tanda yang dihasilkan kode.

  4. Simpan file dan keluar dari editor.