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:
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.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, menetapkanpackage
kefoo.bar
akan menghasilkan class yang dibuat secara otomatis bernamafoo.bar.Flags
. Pada C++, metode pengakses flag akan diberi namafoo::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 adalahsystem
,vendor
,system_ext
,product
,name.of.apex
, danname.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 menentukanbug
Anda. Jika Anda menggunakan tanda peluncuran fitur untuk mempertahankan stabilitas pencerminan AOSP sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan<none>
.
Simpan file dan keluar dari editor.
Menyiapkan build
Setelah mendeklarasikan flag, siapkan build agar dapat menghasilkan kode library yang digunakan untuk mengakses nilai flag.
Dalam file build
Android.bp
, tambahkan bagianaconfig_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.
Simpan file dan keluar dari editor.
Mendeklarasikan flag aconfig untuk C dan C++
Untuk mendeklarasikan flag aconfig untuk C dan C++:
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.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, menetapkanpackage
kefoo.bar
akan menghasilkan class yang dibuat secara otomatis bernamafoo.bar.Flags
. Pada C++, metode pengakses flag akan diberi namafoo::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 adalahsystem
,vendor
,system_ext
,product
,name.of.apex
, danname.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 menentukanbug
Anda. Jika Anda menggunakan tanda peluncuran fitur untuk mempertahankan stabilitas pencerminan AOSP sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan<none>
.
Simpan file dan keluar dari editor.
Menyiapkan build
Setelah mendeklarasikan flag, siapkan build agar dapat menghasilkan kode library yang digunakan untuk mengakses nilai flag.
Di file build
Android.bp
, tambahkan bagianaconfig_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.
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
berisiname
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
, danvndk
. Jika target build, bergantung padacc_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 memilikivendor_available
yang ditetapkan ketrue
, Anda mungkin juga ingin menetapkanvendor_available
ketrue
dalam targetcc_aconfig_library
ini.Setelah menambahkan target build ini, kode Anda dapat mengakses library ini. Anda dapat menyertakan library ini menggunakan sintaksis
static_lib
ataushared_lib
. Perhatikan bahwa jika Anda ingin menambahkan library ini sebagaistatic_lib
, tambahkan dependensishared_lib
padaserver_configurable_flags
. Langkah 3 menunjukkan cara menyertakan library tanda yang dihasilkan kode kelibexample_cpp_lib
.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 kolomcc_aconfig_library
name
di langkah 2. Dengan membuat entricc_library
dengan nama library statis, Anda kini dapat menggunakan flag aconfig dalam kode.
Mendeklarasikan flag aconfig untuk Rust
Untuk mendeklarasikan flag aconfig untuk Rust:
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.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, menetapkanpackage
kefoo.bar
akan menghasilkan class yang dibuat secara otomatis bernamafoo.bar.Flags
. Pada C++, metode pengakses flag akan diberi namafoo::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 adalahsystem
,vendor
,system_ext
,product
,name.of.apex
, danname.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 menentukanbug
Anda. Jika Anda menggunakan tanda peluncuran fitur untuk mempertahankan stabilitas pencerminan AOSP sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan<none>
.
Simpan file dan keluar dari editor.
Menyiapkan build
Setelah mendeklarasikan flag, siapkan build agar dapat menghasilkan kode library yang digunakan untuk mengakses nilai flag.
Dalam file build
Android.bp
, tambahkan bagianaconfig_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.
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
berisiname
yang sama dengan yang digunakan dalam deklarasi.
Dengan perubahan ini, kode Anda dapat bergantung pada library Rust ini.
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.Simpan file dan keluar dari editor.