ビルドフラグはビルド時の定数であり、実行時に変更できません。これらのフラグは、次のような 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
です。機能起動フラグと同様に、false
からtrue
に進むブール値フラグにはLAUNCH
を使用します。バージョン(通常はビルド済み)を設定するフラグにはPREBUILT
を使用します。containers
作成するコードの種類(ベンダーコードの場合は「vendor」、商品コードの場合は「product」など)。使用する値が不明な場合は、前の例に示すように、4 つのコンテナタイプすべてを使用します。
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
開発構成のフラグ値ファイル)があります。