Bạn có thể sử dụng các cờ aconfig trong mã Java, C, C++ và Rust. Hệ thống xây dựng AOSP khởi chạy một công cụ có tên là aconfig dùng để tạo thư viện phương thức dành riêng cho ngôn ngữ mà bạn có thể dùng để truy cập vào giá trị của từng cờ. Trước khi có thể tạo thư viện, bạn phải khai báo cờ và thêm cờ vào bản dựng.
Khai báo cờ aconfig cho Java
Cách khai báo cờ aconfig cho Java:
Trong một thư mục có mã mới, hãy tạo một tệp có đuôi
.aconfig, ví dụ:my_new_aconfig_flag_declarations.aconfig. Tệp aconfig là tệp proto văn bản tuân theo giản đồ tiêu chuẩn.Thêm một phần khai báo cờ tương tự như sau:
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>" }Trong trường hợp:
packagekhi kết hợp với tên cờ sẽ cung cấp một khoá duy nhất. Trong Java, việc đặtpackagethànhfoo.barsẽ tạo ra một lớp được tạo tự động có tên làfoo.bar.Flags. Trong C++, các phương thức truy cập cờ sẽ có tên làfoo::bar::"flagname". Các cờ trong cùng một tệp khai báo thuộc cùng một gói, nhưng nhiều tệp khai báo có thể đóng góp cờ cho cùng một gói.containerxác định một tập hợp mã được tạo và vận chuyển cùng nhau dưới dạng tệp nhị phân. Các vùng chứa hợp lệ làsystem,vendor,system_ext,product,name.of.apex, vàname.of.apk.namechứa tên của cờ chỉ chứa các chữ cái viết thường, dấu gạch dưới và số.namespacechứa không gian tên cho các đóng góp. Bạn phải làm việc với người xem xét được chỉ định của Google để xác định không gian tên của mình. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì tính ổn định của bản sao AOSP của riêng mình, bạn có thể sử dụng không gian tên theo ý muốn.descriptionchứa nội dung mô tả ngắn gọn về tính năng hoặc thay đổi được gắn cờ.buglà số lỗi liên kết với đóng góp mã mới. Bạn phải làm việc với người xem xét được chỉ định của Google để xác địnhbugcủa mình. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì tính ổn định của bản sao AOSP của riêng mình, bạn có thể sử dụng số theo dõi lỗi hoặc sử dụng<none>.
Lưu tệp và thoát khỏi trình chỉnh sửa.
Thiết lập bản dựng
Sau khi khai báo cờ, hãy thiết lập bản dựng để bản dựng có thể tạo mã thư viện dùng để truy cập vào giá trị của cờ.
Trong tệp bản dựng
Android.bp, hãy thêm một phầnaconfig_declarationstương tự như sau:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }Trong trường hợp:
namechứa tên của phần khai báo chỉ chứa các chữ cái viết thường, dấu gạch dưới và số.packagechứa cùng tên gói được dùng trong phần khai báo.srcschứa tên của tệp.aconfignơi cờ được khai báo.
Lưu tệp và thoát khỏi trình chỉnh sửa.
Khai báo cờ aconfig cho C và C++
Cách khai báo cờ aconfig cho C và C++:
Trong một thư mục có mã mới, hãy tạo một tệp có đuôi
.aconfig, ví dụ:my_new_aconfig_flag_declarations.aconfig. Tệp aconfig là tệp proto văn bản tuân theo giản đồ tiêu chuẩn.Thêm một phần khai báo cờ tương tự như sau:
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>" }Trong trường hợp:
packagekhi kết hợp với tên cờ sẽ cung cấp một khoá duy nhất. Trong Java, việc đặtpackagethànhfoo.barsẽ tạo ra một lớp được tạo tự động có tên làfoo.bar.Flags. Trong C++, các phương thức truy cập cờ sẽ có tên làfoo::bar::"flagname". Các cờ trong cùng một tệp khai báo thuộc cùng một gói, nhưng nhiều tệp khai báo có thể đóng góp cờ cho cùng một gói.containerxác định một tập hợp mã được tạo và vận chuyển cùng nhau dưới dạng tệp nhị phân. Các vùng chứa hợp lệ làsystem,vendor,system_ext,product,name.of.apex, vàname.of.apk.namechứa tên của cờ chỉ chứa các chữ cái viết thường, dấu gạch dưới và số.namespacechứa không gian tên cho các đóng góp. Bạn phải làm việc với người xem xét được chỉ định của Google để xác định không gian tên của mình. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì tính ổn định của bản sao AOSP của riêng mình, bạn có thể sử dụng không gian tên theo ý muốn.descriptionchứa nội dung mô tả ngắn gọn về tính năng hoặc thay đổi được gắn cờ.buglà số lỗi liên kết với đóng góp mã mới. Bạn phải làm việc với người xem xét được chỉ định của Google để xác địnhbugcủa mình. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì tính ổn định của bản sao AOSP của riêng mình, bạn có thể sử dụng số theo dõi lỗi hoặc sử dụng<none>.
Lưu tệp và thoát khỏi trình chỉnh sửa.
Thiết lập bản dựng
Sau khi khai báo cờ, hãy thiết lập bản dựng để bản dựng có thể tạo mã thư viện dùng để truy cập vào giá trị của cờ.
Trong tệp bản dựng
Android.bp, hãy thêm một phầnaconfig_declarationstương tự như sau:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }Trong trường hợp:
namechứa tên của phần khai báo chỉ chứa các chữ cái viết thường, dấu gạch dưới và số.packagechứa cùng tên gói được dùng trong phần khai báo.srcschứa tên của tệp aconfig nơi cờ được khai báo.
Trong cùng một tệp, hãy tạo mục tiêu
cc_aconfig_librarytương tự như sau:cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", }Trong trường hợp:
namechứa tên của thư viện chỉ chứa các chữ cái viết thường, dấu gạch dưới và số.aconfig_declarationschứa cùngnameđược dùng trong phần khai báo.
Mục tiêu bản dựng
cc_aconfig_librarygọi C hoặc C++ Codegen, tạo một thư viện có mã được tạo tại thời gian xây dựng.Thư viện aconfig CC tương tự như mục tiêu thư viện CC, nhưng có các tuỳ chọn như
vendor_available,product_available,host_supportedvàvndk. Nếu mục tiêu bản dựng phụ thuộc vàocc_aconfig_librarynày yêu cầu một số loại biến thể, bạn cũng có thể cần thêm chế độ cài đặt tương ứng trong mục tiêu thư viện aconfig CC. Ví dụ: nếu mục tiêu bản dựng mẹ đặtvendor_availablethànhtrue, bạn cũng có thể muốn đặtvendor_availablethànhtruetrong mục tiêucc_aconfig_librarynày.Sau khi thêm mục tiêu bản dựng này, mã của bạn có thể truy cập vào thư viện này. Bạn có thể thêm thư viện này bằng cú pháp
static_libhoặcshared_lib. Lưu ý: nếu bạn muốn thêm thư viện này dưới dạngstatic_lib, hãy thêm phần phụ thuộcshared_libvàoserver_configurable_flags. Bước 3 cho biết cách thêm thư viện cờ được tạo mã vàolibexample_cpp_lib.Tạo một mục tiêu sử dụng các cờ aconfig, chẳng hạn như ví dụ
cc_librarysau: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"], }Trong trường hợp:
shared_libsbao gồm các phần phụ thuộc bổ sung cần thiết cho cờ aconfig.static_libslà tên của thư viện được tạo bởi bản dựng theo trườngcc_aconfig_librarynameở bước 2. Bằng cách tạo một mụccc_librarycó tên thư viện tĩnh, giờ đây bạn có thể sử dụng các cờ aconfig trong mã của mình.
Khai báo cờ aconfig cho Rust
Cách khai báo cờ aconfig cho Rust:
Trong một thư mục có mã mới, hãy tạo một tệp có đuôi
.aconfig, ví dụ:my_new_aconfig_flag_declarations.aconfig. Tệp aconfig là tệp proto văn bản tuân theo giản đồ tiêu chuẩn.Thêm một phần khai báo cờ tương tự như sau:
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>" }Trong trường hợp:
packagekhi kết hợp với tên cờ sẽ cung cấp một khoá duy nhất. Trong Java, việc đặtpackagethànhfoo.barsẽ tạo ra một lớp được tạo tự động có tên làfoo.bar.Flags. Trong C++, các phương thức truy cập cờ sẽ có tên làfoo::bar::"flagname". Các cờ trong cùng một tệp khai báo thuộc cùng một gói, nhưng nhiều tệp khai báo có thể đóng góp cờ cho cùng một gói.containerxác định một tập hợp mã được tạo và vận chuyển cùng nhau dưới dạng tệp nhị phân. Các vùng chứa hợp lệ làsystem,vendor,system_ext,product,name.of.apex, vàname.of.apk.namechứa tên của cờ chỉ chứa các chữ cái viết thường, dấu gạch dưới và số.namespacechứa không gian tên cho các đóng góp. Bạn phải làm việc với người xem xét được chỉ định của Google để xác định không gian tên của mình. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì tính ổn định của bản sao AOSP của riêng mình, bạn có thể sử dụng không gian tên theo ý muốn.descriptionchứa nội dung mô tả ngắn gọn về tính năng hoặc thay đổi được gắn cờ.buglà số lỗi liên kết với đóng góp mã mới. Bạn phải làm việc với người xem xét được chỉ định của Google để xác địnhbugcủa mình. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì tính ổn định của bản sao AOSP của riêng mình, bạn có thể sử dụng số theo dõi lỗi hoặc sử dụng<none>.
Lưu tệp và thoát khỏi trình chỉnh sửa.
Thiết lập bản dựng
Sau khi khai báo cờ, hãy thiết lập bản dựng để bản dựng có thể tạo mã thư viện dùng để truy cập vào giá trị của cờ.
Trong tệp bản dựng
Android.bp, hãy thêm một phầnaconfig_declarationstương tự như sau:aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", srcs: [ "my_new_aconfig_flag_declarations.aconfig" ], }Trong trường hợp:
namechứa tên của phần khai báo chỉ chứa các chữ cái viết thường, dấu gạch dưới và số.packagechứa cùng tên gói được dùng trong phần khai báo.srcschứa tên của tệp aconfig nơi cờ được khai báo.
Tạo mục tiêu
rust_aconfig_librarytương tự như ví dụ tiếp theo. Mục tiêu này gọi Rust Codegen và tạo một thư viện Rust có mã được tạo trong thời gian xây dựng.rust_aconfig_library { name: "libaconfig_demo_flags_rust", crate_name: "aconfig_demo_flags_rust", aconfig_declarations: "aconfig_demo_flags", }Trong trường hợp:
namechứa tên của phần khai báo chỉ chứa các chữ cái viết thường, dấu gạch dưới và số.crate_namechứa cùng tên gói được dùng trong phần khai báo.aconfig_declarationschứa cùngnameđược dùng trong phần khai báo.
Với thay đổi này, mã của bạn có thể phụ thuộc vào thư viện Rust này.
Trong cùng một tệp, hãy tạo một mục
rust_librarytương tự như sau:rust_library { name: "libexample_lib", rustlibs: [ "libaconfig_demo_flags_rust", ] }Mẫu này cho phép các mục tiêu bản dựng mã nguồn
libexample_demo_flags_rustbao gồm thư viện cờ được tạo mã.Lưu tệp và thoát khỏi trình chỉnh sửa.