宣告及使用建構旗標

建構旗標是建構時間常數,在執行階段中無法變更。在無法使用設定標記的情況下 (例如:

  • 您有預先編譯或預先建構的程式碼,並且想選擇是否在建構中加入該程式碼。
  • 您想要變更建構系統本身。
  • 您想要在依附元件周圍加上旗標,以便管理程式碼大小。
  • 您想管理功能的啟動作業,但必須先檢查標記的值,才能讓系統提供 aconfig 標記。

宣告建構旗標

建構旗標會在 textproto 檔案中宣告。如要宣告建構標記:

  1. 導航到WORKING_DIRECTORY/build/release/flag_declarations/
  2. 建立名為 RELEASE_MY_FLAG_NAME.textproto 的檔案。
  3. 編輯檔案並新增類似以下的項目:

    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_valuestring_value。如果類型為 string_value,則值必須以引號括住。如未指定,該值為空白字串。布林值會以 true 或空字串表示為 false。
    • workflowLAUNCHPREBUILT。使用 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: [],
  }),
}

如果這個標記的值為 truelibaconfig_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 開發設定的旗標值檔案。