このページでは、特に Android アプリのビルド パフォーマンスを最適化する方法について説明します。Bazel を使用した一般的なビルド パフォーマンスの最適化については、 パフォーマンスの最適化をご覧ください。
推奨フラグ
フラグは
bazelrc 構成構文で記述されているため、
ファイルに直接貼り付けて、コマンドラインで
--config=<configuration_name> を使用して呼び出すことができます。bazelrc
パフォーマンスのプロファイリング
Bazel はデフォルトで、JSON トレース プロファイルを Bazel の出力ベースにある
command.profile.gz というファイルに書き込みます。
プロファイルの読み取りと操作の方法については、JSON プロファイルのドキュメントを
ご覧ください。
Android ビルド アクションの永続ワーカー。
Android ビルド アクションのサブセットでは、 永続ワーカーがサポートされています。
これらのアクションのニーモニックは次のとおりです。
- DexBuilder
- Javac
- Desugar
- AaptPackage
- AndroidResourceParser
- AndroidResourceValidator
- AndroidResourceCompiler
- RClassGenerator
- AndroidResourceLink
- AndroidAapt2
- AndroidAssetMerger
- AndroidResourceMerger
- AndroidCompiledResourceMerger
ワーカーを有効にすると、これらのツールを呼び出す際の JVM 起動コストを削減できるため、ビルド パフォーマンスが向上しますが、永続化することでシステム上のメモリ使用量が増加します。
これらのアクションでワーカーを有効にするには、コマンドラインで
--config=android_workers を使用して次のフラグを適用します。
build:android_workers --strategy=DexBuilder=worker
build:android_workers --strategy=Javac=worker
build:android_workers --strategy=Desugar=worker
# A wrapper flag for these resource processing actions:
# - AndroidResourceParser
# - AndroidResourceValidator
# - AndroidResourceCompiler
# - RClassGenerator
# - AndroidResourceLink
# - AndroidAapt2
# - AndroidAssetMerger
# - AndroidResourceMerger
# - AndroidCompiledResourceMerger
build:android_workers --persistent_android_resource_processor
アクションごとに作成される永続ワーカーのデフォルト数は 4 です。各アクションのインスタンス数を 1 または 2 に制限することで、ビルド パフォーマンスが向上することが測定されています。ただし、これは Bazel が実行されているシステムとビルド対象のプロジェクトによって異なる場合があります。
アクションのインスタンス数を制限するには、次のフラグを適用します。
build:android_workers --worker_max_instances=DexBuilder=2
build:android_workers --worker_max_instances=Javac=2
build:android_workers --worker_max_instances=Desugar=2
build:android_workers --worker_max_instances=AaptPackage=2
# .. and so on for each action you're interested in.
AAPT2 を使用する
aapt2 は aapt よりも
パフォーマンスが向上し、作成される APK のサイズも小さくなります。aapt2 を使用するには、
--android_aapt=aapt2 フラグを使用するか、aapt_version の aapt2 を
android_binary と android_local_test に設定します。
SSD の最適化
--experimental_multi_threaded_digest フラグは、SSD でのダイジェスト
計算の最適化に役立ちます。