เปิดใช้การเพิ่มประสิทธิภาพแอป

คุณควรเพิ่มประสิทธิภาพแอปให้มีขนาดเล็กและรวดเร็วที่สุดเท่าที่จะเป็นไปได้เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีที่สุด เครื่องมือเพิ่มประสิทธิภาพแอปของเราชื่อ 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 โหมดเต็มจะใช้การเพิ่มประสิทธิภาพที่ทรงพลังยิ่งขึ้นโดยการตั้งสมมติฐานที่เข้มงวดมากขึ้นเกี่ยวกับวิธีที่โค้ดใช้การสะท้อนและฟีเจอร์แบบไดนามิกอื่นๆ แม้ว่าการดำเนินการนี้จะช่วยลดขนาดแอปและปรับปรุงประสิทธิภาพ แต่ก็อาจต้องใช้กฎการเก็บรักษาเพิ่มเติมเพื่อป้องกันไม่ให้ระบบลบโค้ดที่จำเป็นออก