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

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

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

Android Vitals จะรายงานเมตริกการเพิ่มประสิทธิภาพโค้ด DEX สำหรับแอปและเกมทั้งหมด แต่จะบังคับใช้เกณฑ์สำหรับแอปและเกมที่มีขนาดตรงตามข้อกำหนดที่เฉพาะเจาะจงเท่านั้น

ตรวจหาปัญหา

Android Vitals จะแจ้งเตือนคุณเมื่อระดับการเพิ่มประสิทธิภาพโค้ด DEX ของแอปอยู่ในระดับต่ำ ซึ่งรวมถึงการทำให้โค้ดอ่านยาก การลดขนาด และการเพิ่มประสิทธิภาพสำหรับแอปและเกมที่ใช้ 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 ด้วย แม้ว่ารายงานจะช่วยให้คุณเข้าใจว่ากฎการเก็บรักษาส่งผลต่อคะแนนการเพิ่มประสิทธิภาพ การลดขนาด และการทำให้โค้ดอ่านยากอย่างไร แต่เปอร์เซ็นต์ในรายงานจะไม่ตรงกับค่าใน 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 แล้วค้นหากฎการเก็บรักษาที่ตรงกับแพ็กเกจที่ไม่ได้ทำให้โค้ดอ่านยาก ตัวอย่างเช่น หาก com.foo. เป็นแพ็กเกจขนาดใหญ่ใน DEX ให้มองหากฎการเก็บรักษาในรูปแบบ -keep com.foo.** หรือ -keep com.foo.bar.**
  • โปรดทราบว่ากฎการเก็บรักษาผู้ใช้ไลบรารีอาจระบุได้ไม่ตรงไปตรงมา หากสงสัยว่ากฎผู้ใช้ไลบรารีส่งผลต่อการเพิ่มประสิทธิภาพ คุณสามารถตรวจสอบในเครื่องได้โดยเพิ่มกฎดังกล่าวลงในแอปตัวอย่างแบบสแตนด์อโลนโดยใช้ AGP เวอร์ชันล่าสุด แล้วตรวจสอบด้วยเครื่องมือวิเคราะห์การกำหนดค่า R8