ビルドフラグはビルド時の定数であり、実行時に変更できません。このフラグは、次のような 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 でビルドフラグを使用する
makefile では、ビルドフラグは読み取り専用の 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
に設定され、RELEASE_PACKAGE_NFC_STACK.textproto
(trunk_staging
開発構成のフラグ値ファイル)で文字列値 com.android.nfcservices
が設定されています。