Android 빌드 성능

문제 신고 소스 보기 나이틀리 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

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

성능 프로파일링

Bazel은 기본적으로 Bazel의 출력 베이스에 있는 command.profile.gz이라는 파일에 JSON 추적 프로필을 씁니다. 프로필을 읽고 상호작용하는 방법은 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 사용

aapt2aapt보다 성능이 향상되었으며 더 작은 APK를 만듭니다. aapt2를 사용하려면 --android_aapt=aapt2 플래그를 사용하거나 android_binaryandroid_local_test에서 aapt_versionaapt2를 설정합니다.

SSD 최적화

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