このページでは、Android アプリのビルド パフォーマンスの最適化について説明します。Bazel を使用した一般的なビルド パフォーマンスの最適化については、パフォーマンスの最適化をご覧ください。
推奨されるフラグ
フラグは bazelrc
構成構文で記述されているため、bazelrc
ファイルに直接貼り付け、コマンドラインから --config=<configuration_name>
で呼び出すことができます。
パフォーマンスのプロファイリング
Bazel は、デフォルトで JSON トレース プロファイルを Bazel の出力ベースの command.profile.gz
というファイルに書き込みます。プロファイルの読み取り方法と操作方法については、JSON プロファイルのドキュメントをご覧ください。
Android ビルド アクション用の永続ワーカー。
Android ビルドアクションのサブセットは、永続ワーカーをサポートしています。
これらのアクションの頭文字は次のとおりです。
- DexBuilder
- Javac
- 脱糖
- 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
フラグを使用するか、android_binary
と android_local_test
の aapt_version
に aapt2
を設定します。
SSD の最適化
--experimental_multi_threaded_digest
フラグは、SSD でのダイジェスト計算の最適化に役立ちます。