คุณควรเพิ่มประสิทธิภาพแอปให้มีขนาดเล็กและรวดเร็วที่สุดเท่าที่จะเป็นไปได้เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีที่สุด เครื่องมือเพิ่มประสิทธิภาพแอปของเราชื่อ R8 จะเพิ่มประสิทธิภาพแอปโดย นำโค้ดและทรัพยากรที่ไม่ได้ใช้แล้วออก เขียนโค้ดใหม่เพื่อเพิ่มประสิทธิภาพรันไทม์ และอื่นๆ สำหรับผู้ใช้ของคุณ การเปลี่ยนแปลงนี้หมายความว่า
- เริ่มเล่นวิดีโอได้เร็วขึ้น
- ปรับปรุงประสิทธิภาพการแสดงผลและรันไทม์
- ANR น้อยลง
หากต้องการเปิดใช้การเพิ่มประสิทธิภาพแอป ให้ตั้งค่า isMinifyEnabled = true (สำหรับการเพิ่มประสิทธิภาพโค้ด)
และ isShrinkResources = true (สำหรับการเพิ่มประสิทธิภาพทรัพยากร) ในสคริปต์บิลด์ระดับแอปของบิลด์รุ่น
ที่เผยแพร่ตามที่แสดงในโค้ดต่อไปนี้ เราขอแนะนำ
ให้คุณเปิดใช้การตั้งค่าทั้ง 2 รายการเสมอ นอกจากนี้ เรายังแนะนำให้เปิดใช้การเพิ่มประสิทธิภาพแอปในแอปเวอร์ชันสุดท้ายที่คุณทดสอบก่อนเผยแพร่เท่านั้น ซึ่งโดยปกติแล้วจะเป็นบิลด์รุ่นที่เผยแพร่ เนื่องจาก
การเพิ่มประสิทธิภาพจะเพิ่มเวลาบิลด์ของโปรเจ็กต์และอาจทำให้การแก้ไขข้อบกพร่องยากขึ้นเนื่องจากวิธีที่ใช้ในการ
แก้ไขโค้ด
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Groovy
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
เพิ่มประสิทธิภาพการลดขนาดทรัพยากรเพื่อให้แอปมีขนาดเล็กลง
Android Gradle Plugin (AGP) เวอร์ชัน 8.12.0 ได้เปิดตัวการลดขนาดทรัพยากรที่เพิ่มประสิทธิภาพ ซึ่งมีเป้าหมายเพื่อผสานรวมการเพิ่มประสิทธิภาพทรัพยากรและโค้ดเพื่อสร้างแอปที่ เล็กลงและเร็วขึ้น
เปิดใช้การลดขนาดทรัพยากรที่เพิ่มประสิทธิภาพ
หากต้องการเปิดไปป์ไลน์การลดขนาดทรัพยากรที่ได้รับการเพิ่มประสิทธิภาพใหม่สำหรับ AGP เวอร์ชันก่อน 9.0.0 ให้เพิ่มข้อมูลต่อไปนี้ลงในไฟล์ gradle.properties ของโปรเจ็กต์
android.r8.optimizedResourceShrinking=true
หากใช้ AGP 9.0.0 ขึ้นไป คุณไม่จำเป็นต้องตั้งค่า
android.r8.optimizedResourceShrinking=true ระบบจะใช้การลดขนาดทรัพยากรที่เพิ่มประสิทธิภาพโดยอัตโนมัติเมื่อเปิดใช้ isShrinkResources = true ในการกำหนดค่าบิลด์
ยืนยันและกำหนดค่าการตั้งค่าการเพิ่มประสิทธิภาพ R8
หากต้องการให้ R8 ใช้ความสามารถในการเพิ่มประสิทธิภาพอย่างเต็มที่ ให้นำบรรทัดต่อไปนี้ออกจากไฟล์ gradle.properties ของโปรเจ็กต์ หากมี
android.enableR8.fullMode=false # Remove this line from your codebase.
โปรดทราบว่าการเปิดใช้การเพิ่มประสิทธิภาพแอปจะทำให้เข้าใจ Stack Trace ได้ยาก โดยเฉพาะอย่างยิ่งหาก R8 เปลี่ยนชื่อคลาสหรือชื่อเมธอด หากต้องการดู Stack Trace ที่ สอดคล้องกับซอร์สโค้ดอย่างถูกต้อง ให้ดูที่ กู้คืน Stack Trace เดิม
หากเปิดใช้ R8 คุณควรสร้างโปรไฟล์การเริ่มต้นเพื่อให้ประสิทธิภาพการเริ่มต้นดียิ่งขึ้น
หากเปิดใช้การเพิ่มประสิทธิภาพแอปและทำให้เกิดข้อผิดพลาด โปรดลองใช้กลยุทธ์ต่อไปนี้เพื่อแก้ไข
- เพิ่มกฎการเก็บเพื่อให้โค้ดบางส่วนไม่เปลี่ยนแปลง
- ใช้การเพิ่มประสิทธิภาพทีละน้อย
- อัปเดตโค้ดเพื่อใช้ไลบรารีที่เหมาะกับการเพิ่มประสิทธิภาพมากกว่า
หากสนใจเพิ่มประสิทธิภาพความเร็วในการบิลด์ โปรดดูกำหนดค่าวิธีเรียกใช้ R8 เพื่อดูข้อมูลเกี่ยวกับวิธีกำหนดค่า R8 ตามสภาพแวดล้อมของคุณ
การเปลี่ยนแปลงลักษณะการทำงานของ AGP และ R8
ตารางต่อไปนี้แสดงฟีเจอร์หลักที่เปิดตัวใน Android Gradle Plugin (AGP) และคอมไพเลอร์ R8 เวอร์ชันต่างๆ
| เวอร์ชัน AGP | ฟีเจอร์ที่เปิดตัว |
|---|---|
| 9.0 |
การลดขนาดทรัพยากรที่เพิ่มประสิทธิภาพ: เปิดใช้โดยค่าเริ่มต้น (ควบคุมโดยใช้ android.r8.optimizedResourceShrinking) การลดขนาดทรัพยากรที่เพิ่มประสิทธิภาพช่วยผสานรวมการลดขนาดทรัพยากรกับไปป์ไลน์การเพิ่มประสิทธิภาพโค้ด ซึ่งจะทำให้แอปมีขนาดเล็กลงและเร็วขึ้น การเพิ่มประสิทธิภาพทั้งการอ้างอิงโค้ดและทรัพยากรพร้อมกันจะช่วยให้ระบบระบุและนำทรัพยากรที่อ้างอิงจากโค้ดที่ไม่ได้ใช้งานออกได้ ซึ่งเป็นการปรับปรุงที่สำคัญจากกระบวนการเพิ่มประสิทธิภาพที่แยกกันก่อนหน้านี้วิธีนี้มีประโยชน์อย่างยิ่งสำหรับแอปที่แชร์ทรัพยากรและโค้ดจำนวนมากในรูปแบบต่างๆ โดยมีการปรับปรุงขนาดแอปที่วัดได้มากกว่า 50% การลดขนาดที่ได้จะทำให้การดาวน์โหลดมีขนาดเล็กลง การติดตั้งเร็วขึ้น และผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีขึ้นด้วยการเริ่มต้นที่เร็วขึ้น การแสดงผลที่ได้รับการปรับปรุง และ ANR ที่น้อยลง การกรองกฎของคลัง: เราได้หยุดการรองรับตัวเลือกส่วนกลาง (เช่น -dontobfuscate) ในกฎสำหรับผู้ใช้คลังแล้ว และแอปจะกรองตัวเลือกเหล่านั้นออก ดูข้อมูลเพิ่มเติมได้ที่เพิ่มตัวเลือกส่วนกลางการตรวจสอบค่า Null ของ Kotlin: เพิ่มประสิทธิภาพโดยค่าเริ่มต้น (ควบคุมโดยใช้ -processkotlinnullchecks) เวอร์ชันนี้ยังมีการปรับปรุงความเร็วในการบิลด์อย่างมากด้วย ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกส่วนกลางสำหรับการเพิ่มประสิทธิภาพเพิ่มเติมเพิ่มประสิทธิภาพแพ็กเกจที่เฉพาะเจาะจง: คุณใช้ packageScope เพื่อเพิ่มประสิทธิภาพแพ็กเกจที่เฉพาะเจาะจงได้ ฟีเจอร์นี้ยังอยู่ในช่วงทดลอง ดูข้อมูลเพิ่มเติมได้ที่เพิ่มประสิทธิภาพแพ็กเกจที่ระบุด้วย packageScopeเพิ่มประสิทธิภาพโดยค่าเริ่มต้น: เราได้หยุดรองรับ getDefaultProguardFile("proguard-android.txt") เนื่องจากมี -dontoptimize ซึ่งควรหลีกเลี่ยง แต่ให้ใช้ "proguard-android-optimize.txt" แทน หากต้องการปิดใช้การเพิ่มประสิทธิภาพในแอปทั่วโลก ให้เพิ่ม Flag ลงในไฟล์ Proguard ด้วยตนเอง
|
| 8.12 |
การลดขนาดทรัพยากร: เพิ่มการรองรับเบื้องต้น (ปิดอยู่โดยค่าเริ่มต้น เปิดใช้ isShrinkResources) การลดขนาดทรัพยากรจะทำงานร่วมกับ R8 เพื่อระบุและนำทรัพยากรที่ไม่ได้ใช้ออกอย่างมีประสิทธิภาพการย้อนรอย Logcat: รองรับการย้อนรอยอัตโนมัติในหน้าต่าง Logcat ของ Android Studio |
| 8.6 |
การย้อนรอยที่ดียิ่งขึ้น: มีการย้อนรอยชื่อไฟล์และหมายเลขบรรทัดโดยค่าเริ่มต้นสำหรับระดับ minSdk ทั้งหมด (ก่อนหน้านี้ต้องใช้ minSdk 26 ขึ้นไปในเวอร์ชัน 8.2)การอัปเดต R8 ช่วยให้มั่นใจได้ว่า Stack Trace จากบิลด์ที่ผ่านการ Obfuscate จะอ่านได้ง่ายและชัดเจน เวอร์ชันนี้ปรับปรุงวิธีจับคู่หมายเลขบรรทัดและไฟล์ต้นฉบับ ทำให้เครื่องมือต่างๆ เช่น Logcat ของ Android Studio สามารถย้อนรอยข้อขัดข้องไปยังซอร์สโค้ดเดิมได้โดยอัตโนมัติ |
| 8.0 |
โหมดเต็มรูปแบบโดยค่าเริ่มต้น: โหมดเต็มรูปแบบของ R8 มีการเพิ่มประสิทธิภาพที่ทรงพลังกว่ามาก ซึ่งจะเปิดใช้งานโดยค่าเริ่มต้น คุณเลือกไม่ใช้ได้โดยใช้ android.enableR8.fullMode=false
|
| 7.0 |
โหมดเต็มพร้อมใช้งาน: เปิดตัวเป็นฟีเจอร์ที่ต้องเลือกใช้โดยใช้ android.enableR8.fullMode=true โหมดเต็มจะใช้การเพิ่มประสิทธิภาพที่ทรงพลังยิ่งขึ้นโดยการตั้งสมมติฐานที่เข้มงวดมากขึ้นเกี่ยวกับวิธีที่โค้ดใช้การสะท้อนและฟีเจอร์แบบไดนามิกอื่นๆ แม้ว่าการดำเนินการนี้จะช่วยลดขนาดแอปและปรับปรุงประสิทธิภาพ แต่ก็อาจต้องใช้กฎการเก็บรักษาเพิ่มเติมเพื่อป้องกันไม่ให้ระบบลบโค้ดที่จำเป็นออก
|