การเพิ่มประสิทธิภาพโค้ด DEX

การเพิ่มประสิทธิภาพและปกปิดโค้ดโดยใช้ R8 หรือเครื่องมือทางเลือก (เช่น เครื่องมือเพิ่มประสิทธิภาพที่เข้ากันได้กับ ProGuard หรือโปรแกรมประมวลผลภายหลัง DEX รอง) จะช่วยลดขนาด DEX ของแอป ปรับปรุงประสิทธิภาพรันไทม์ และลดร่องรอยการใช้หน่วยความจำ

ไฟล์ DEX หรือ Dalvik Executable มีโค้ดที่คอมไพล์แล้วซึ่งใช้ ในการเรียกใช้แอป โดยทั่วไปจะรวมโค้ด Java และ Kotlin ซึ่งแตกต่างจาก โค้ด C++ ที่คอมไพล์แล้วหรือไฟล์ .so

วัดการเพิ่มประสิทธิภาพโค้ด R8 ในเครื่อง

หากต้องการวัดขนาด DEX ที่ไม่ได้บีบอัดของ App Bundle ในเครื่องโดยใช้บรรทัดคำสั่ง ให้เรียกใช้คำสั่งต่อไปนี้

unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

หากแอปเพิ่มประสิทธิภาพด้วย R8 คุณจะวัดการเพิ่มประสิทธิภาพ การปกปิดโค้ด และการลดขนาด App Bundle ได้โดยใช้เครื่องมือวิเคราะห์การกำหนดค่า R8 ดูคําจํากัดความโดยละเอียดของการลดขนาด การเพิ่มประสิทธิภาพ และการปรับให้ยากต่อการอ่านได้ที่ใช้เครื่องมือวิเคราะห์การกำหนดค่า R8 รายงานเครื่องมือวิเคราะห์การกำหนดค่า R8 ยังรวมอยู่ในทักษะเครื่องมือวิเคราะห์ R8 ด้วย

หากต้องการตรวจสอบข้อมูลเมตาหลังการเพิ่มประสิทธิภาพที่ฝังอยู่ใน App Bundle (สำหรับ AGP เวอร์ชัน 8.10 ขึ้นไป) ให้แตกไฟล์ r8.json ดังนี้

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

แก้ไขปัญหา

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

ปลั๊กอิน Android Gradle และ R8

หากต้องการปรับปรุงคะแนนการเพิ่มประสิทธิภาพโค้ด DEX ของ R8 โปรดดูคำแนะนำที่ ปรับปรุงการเพิ่มประสิทธิภาพ R8 นอกจากนี้ คุณยังใช้ทักษะเครื่องมือวิเคราะห์ R8 เพื่อรับ คำแนะนำเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพกฎการเก็บรักษาของแอปได้ด้วย

ระบบบิลด์ที่ไม่ใช่ R8 และโปรแกรมประมวลผล DEX ภายหลัง

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

  • เปิด App Bundle ใน Android Studio แล้วดูใน ตัววิเคราะห์ APK
  • เลือกไฟล์.dexทั้งหมด
  • โปรดใส่ใจกับไฟล์ที่มีขนาดใหญ่ที่สุดขณะสลับปุ่ม "เลิกปิดบังชื่อ" (หมายเหตุ: คุณต้องอัปโหลดไฟล์ mapping.txt) หากพบว่าไฟล์บางไฟล์ยังคงมีขนาดใหญ่แม้ว่าจะมีการปกปิดแล้ว แสดงว่าไฟล์เหล่านั้นอาจได้รับผลกระทบจากกฎการเก็บรักษาทั่วทั้งแพ็กเกจ
  • ดูในไฟล์ proguard-rules.pro, configuration.txt หรือ ไฟล์ที่เทียบเท่าสำหรับเครื่องมือเพิ่มประสิทธิภาพหากคุณไม่ได้ใช้ R8 แล้วค้นหากฎ keep ที่ตรงกับแพ็กเกจที่ไม่ได้เข้ารหัส เช่น หาก com.foo. เป็นแพ็กเกจขนาดใหญ่ใน dex ให้มองหากฎการเก็บรักษาในรูปแบบ -keep com.foo.** หรือ -keep com.foo.bar.**
  • โปรดทราบว่ากฎการเก็บรักษาของผู้ใช้ไลบรารีอาจระบุได้ไม่ชัดเจนนัก หากสงสัยว่ากฎผู้ใช้ไลบรารีส่งผลต่อการเพิ่มประสิทธิภาพ คุณสามารถตรวจสอบได้ในเครื่องโดยเพิ่มกฎดังกล่าวลงในแอปตัวอย่างแบบสแตนด์อโลนโดยใช้ AGP เวอร์ชันล่าสุด และตรวจสอบด้วยเครื่องมือวิเคราะห์การกำหนดค่า R8