Android 빌드 성능

문제 신고 소스 보기

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

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

프로파일링 성능

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

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

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

이러한 액션의 연상 기호는 다음과 같습니다.

  • DexBuilder
  • 자바
  • 디슈가
  • Aapt 패키지
  • Android 리소스 파서
  • AndroidResourceValidator
  • Android 리소스 컴파일러
  • RClassGenerator
  • Android 리소스 링크
  • Android 앱 2
  • AndroidAssetMerger
  • Android 리소스 병합
  • 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입니다. 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의 다이제스트 계산을 최적화하는 데 유용합니다.