Android 빌드 성능

이 페이지에는 특히 Android 앱의 빌드 성능 최적화에 관한 정보가 포함되어 있습니다. Bazel을 사용한 일반적인 빌드 성능 최적화에 대해서는 성능 최적화를 참조하세요.

플래그는 bazelrc 구성 구문에 있으므로 bazelrc 파일에 직접 붙여넣고 명령줄에서 --config=<configuration_name>를 사용하여 호출할 수 있습니다.

프로파일링 성능

Bazel은 기본적으로 Bazel의 출력 베이스에 있는 command.profile.gz라는 파일에 JSON 추적 프로필을 작성합니다. 프로필을 읽고 상호작용하는 방법은 JSON 프로필 문서를 참조하세요.

Android 빌드 작업을 위한 영구 작업자.

Android 빌드 작업의 하위 집합은 영구 작업자를 지원합니다.

이러한 작업의 니모닉은 다음과 같습니다.

  • DexBuilder
  • 자바크
  • 디슈가
  • 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_version에서 aapt2를 설정합니다.

SSD 최적화

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