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, menetapkanpackagekefoo.barakan 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.containermenentukan kumpulan kode yang dibangun dan dikirim bersama sebagai biner. Container yang valid adalahsystem,vendor,system_ext,product,name.of.apex, danname.of.apk.nameberisi nama tanda yang hanya berisi huruf kecil, garis bawah, dan angka.namespaceberisi 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.descriptionberisi deskripsi singkat tentang fitur atau perubahan yang ditandai.bugadalah nomor bug yang terkait dengan kontribusi kode baru. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukanbugAnda. 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_declarationsyang 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:
nameberisi nama deklarasi yang hanya berisi huruf kecil, garis bawah, dan angka.packageberisi nama paket yang sama dengan yang digunakan dalam deklarasi.srcsberisi nama file.aconfigtempat 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, menetapkanpackagekefoo.barakan 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.containermenentukan kumpulan kode yang dibangun dan dikirim bersama sebagai biner. Container yang valid adalahsystem,vendor,system_ext,product,name.of.apex, danname.of.apk.nameberisi nama tanda yang hanya berisi huruf kecil, garis bawah, dan angka.namespaceberisi 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.descriptionberisi deskripsi singkat tentang fitur atau perubahan yang ditandai.bugadalah nomor bug yang terkait dengan kontribusi kode baru. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukanbugAnda. 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_declarationsyang 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:
nameberisi nama deklarasi yang hanya berisi huruf kecil, garis bawah, dan angka.packageberisi nama paket yang sama dengan yang digunakan dalam deklarasi.srcsberisi nama file aconfig tempat flag dideklarasikan.
Dalam file yang sama, buat target
cc_aconfig_libraryyang mirip dengan berikut:cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", }Dalam hal ini:
nameberisi nama pustaka yang hanya berisi huruf kecil, garis bawah, dan angka.aconfig_declarationsberisinameyang sama yang digunakan dalam deklarasi.
Target build
cc_aconfig_librarymemanggil 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_libraryini memerlukan jenis varian tertentu, Anda mungkin juga perlu menambahkan setelan yang sesuai di target library aconfig CC. Misalnya, jika target build induk memilikivendor_availableyang ditetapkan ketrue, Anda mungkin juga ingin menetapkanvendor_availableketruedi targetcc_aconfig_libraryini.Setelah menambahkan target build ini, kode Anda dapat mengakses library ini. Anda dapat menyertakan library ini menggunakan sintaksis
static_libataushared_lib. Perhatikan jika Anda ingin menambahkan library ini sebagaistatic_lib, tambahkan dependensishared_libpadaserver_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_libsmencakup dependensi tambahan yang diperlukan untuk flag aconfig.static_libsadalah nama library yang dibuat oleh build per kolomcc_aconfig_librarynamedi langkah 2. Dengan membuat entricc_librarydengan 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, menetapkanpackagekefoo.barakan 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.containermenentukan kumpulan kode yang dibangun dan dikirim bersama sebagai biner. Container yang valid adalahsystem,vendor,system_ext,product,name.of.apex, danname.of.apk.nameberisi nama tanda yang hanya berisi huruf kecil, garis bawah, dan angka.namespaceberisi 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.descriptionberisi deskripsi singkat tentang fitur atau perubahan yang ditandai.bugadalah nomor bug yang terkait dengan kontribusi kode baru. Anda harus bekerja sama dengan peninjau Google yang ditugaskan untuk menentukanbugAnda. 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_declarationsyang 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:
nameberisi nama deklarasi yang hanya berisi huruf kecil, garis bawah, dan angka.packageberisi nama paket yang sama dengan yang digunakan dalam deklarasi.srcsberisi nama file aconfig tempat flag dideklarasikan.
Buat target
rust_aconfig_libraryyang 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:
nameberisi nama deklarasi yang hanya berisi huruf kecil, garis bawah, dan angka.crate_nameberisi nama paket yang sama dengan yang digunakan dalam deklarasi.aconfig_declarationsberisinameyang sama yang digunakan dalam deklarasi.
Dengan perubahan ini, kode Anda dapat bergantung pada library Rust ini.
Dalam file yang sama, buat entri
rust_libraryyang mirip dengan berikut:rust_library { name: "libexample_lib", rustlibs: [ "libaconfig_demo_flags_rust", ] }Contoh ini memungkinkan target build kode sumber Anda
libexample_demo_flags_rustuntuk menyertakan library flag yang dihasilkan kode.Simpan file dan keluar dari editor.