Android 빌드 성능

문제 신고 소스 보기 Nightly · 8.0 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 시작 비용을 절약하여 빌드 성능을 개선할 수 있지만, 이를 유지함으로써 시스템의 메모리 사용량이 증가합니다.

이러한 작업에 worker를 사용 설정하려면 명령줄에서 --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입니다. Bazel이 실행되는 시스템과 빌드 중인 프로젝트에 따라 다를 수 있지만, 각 작업의 인스턴스 수를 1 또는 2로 제한하여 빌드 성능 개선을 측정했습니다.

작업의 인스턴스 수를 제한하려면 다음 플래그를 적용하세요.

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_version에서 aapt2를 설정합니다.

SSD 최적화

--experimental_multi_threaded_digest 플래그는 SSD에서 다이제스트 계산을 최적화하는 데 유용합니다.