建構標記是建構時間常數,無法在執行階段變更。這些旗標可用於無法使用 aconfig 旗標的情況,例如
- 您有預先編譯或預先建構的程式碼,可視需要納入建構作業。
- 您想要變更建構系統本身。
- 您想在依附元件周圍加上標記,以便管理程式碼大小。
- 您想管理功能的啟動作業,但必須先檢查標記的值,才能讓系統提供 aconfig 標記。
宣告建構旗標
建構標記會在 textproto 檔案中宣告。如要宣告建構標記,請按照下列步驟操作:
- 導航到
WORKING_DIRECTORY/build/release/flag_declarations/
- 建立名為
RELEASE_MY_FLAG_NAME.textproto
的檔案。 編輯檔案並新增類似以下的項目:
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"
地點:
name
包含標記名稱,前面會加上RELEASE_
。只能使用大寫英文字母和底線。namespace
包含貢獻內容的命名空間。您必須與指派的 Google 審查員合作,才能決定命名空間。如果您使用功能啟動旗標來維持您自己的 AOSP 鏡像的穩定性,可以隨意使用命名空間。value
是標記的初始類型和值。類型可以是bool_value
或string_value
。如果類型為string_value
,則值必須用引號括住。如未指定,則值為空白字串。布林值會以true
或空字串表示為 false。workflow
可以是LAUNCH
或PREBUILT
。將LAUNCH
用於從false
進展至true
的布林值旗標,類似於功能啟動旗標。將PREBUILT
用於設定版本的標記,通常是預先建構的版本。containers
您要編寫的程式碼類型,例如供應商代碼的「供應商」或產品代碼的「產品」。如果您不確定要使用的值,請使用前述範例中顯示的所有四種容器類型。
在 Soong 檔案中使用建構旗標
在您要查詢標記值的建構檔案和模組中,使用條件來分支標記值。舉例來說,在以下程式碼片段中,系統會查詢 RELEASE__READ_FROM_NEW_STORAGE
標記的值:
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: [],
}),
}
如果此標記的值為 true
,libaconfig_storage_read_api_cc
模組會動態連結至 cc_defaults
模組。
如果此標記的值為 false
,則不會發生任何情況 (default: [],
)。
在 makefile 中使用建構旗標
在 Make 檔案中,建構標記是唯讀的 Make 變數。以下是存取名為 RELEASED_PACKAGE_NFC_STCK
的建構標記的範例 makefile:
# 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
這個旗標的宣告會在 RELEASE_PACKAGE_NFC_STACK.textproto
中將 workflow
欄位設為 PREBUILT
,並將 com.android.nfcservices
字串值設為 RELEASE_PACKAGE_NFC_STACK.textproto
trunk_staging
開發設定的旗標值檔案。