建構旗標是建構時間常數,在執行階段中無法變更。在無法使用設定標記的情況下 (例如:
- 您有預先編譯或預先建構的程式碼,並且想選擇是否在建構中加入該程式碼。
- 您想要變更建構系統本身。
- 您想要在依附元件周圍加上旗標,以便管理程式碼大小。
- 您想管理功能的啟動作業,但必須先檢查標記的值,才能讓系統提供 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
您要編寫的程式碼類型,例如供應商代碼為「vendor」,產品代碼為「product」。如果您不確定要使用的值,請使用前述範例中顯示的所有四種容器類型。
在 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 變數。下列 makefile 範例會存取名為 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
這個旗標的宣告會在 RELEASE_PACKAGE_NFC_STACK.textproto
中將 workflow
欄位設為 PREBUILT
,並將 com.android.nfcservices
字串值設為 RELEASE_PACKAGE_NFC_STACK.textproto
trunk_staging
開發設定的旗標值檔案。