Bạn có thể sử dụng cờ aconfig trong mã Java, C, C++ và Rust. Hệ thống xây dựng AOSP 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 thư mục chứa 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 đồ chuẩn.Thêm nội dung 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:
- Khi kết hợp với tên cờ,
package
sẽ cung cấp một khoá duy nhất. Trong Java, việc đặtpackage
thànhfoo.bar
sẽ dẫn đến 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 tên làfoo::bar::"flagname"
. 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. container
xá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
.name
chứa tên của cờ chỉ chứa chữ cái viết thường, dấu gạch dưới và số.namespace
chứa không gian tên cho các nội dung đóng góp. Bạn phải làm việc với người đánh giá đượ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ì độ ổn định của bản sao AOSP (Dự án nguồn mở Android) của riêng mình, thì bạn có thể sử dụng không gian tên theo ý muốn.description
chứa nội dung mô tả ngắn về tính năng hoặc thay đổi được gắn cờ.bug
là số lỗi liên quan đến nội dung đóng góp mã mới. Bạn phải làm việc với người đánh giá được chỉ định của Google để xác địnhbug
. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì độ ổn định của bản sao AOSP (Dự án nguồn mở Android) 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>
.
- Khi kết hợp với tên cờ,
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 bạn khai báo cờ, hãy thiết lập bản dựng để có thể tạo mã thư viện dùng để truy cập giá trị của cờ.
Trong tệp bản dựng
Android.bp
, hãy thêm một phầnaconfig_declarations
tươ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:
name
chứa tên của nội dung khai báo chỉ chứa chữ cái viết thường, dấu gạch dưới và số.package
chứa cùng một tên gói được dùng trong phần khai báo.srcs
chứa tên của tệp.aconfig
nơi khai báo cờ.
Lưu tệp rồi 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ờ cấu hình cho C và C++:
Trong thư mục chứa 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 đồ chuẩn.Thêm nội dung 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:
- Khi kết hợp với tên cờ,
package
sẽ cung cấp một khoá duy nhất. Trong Java, việc đặtpackage
thànhfoo.bar
sẽ dẫn đến 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 tên làfoo::bar::"flagname"
. 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. container
xá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
.name
chứa tên của cờ chỉ chứa chữ cái viết thường, dấu gạch dưới và số.namespace
chứa không gian tên cho các nội dung đóng góp. Bạn phải làm việc với người đánh giá đượ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ì độ ổn định của bản sao AOSP (Dự án nguồn mở Android) của riêng mình, thì bạn có thể sử dụng không gian tên theo ý muốn.description
chứa nội dung mô tả ngắn về tính năng hoặc thay đổi được gắn cờ.bug
là số lỗi liên quan đến nội dung đóng góp mã mới. Bạn phải làm việc với người đánh giá được chỉ định của Google để xác địnhbug
. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì độ ổn định của bản sao AOSP (Dự án nguồn mở Android) 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>
.
- Khi kết hợp với tên cờ,
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 bạn đã khai báo cờ, hãy thiết lập 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_declarations
tươ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:
name
chứa tên của nội dung khai báo chỉ chứa chữ cái viết thường, dấu gạch dưới và số.package
chứa cùng một tên gói được dùng trong phần khai báo.srcs
chứa tên của tệp aconfig nơi cờ được khai báo.
Cũng trong tệp đó, hãy tạo một mục tiêu
cc_aconfig_library
tương tự như sau:cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", }
Trong trường hợp:
name
chứa tên của thư viện chỉ chứa chữ thường, dấu gạch dưới và số.aconfig_declarations
chứa cùngname
dùng trong phần khai báo.
Mục tiêu bản dựng
cc_aconfig_library
gọi C hoặc C++ Codegen, tạo một thư viện bằng mã được tạo tại thời điểm tạo bản dựng.Thư viện CC aconfig 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_supported
vàvndk
. Nếu mục tiêu bản dựng phụ thuộc vàocc_aconfig_library
này yêu cầu một số loại biến thể nhất định, 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_available
thànhtrue
, thì bạn cũng có thể đặtvendor_available
thànhtrue
trong mục tiêucc_aconfig_library
nà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ể đưa thư viện này vào bằng cú pháp
static_lib
hoặ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_lib
trênserver_configurable_flags
. Bước 3 cho biết cách đưa thư viện cờ do mã tạo vàolibexample_cpp_lib
.Tạo một mục tiêu sử dụng cờ aconfig, chẳng hạn như
cc_library
trong ví dụ sau: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_libs
bao gồm các phần phụ thuộc bổ sung cần thiết cho cờ aconfig.static_libs
là tên của thư viện do bản dựng tạo ra theo trườngcc_aconfig_library
name
ở bước 2. Bằng cách tạo một mụccc_library
bằng tên thư viện tĩnh, giờ đây, bạn có thể sử dụng cờ aconfig trong mã của mình.
Khai báo cờ aconfig cho Rust
Cách khai báo cờ cấu hình cho Rust:
Trong thư mục chứa mã mới, hãy tạo 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 đồ chuẩn.Thêm nội dung 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:
- Khi kết hợp với tên cờ,
package
sẽ cung cấp một khoá duy nhất. Trong Java, việc đặtpackage
thànhfoo.bar
sẽ dẫn đến 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 tên làfoo::bar::"flagname"
. 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. container
xá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
.name
chứa tên của cờ chỉ chứa chữ cái viết thường, dấu gạch dưới và số.namespace
chứa không gian tên cho các nội dung đóng góp. Bạn phải làm việc với người đánh giá đượ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ì độ ổn định của bản sao AOSP (Dự án nguồn mở Android) của riêng mình, thì bạn có thể sử dụng không gian tên theo ý muốn.description
chứa nội dung mô tả ngắn về tính năng hoặc thay đổi được gắn cờ.bug
là số lỗi liên quan đến nội dung đóng góp mã mới. Bạn phải làm việc với người đánh giá được chỉ định của Google để xác địnhbug
. Nếu đang sử dụng cờ khởi chạy tính năng để duy trì độ ổn định của bản sao AOSP (Dự án nguồn mở Android) 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>
.
- Khi kết hợp với tên cờ,
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 bạn khai báo cờ, hãy thiết lập bản dựng để có thể tạo mã thư viện dùng để truy cập giá trị của cờ.
Trong tệp bản dựng
Android.bp
, hãy thêm một phầnaconfig_declarations
tươ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:
name
chứa tên của nội dung khai báo chỉ chứa chữ cái viết thường, dấu gạch dưới và số.package
chứa cùng một tên gói được dùng trong phần khai báo.srcs
chứa tên của tệp aconfig nơi khai báo cờ.
Tạo một mục tiêu
rust_aconfig_library
tươ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 bằng mã đã 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:
name
chứa tên của nội dung khai báo chỉ chứa chữ cái viết thường, dấu gạch dưới và số.crate_name
chứa chính tên gói đã dùng trong phần khai báo.aconfig_declarations
chứa cùngname
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.
Cũng trong tệp đó, hãy tạo một mục nhập
rust_library
tươ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_rust
bao gồm thư viện cờ được tạo bằng mã.Lưu tệp rồi thoát khỏi trình chỉnh sửa.