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:
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:
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
. Di 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 memberikan kontribusi flag ke paket yang sama.container
menentukan kumpulan kode yang dibangun dan dikirim bersama sebagai biner. Container yang valid adalahsystem
,vendor
,system_ext
,product
,name.of.apex
, danname.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 menentukanbug
Anda. Jika Anda menggunakan flag peluncuran fitur untuk menjaga stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan<none>
.
Simpan file dan keluar dari editor.
Menyiapkan build
Setelah mendeklarasikan tanda, siapkan build agar dapat membuat kode library yang digunakan untuk mengakses nilai tanda.
Di 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:
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
. Di 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 memberikan kontribusi flag ke paket yang sama.container
menentukan kumpulan kode yang dibangun dan dikirim bersama sebagai biner. Container yang valid adalahsystem
,vendor
,system_ext
,product
,name.of.apex
, danname.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 menentukanbug
Anda. Jika Anda menggunakan flag peluncuran fitur untuk menjaga stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan<none>
.
Simpan file dan keluar dari editor.
Menyiapkan build
Setelah mendeklarasikan tanda, siapkan build agar dapat membuat kode library yang digunakan untuk mengakses nilai tanda.
Di 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 flag dideklarasikan.
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
berisiname
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
, danvndk
. Jika target build yang bergantung padacc_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 memilikivendor_available
yang ditetapkan ketrue
, Anda mungkin juga ingin menetapkanvendor_available
ketrue
di 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 jika Anda ingin menambahkan library ini sebagaistatic_lib
, tambahkan dependensishared_lib
padaserver_configurable_flags
. Langkah 3 menunjukkan cara menyertakan library tanda yang dibuat kode ke dalamlibexample_cpp_lib
.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 kolomcc_aconfig_library
name
di langkah 2. Dengan membuat entricc_library
dengan nama library statis, Anda kini dapat menggunakan flag aconfig dalam kode.
Mendeklarasikan tanda aconfig untuk Rust
Untuk mendeklarasikan flag aconfig untuk Rust:
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:
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
. Di 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 memberikan kontribusi flag ke paket yang sama.container
menentukan kumpulan kode yang dibangun dan dikirim bersama sebagai biner. Container yang valid adalahsystem
,vendor
,system_ext
,product
,name.of.apex
, danname.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 menentukanbug
Anda. Jika Anda menggunakan flag peluncuran fitur untuk menjaga stabilitas mirror AOSP Anda sendiri, Anda dapat menggunakan nomor pelacakan bug atau menggunakan<none>
.
Simpan file dan keluar dari editor.
Menyiapkan build
Setelah mendeklarasikan tanda, siapkan build agar dapat membuat kode library yang digunakan untuk mengakses nilai tanda.
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 flag 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 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: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.Simpan file dan keluar dari editor.