Mendeklarasikan flag aconfig

Anda dapat menggunakan flag aconfig dalam kode Java, C, C++, dan Rust. Sistem build AOSP meluncurkan alat bernama aconfig yang digunakan untuk membuat library khusus bahasa dari metode yang dapat Anda gunakan untuk mengakses nilai setiap tanda. Sebelum dapat membuat pustaka, 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:

    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. Di 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 memberikan kontribusi flag ke paket yang sama.
    • container menentukan kumpulan kode yang dibangun dan dikirim bersama sebagai biner. Container yang valid adalah system, vendor, system_ext, product, name.of.apex, dan name.of.apk.

    • name berisi nama tanda 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 menjaga stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan namespace sesuka 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 menjaga stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan <none>.

  3. Simpan file dan keluar dari editor.

Menyiapkan build

Setelah mendeklarasikan tanda, siapkan build agar dapat membuat kode library yang digunakan untuk mengakses nilai tanda.

  1. Di 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:

    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. Di 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 memberikan kontribusi flag ke paket yang sama.
    • container menentukan kumpulan kode yang dibangun dan dikirim bersama sebagai biner. Container yang valid adalah system, vendor, system_ext, product, name.of.apex, dan name.of.apk.

    • name berisi nama tanda 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 menjaga stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan namespace sesuka 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 menjaga stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan <none>.

  3. Simpan file dan keluar dari editor.

Menyiapkan build

Setelah mendeklarasikan tanda, siapkan build agar dapat membuat kode library yang digunakan untuk mengakses nilai tanda.

  1. Di 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 flag dideklarasikan.
  2. Dalam file yang sama, buat target cc_aconfig_library yang mirip dengan berikut:

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

    Dalam hal ini:

    • name berisi nama pustaka yang hanya berisi huruf kecil, garis bawah, dan angka.
    • aconfig_declarations berisi name yang sama 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 memiliki vendor_available yang ditetapkan 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. Perhatikan 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 dibuat 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 mencakup dependensi tambahan yang diperlukan untuk flag aconfig.
    • static_libs adalah nama library yang dibuat oleh build per 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 tanda aconfig untuk Rust

Untuk mendeklarasikan flag aconfig untuk Rust:

  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:

    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. Di 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 memberikan kontribusi flag ke paket yang sama.
    • container menentukan kumpulan kode yang dibangun dan dikirim bersama sebagai biner. Container yang valid adalah system, vendor, system_ext, product, name.of.apex, dan name.of.apk.

    • name berisi nama tanda 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 menjaga stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan namespace sesuka 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 menjaga stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan <none>.

  3. Simpan file dan keluar dari editor.

Menyiapkan build

Setelah mendeklarasikan tanda, siapkan build agar dapat membuat kode library yang digunakan untuk mengakses nilai tanda.

  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 flag 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 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:

    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 flag yang dihasilkan kode.

  4. Simpan file dan keluar dari editor.