Android ビルド パフォーマンス

問題を報告する ソースを表示 ナイトリー · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

このページでは、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 の使用

aapt2aapt よりもパフォーマンスが向上し、作成する APK も小さくなりました。aapt2 を使用するには、--android_aapt=aapt2 フラグを使用するか、android_binaryandroid_local_testaapt_versionaapt2 を設定します。

SSD の最適化

--experimental_multi_threaded_digest フラグは、SSD でのダイジェスト計算の最適化に役立ちます。