ประสิทธิภาพของ Android ในบิลด์

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

หน้านี้มีข้อมูลเกี่ยวกับการเพิ่มประสิทธิภาพบิลด์สำหรับแอป Android โดยเฉพาะ สําหรับการเพิ่มประสิทธิภาพการบิลด์ทั่วไปด้วย Bazel โปรดดูหัวข้อการเพิ่มประสิทธิภาพ

Flag อยู่ในไวยากรณ์การกำหนดค่า bazelrc จึงวางลงในไฟล์ bazelrc ได้โดยตรงและเรียกใช้ด้วย --config=<configuration_name> ในบรรทัดคำสั่ง

การวัดประสิทธิภาพ

โดยค่าเริ่มต้น Bazel จะเขียนโปรไฟล์การติดตาม JSON ลงในไฟล์ที่ชื่อ command.profile.gz ในฐานเอาต์พุตของ Bazel ดูวิธีอ่านและโต้ตอบกับโปรไฟล์ได้จากเอกสารประกอบเกี่ยวกับโปรไฟล์ JSON

Worker แบบถาวรสําหรับการดำเนินการสร้าง Android

การดำเนินการสร้าง Android บางรายการรองรับผู้ทำงานแบบถาวร

หลักการช่วยจำสำหรับการดำเนินการเหล่านี้มีดังนี้

  • DexBuilder
  • Javac
  • Desugar
  • AaptPackage
  • AndroidResourceParser
  • AndroidResourceValidator
  • AndroidResourceCompiler
  • RClassGenerator
  • AndroidResourceLink
  • AndroidAapt2
  • AndroidAssetMerger
  • AndroidResourceMerger
  • AndroidCompiledResourceMerger

การเปิดใช้เวิร์กเกอร์อาจส่งผลให้ประสิทธิภาพการสร้างดีขึ้นเนื่องจากประหยัดค่าใช้จ่ายในการเริ่มต้น JVM จากการเรียกใช้เครื่องมือเหล่านี้แต่ละรายการ แต่ข้อเสียคือการใช้หน่วยความจำในระบบจะเพิ่มขึ้นเนื่องจากมีการเก็บเครื่องมือไว้

หากต้องการเปิดใช้ผู้ดําเนินการสําหรับการดําเนินการเหล่านี้ ให้ใช้ Flag เหล่านี้กับ --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 ทำงานอยู่และโปรเจ็กต์ที่กำลังสร้าง

หากต้องการจำกัดจำนวนอินสแตนซ์สําหรับการดําเนินการ ให้ใช้ Flag ต่อไปนี้

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

aapt2 มีประสิทธิภาพดีกว่า aapt และสร้าง APK ที่เล็กลงด้วย หากต้องการใช้ aapt2 ให้ใช้ Flag --android_aapt=aapt2 หรือตั้งค่า aapt2 ใน aapt_version ใน android_binary และ android_local_test

การเพิ่มประสิทธิภาพ SSD

Flag --experimental_multi_threaded_digest มีประโยชน์ในการเพิ่มประสิทธิภาพการคํานวณข้อมูลสรุปใน SSD