Hiệu suất của bản dựng Android

Báo cáo sự cố Xem nguồn

Trang này chứa thông tin cụ thể về cách tối ưu hoá hiệu suất bản dựng cho các ứng dụng Android. Để tối ưu hoá hiệu suất bản dựng nói chung bằng Bazel, hãy xem nội dung Tối ưu hoá hiệu suất.

Những cờ này theo cú pháp cấu hình bazelrc, nên bạn có thể dán trực tiếp các tệp này vào tệp bazelrc và được gọi bằng --config=<configuration_name> trên dòng lệnh.

Lập hồ sơ hiệu suất

Theo mặc định, Bazel sẽ viết hồ sơ theo dõi JSON vào một tệp có tên là command.profile.gz trong cơ sở dữ liệu đầu ra của Bazel. Xem tài liệu về Cấu hình JSON để biết cách đọc và tương tác với cấu hình đó.

Trình chạy ổn định cho hành động của bản dựng Android.

Một nhóm nhỏ các hành động trên bản dựng Android có hỗ trợ công việc liên tục.

Những nội dung gợi nhớ trong những hành động này là:

  • Trình tạo dexBuilder
  • Java
  • Desugar
  • Gói Aapt
  • Trình phân tích tài nguyên của Android
  • AndroidResourceValidator
  • Trình biên dịch AndroidResources
  • Trình tạo lớp RR
  • Đường liên kết đến AndroidResource
  • AndroidAapt2
  • Trình hợp nhất AndroidAsset
  • Hợp nhất AndroidResourceMerger
  • Trình hợp nhất tài nguyên trên AndroidCompiled

Việc bật worker có thể mang lại hiệu suất bản dựng tốt hơn bằng cách tiết kiệm chi phí khởi động VM khi gọi từng công cụ trong số này, nhưng đổi lại sẽ phải sử dụng thêm bộ nhớ trên hệ thống bằng cách duy trì chúng.

Để cho phép trình chạy thực hiện những thao tác này, hãy áp dụng các cờ này bằng --config=android_workers trên dòng lệnh:

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

Số lượng trình chạy cố định mặc định được tạo cho mỗi hành động là 4. Chúng tôi đã đo lường hiệu suất bản dựng được cải thiện bằng cách giới hạn số lượng thực thể cho mỗi hành động thành 1 hoặc 2, mặc dù điều này có thể thay đổi tuỳ thuộc vào hệ thống mà Bazel đang chạy và dự án đang được xây dựng.

Để giới hạn số lần xuất hiện của một hành động, hãy áp dụng các cờ sau:

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.

Sử dụng AAPT2

aapt2 đã cải thiện hiệu suất hơn aapt, đồng thời tạo ra các tệp APK nhỏ hơn. Để sử dụng aapt2, hãy sử dụng cờ --android_aapt=aapt2 hoặc đặt aapt2 trên aapt_version trên android_binaryandroid_local_test.

Tối ưu hoá SSD

Cờ --experimental_multi_threaded_digest hữu ích cho việc tối ưu hóa tính toán thông báo trên SSD.