Cờ bản dựng là hằng số tại thời điểm tạo bản dựng và không thể thay đổi trong thời gian chạy. Những cờ này được dùng trong những trường hợp không thể sử dụng cờ cấu hình, chẳng hạn như
- Bạn có một đoạn mã được biên dịch trước hoặc tạo sẵn mà bạn muốn đưa vào bản dựng (không bắt buộc).
- Bạn muốn thay đổi hệ thống xây dựng.
- Bạn muốn đặt cờ xung quanh các phần phụ thuộc để quản lý kích thước mã.
- Bạn muốn quản lý việc khởi chạy một tính năng, nhưng bạn cần kiểm tra giá trị của cờ trước khi hệ thống cung cấp cờ aconfig.
Khai báo cờ bản dựng
Cờ bản dựng được khai báo trong các tệp textproto. Cách khai báo cờ bản dựng:
- Điều hướng đến
WORKING_DIRECTORY/build/release/flag_declarations/
- Tạo một tệp có tên là
RELEASE_MY_FLAG_NAME.textproto
. Chỉnh sửa tệp và thêm mục nhập tương tự như sau:
name: "RELEASE_MY_FLAG_NAME" namespace: "android_UNKNOWN" description: "Control if we should read from new storage." workflow: LAUNCH containers: "product" containers: "system" containers: "system_ext" containers: "vendor"
Trong trường hợp:
name
chứa tên của cờ, đứng trước làRELEASE_
. Chỉ được dùng chữ cái viết hoa và dấu gạch dưới.namespace
chứa không gian tên cho các khoản đó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ờ phát hành tính năng để duy trì sự ổ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.value
là kiểu và giá trị ban đầu cho cờ. Loại này có thể làbool_value
hoặcstring_value
. Nếu loại làstring_value
thì giá trị phải nằm trong dấu ngoặc kép. Nếu không được chỉ định, giá trị sẽ là chuỗi trống. Giá trị boolean được biểu thị dưới dạngtrue
hoặc chuỗi trống cho giá trị false.workflow
làLAUNCH
hoặcPREBUILT
. Sử dụngLAUNCH
cho cờ boolean chuyển từfalse
đếntrue
, tương tự như cờ khởi chạy tính năng. Sử dụngPREBUILT
cho các cờ thiết lập phiên bản, thường là phiên bản tạo sẵn.containers
loại mã bạn đang viết, chẳng hạn như "vendor" (nhà cung cấp) cho mã nhà cung cấp hoặc "product" (sản phẩm) cho mã sản phẩm. Nếu bạn không chắc chắn về giá trị cần sử dụng, hãy sử dụng cả 4 loại vùng chứa như trong mẫu trước.
Sử dụng cờ bản dựng trong tệp Soong
Trong tệp bản dựng và mô-đun mà bạn muốn truy vấn giá trị cờ, hãy sử dụng một điều kiện để phân nhánh theo giá trị cờ. Ví dụ: trong đoạn mã sau, giá trị của cờ RELEASE__READ_FROM_NEW_STORAGE
được truy vấn:
cc_defaults {
name: "aconfig_lib_cc_shared_link.defaults",
shared_libs: select(release_flag("RELEASE_READ_FROM_NEW_STORAGE"), {
true: ["libaconfig_storage_read_api_cc],
default: [],
}),
}
Nếu giá trị của cờ này là true
, thì mô-đun libaconfig_storage_read_api_cc
sẽ được liên kết động vào mô-đun cc_defaults
.
Nếu giá trị của cờ này là false
thì sẽ không có gì (default: [],
).
Sử dụng cờ bản dựng trong tệp makefile
Trong tệp make, cờ bản dựng là biến make chỉ có thể đọc. Mẫu makefile sau đây truy cập vào một cờ bản dựng có tên là RELEASED_PACKAGE_NFC_STCK
:
# NFC and Secure Element packages
PRODUCT_PACKAGES += \
$(RELEASE_PACKAGE_NFC_STACK) \
Tag \
SecureElement \
android.hardware.nfc-service.st \
android.hardware.secure_element@1.0-service.st \
NfcOverlayCoral
Nội dung khai báo của cờ này có trường workflow
được đặt thành PREBUILT
trong RELEASE_PACKAGE_NFC_STACK.textproto
và giá trị chuỗi của com.android.nfcservices
RELEASE_PACKAGE_NFC_STACK.textproto
trong tệp giá trị cờ cho cấu hình phát triển trunk_staging
.