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

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

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

การสร้างโปรไฟล์ประสิทธิภาพ

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

Worker แบบถาวรสำหรับการดำเนินการบิลด์ Android

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

โดยตัวช่วยจำของการดำเนินการเหล่านี้มีดังนี้

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

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

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

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

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 ให้ใช้ แฟล็ก --android_aapt=aapt2 หรือตั้งค่า aapt2 ใน aapt_version ใน android_binary และ android_local_test

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

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