การเพิ่มประสิทธิภาพโค้ด DEX เป็นผลการค้นหาของ Android Vitals ที่ช่วยให้คุณตรวจสอบและ ปรับปรุงคุณภาพ ขนาด และประสิทธิภาพการคอมไพล์ของแอปได้ การเพิ่มประสิทธิภาพและ การปรับให้ยากต่อการอ่าน (Obfuscate) โค้ดโดยใช้ R8 หรือเครื่องมือทางเลือก (เช่น เครื่องมือเพิ่มประสิทธิภาพที่เข้ากันได้กับ ProGuard หรือโปรแกรมประมวลผลภายหลัง DEX รอง) จะช่วยลดขนาด DEX ของ แอป ปรับปรุงประสิทธิภาพรันไทม์ และลดการใช้หน่วยความจำ
ไฟล์ DEX หรือ Dalvik Executable มีโค้ดที่คอมไพล์แล้วซึ่งใช้
ในการเรียกใช้แอป โดยทั่วไปจะมีโค้ด Java และ Kotlin ซึ่งแตกต่างจาก
โค้ด C++ ที่คอมไพล์แล้วหรือไฟล์ .so
รายงาน Android Vitals จะแสดงเมตริกการเพิ่มประสิทธิภาพโค้ด DEX สำหรับแอปและเกมทั้งหมด แต่จะบังคับใช้เกณฑ์สำหรับแอปและเกมที่มีขนาดตรงตามข้อกำหนดที่เฉพาะเจาะจงเท่านั้น
ตรวจหาปัญหา
Android Vitals จะแจ้งเตือนคุณเมื่อระดับการเพิ่มประสิทธิภาพโค้ด DEX ของแอปต่ำ ซึ่งรวมถึงการปรับให้ยากต่อการอ่าน (Obfuscation) การลดขนาด และการเพิ่มประสิทธิภาพสำหรับแอปและเกม ที่ใช้ R8 สำหรับแอปที่ไม่ได้ใช้ R8 Android Vitals จะพยายามตรวจสอบอัตราการเพิ่มประสิทธิภาพ การลดขนาด และการปกปิดโค้ด แต่จะกลับไปใช้ฮิวริสติกการปกปิดโค้ดเป็นพร็อกซีในกรณีที่จำเป็น
ตรวจสอบสถานะการเพิ่มประสิทธิภาพ
Android Vitals ช่วยปรับปรุงประสิทธิภาพของแอปได้โดยการแจ้งเตือนคุณผ่าน Play Console เมื่อแอปไม่เป็นไปตามเปอร์เซ็นต์ที่กำหนดขั้นต่ำสำหรับการเพิ่มประสิทธิภาพโค้ด ดูคำจำกัดความโดยละเอียดของการ ลดขนาด การเพิ่มประสิทธิภาพ และการปกปิดโค้ดได้ที่ ใช้เครื่องมือวิเคราะห์การกำหนดค่า R8
สำหรับแอปที่สร้างด้วยแพตช์ล่าสุดของ AGP เวอร์ชัน 8.10 ขึ้นไป ระบบจะดึงเปอร์เซ็นต์เหล่านี้จากไฟล์ r8.json ที่รวมไว้
สำหรับ AGP เวอร์ชันที่ต่ำกว่าหรือในกรณีที่ไม่มีไฟล์ r8.json ระบบจะคำนวณเปอร์เซ็นต์จากไฟล์ mapping.txt หากมี หรือใช้ฮิวริสติก DEX หากไม่มีไฟล์แมป
สำหรับแอปที่เพิ่มประสิทธิภาพด้วยเครื่องมือเพิ่มประสิทธิภาพโค้ดทางเลือก Android Vitals จะทำการวิเคราะห์เพื่อประมาณเปอร์เซ็นต์ของคลาส เมธอด และฟิลด์ ที่ทำให้สับสนใน App Bundle
ขนาด DEX ทั้งหมดขั้นต่ำ
แม้ว่า Android Vitals จะคำนวณเมตริกการเพิ่มประสิทธิภาพโค้ดสำหรับแอปทั้งหมด แต่คุณจะได้รับ การแจ้งเตือนก็ต่อเมื่อ App Bundle มีขนาด DEX ทั้งหมดตรงตามข้อกำหนดต่อไปนี้ เท่านั้น
- แอป: Bundle มีโค้ด DEX อย่างน้อย 10 MB ซึ่งวัดเป็น ขนาดที่ไม่ได้บีบอัด
- เกม: Bundle มีโค้ด DEX อย่างน้อย 50 MB ซึ่งวัดเป็น ขนาดที่ไม่ได้บีบอัด
Android Vitals จะแสดงขนาด DEX ของแอป แต่คุณก็วัดขนาดนี้ได้ ในเครื่องโดยใช้บรรทัดคำสั่ง
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
วัดค่าการเพิ่มประสิทธิภาพโค้ด R8 ในเครื่อง
หากแอปเพิ่มประสิทธิภาพด้วย R8 คุณจะวัดการเพิ่มประสิทธิภาพ การปรับให้ยากต่อการอ่าน และการลดขนาดของ App Bundle ได้โดยใช้เครื่องมือวิเคราะห์การกำหนดค่า R8 รายงานเครื่องมือวิเคราะห์การกำหนดค่า R8 ยังรวมอยู่ในทักษะเครื่องมือวิเคราะห์ R8 ด้วย แม้ว่ารายงานจะช่วยให้คุณเข้าใจว่ากฎ keep ส่งผลต่อคะแนนการเพิ่มประสิทธิภาพ การลดขนาด และการปกปิดโค้ดอย่างไร แต่เปอร์เซ็นต์ในรายงานจะไม่ตรงกับค่าใน Android Vitals เนื่องจากระบบจะคำนวณเปอร์เซ็นต์เหล่านี้ก่อนการเพิ่มประสิทธิภาพ
หากต้องการตรวจสอบข้อมูลเมตาที่แน่นอนซึ่ง Android Vitals ใช้ในการคำนวณคะแนน ให้
แตกไฟล์ r8.json จาก App Bundle ของคุณ
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