การเพิ่มประสิทธิภาพโค้ด DEX เป็นการค้นพบของ Android Vitals ที่ช่วยให้คุณตรวจสอบและปรับปรุงคุณภาพ ขนาด และประสิทธิภาพในการคอมไพล์ของแอปได้ การเพิ่มประสิทธิภาพและการสร้างความสับสนให้โค้ดโดยใช้ R8 หรือเครื่องมืออื่นๆ (เช่น เครื่องมือเพิ่มประสิทธิภาพที่เข้ากันได้กับ ProGuard หรือตัวประมวลผลหลังการประมวลผล DEX รอง) จะช่วยลดขนาด DEX ของแอป ปรับปรุงประสิทธิภาพรันไทม์ และลดหน่วยความจำที่ใช้
ไฟล์ DEX หรือ Dalvik Executable มีโค้ดที่คอมไพล์แล้วซึ่งใช้ในการเรียกใช้แอป โดยทั่วไปจะรวมโค้ด Java และ Kotlin ซึ่งตรงข้ามกับโค้ด C++ ที่คอมไพล์แล้วหรือไฟล์ .so
Android Vitals จะรายงานเมตริกการเพิ่มประสิทธิภาพโค้ด DEX สำหรับแอปและเกมทั้งหมด แต่จะบังคับใช้เกณฑ์สำหรับแอปและเกมที่ตรงตามข้อกำหนดด้านขนาดที่เฉพาะเจาะจงเท่านั้น
ตรวจหาปัญหา
Android Vitals สามารถแจ้งเตือนคุณใน Play Console เมื่อระดับการเพิ่มประสิทธิภาพ การย่อขนาด หรือการสร้างความสับสนของโค้ด DEX ของแอปไม่เป็นไปตามเปอร์เซ็นต์ขั้นต่ำที่กำหนด
วิธีคำนวณคะแนนการเพิ่มประสิทธิภาพ
สำหรับแอปที่สร้างด้วย AGP 8.10 เวอร์ชันแพตช์ล่าสุดขึ้นไป (เช่น 8.10.1 แทนที่จะเป็น 8.10.0) ระบบจะดึงเปอร์เซ็นต์เหล่านี้มาจากไฟล์ r8.json ที่รวมอยู่ด้วย ตรวจสอบว่าคุณใช้ AGP และ R8 เวอร์ชันแพตช์ล่าสุดสำหรับเวอร์ชันย่อย เพื่อให้ระบบสร้างข้อมูลเมตาที่ถูกต้อง
สำหรับแอปที่สร้างด้วย AGP เวอร์ชันก่อนหน้า หรือแอปที่เพิ่มประสิทธิภาพด้วยเครื่องมือเพิ่มประสิทธิภาพโค้ดทางเลือกที่ไม่มี r8.json Android Vitals จะประมาณเปอร์เซ็นต์การสร้างความสับสนโดยใช้ไฟล์ mapping.txt (หากมี) หรือการเรียนรู้ของ DEX
ขนาด DEX ทั้งหมดขั้นต่ำ
แม้ว่า Android Vitals จะคำนวณเมตริกการเพิ่มประสิทธิภาพโค้ดสำหรับแอปทั้งหมด แต่คุณจะได้รับการแจ้งเตือนก็ต่อเมื่อ App Bundle ของคุณเป็นไปตามข้อกำหนดด้านขนาด DEX รวมต่อไปนี้
- แอป: Bundle มีโค้ด DEX อย่างน้อย 10 MB โดยวัดจากขนาดที่ไม่ได้บีบอัด
- เกม: Bundle มีโค้ด DEX อย่างน้อย 50 MB โดยวัดจากขนาดที่ไม่ได้บีบอัด
วัดการเพิ่มประสิทธิภาพโค้ดในเครื่อง
หากต้องการวัดขนาด DEX ที่ไม่บีบอัดของ App Bundle และดูเปอร์เซ็นต์การเพิ่มประสิทธิภาพ การลดขนาด และการสร้างความสับสนที่ตรงกับผลการค้นพบใน Android Vitals ให้เรียกใช้ android analyze:
android analyze <yourapp>.aab
แก้ไขปัญหา
หากต้องการแก้ไขคะแนนการเพิ่มประสิทธิภาพโค้ด DEX ที่ต่ำ โปรดดูคำแนะนำตามระบบบิลด์และเครื่องมือเพิ่มประสิทธิภาพของคุณ
R8
หากต้องการปรับปรุงคะแนนการเพิ่มประสิทธิภาพโค้ด R8 DEX โปรดดูคำแนะนำที่หัวข้อปรับปรุงการเพิ่มประสิทธิภาพ R8 และใช้เครื่องมือวิเคราะห์การกำหนดค่า R8 เพื่อทำความเข้าใจว่ากฎการเก็บรักษา (Keep Rule) ส่งผลต่อคะแนนการเพิ่มประสิทธิภาพ การลดขนาด และการสร้างความสับสนอย่างไร (ดูคำจำกัดความโดยละเอียดของเมตริกเหล่านี้ได้ที่หัวข้อทำความเข้าใจรายงาน)
หากใช้ปลั๊กอิน Android Gradle (AGP) คุณยังสามารถใช้ทักษะเครื่องมือวิเคราะห์ R8 เพื่อรับคำแนะนำเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพกฎการเก็บรักษาของแอปได้ด้วย หากใช้ Bazel คุณจะมีสิทธิ์เข้าถึงเครื่องมือวิเคราะห์การกำหนดค่า R8 ด้วย โปรดดูเอกสารประกอบเกี่ยวกับการเพิ่มประสิทธิภาพ R8 ของ rules_android
เครื่องมือเพิ่มประสิทธิภาพที่ไม่ใช่ R8 และตัวประมวลผลหลังการคอมไพล์ DEX
หากไปป์ไลน์บิลด์ใช้เครื่องมือสร้างที่กำหนดเองหรือตัวประมวลผลภายหลัง DEX รอง ให้ทำตามขั้นตอนต่อไปนี้เพื่อปรับปรุงการเพิ่มประสิทธิภาพของแอป
- เปิด App Bundle ใน Android Studio และดูในตัววิเคราะห์ APK
- เลือกไฟล์
.dexทั้งหมด - ให้ความสนใจเป็นพิเศษกับไฟล์ที่มีขนาดใหญ่ที่สุดเมื่อคุณสลับปุ่ม "Deobfuscate names" (หมายเหตุ: คุณต้องโหลดไฟล์
mapping.txt) หากพบว่าไฟล์บางไฟล์ยังคงมีขนาดใหญ่ขณะที่สร้างความสับสน เป็นไปได้ว่าไฟล์เหล่านั้นได้รับผลกระทบจากกฎการเก็บรักษาทั้งแพ็กเกจ - ดูในไฟล์
proguard-rules.pro,configuration.txtหรือไฟล์ที่เทียบเท่าสำหรับเครื่องมือเพิ่มประสิทธิภาพหากคุณไม่ได้ใช้ R8 และค้นหากฎการเก็บรักษาที่ตรงกับแพ็กเกจที่ไม่ได้รับการสร้างความสับสน เช่น หากcom.foo.เป็นแพ็กเกจขนาดใหญ่ในไฟล์ DEX ให้มองหากฎการเก็บรักษาในรูปแบบ-keep com.foo.**หรือ-keep com.foo.bar.** - โปรดทราบว่ากฎการเก็บรักษาของผู้ใช้ไลบรารีอาจระบุได้ไม่ง่ายนัก หากสงสัยว่ากฎผู้ใช้ไลบรารีส่งผลต่อการเพิ่มประสิทธิภาพ คุณสามารถตรวจสอบไลบรารีได้โดยตรงโดยใช้
android analyze <library>.aarหรือตรวจสอบโดยเพิ่มไลบรารีลงในแอปตัวอย่างแบบสแตนด์อโลนที่ใช้ AGP เวอร์ชันล่าสุด แล้วตรวจสอบด้วยเครื่องมือวิเคราะห์การกำหนดค่า R8