สร้างโปรไฟล์สตาร์ทอัพ

โปรไฟล์เริ่มต้นเป็นชุดย่อยของโปรไฟล์พื้นฐาน โปรไฟล์สตาร์ทอัพถูกใช้โดย ระบบบิลด์เพื่อเพิ่มประสิทธิภาพคลาสและเมธอดที่มี การปรับปรุงเลย์เอาต์ของโค้ดในไฟล์ DEX ของ APK โปรไฟล์สตาร์ทอัพ การเริ่มต้นแอปของคุณเร็วกว่าการใช้โปรไฟล์พื้นฐานเพียงอย่างเดียวถึง 15%

รูปที่ 1 การปรับปรุงตำแหน่งของโค้ดจากเลย์เอาต์ DEX การเพิ่มประสิทธิภาพ

ข้อกำหนด

เราขอแนะนำให้ใช้โปรไฟล์สตาร์ทอัพกับเครื่องมือต่อไปนี้

  • Jetpack Macrobenchmark 1.2.0 ขึ้นไป
  • ปลั๊กอิน Android Gradle 8.2 ขึ้นไป
  • Android Studio Iguana ขึ้นไป

นอกจากนี้ คุณต้องมีการตั้งค่าต่อไปนี้ในแอปด้วย

  • R8 เปิดใช้อยู่ สำหรับบิลด์ที่เผยแพร่ ให้ตั้งค่า isMinifyEnabled = true
  • เปิดใช้การเพิ่มประสิทธิภาพเลย์เอาต์ DEX แล้ว ในบล็อก baselineProfile {} ของ ไฟล์บิลด์ของโมดูลแอป ตั้งค่า dexLayoutOptimization = true

สร้างโปรไฟล์สตาร์ทอัพ

Android Studio จะสร้างโปรไฟล์สตาร์ทอัพพร้อมกับโปรไฟล์พื้นฐานเมื่อคุณ ใช้เทมเพลตตัวสร้างโปรไฟล์พื้นฐานที่เป็นค่าเริ่มต้น

ขั้นตอนทั่วไปในการสร้างและสร้างโปรไฟล์สตาร์ทอัพจะเหมือนกับขั้นตอน เพื่อสร้างโปรไฟล์พื้นฐาน

วิธีเริ่มต้นในการสร้างโปรไฟล์สตาร์ทอัพคือการใช้โปรไฟล์พื้นฐาน เทมเพลตโมดูลโปรแกรมสร้างจากใน Android Studio ซึ่งรวมถึงสตาร์ทอัพ การโต้ตอบที่ประกอบขึ้นเป็นโปรไฟล์สตาร์ทอัพพื้นฐาน วิธีเพิ่มโปรไฟล์สตาร์ทอัพนี้ ที่มีเส้นทางของผู้ใช้ที่สำคัญ (CUJ) มากขึ้น ให้เพิ่ม CUJ สำหรับการเริ่มต้นแอปไปยัง rule ตั้งค่าการบล็อกที่มี includeInStartupProfile เป็น true สำหรับแอปทั่วไป การเปิดตัว MainActivityของแอปก็อาจเพียงพอแล้ว สำหรับแอปที่ซับซ้อนมากขึ้น ให้พิจารณา การเพิ่มจุดแรกเข้าที่พบบ่อยที่สุดลงในแอปของคุณ เช่น การเปิดแอปจาก หน้าจอหลักหรือเปิดเป็น Deep Link

ข้อมูลโค้ดต่อไปนี้แสดงตัวสร้างโปรไฟล์พื้นฐาน (โดยค่าเริ่มต้น BaselineProfileGenerator.kt) ซึ่งรวมถึงการเริ่มแอปจาก หน้าจอหลัก และเข้าสู่ Deep Link Deep Link จะไปยัง ฟีดข่าวของแอป ไม่ใช่หน้าจอหลักของแอป

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

เรียกใช้การตั้งค่าสร้างโปรไฟล์พื้นฐานสำหรับแอป และค้นหา กฎของโปรไฟล์เริ่มต้นที่ src/<variant>/generated/baselineProfiles/startup-prof.txt

ยืนยันการเพิ่มประสิทธิภาพโปรไฟล์เริ่มต้น

หากต้องการยืนยันการเพิ่มประสิทธิภาพเลย์เอาต์ DEX ให้ใช้ Android Studio เพื่อเปิด APK และ ยืนยันชั้นเรียนในไฟล์ DEX ตรวจสอบว่าไม่มี classes.dex หลักอยู่ เติมพื้นโดยสมบูรณ์ หากแอปประกอบด้วยไฟล์ DEX ไฟล์เดียว คุณสามารถตรวจสอบ แอปมีไฟล์ DEX 2 ไฟล์หลังจากเปิดใช้โปรไฟล์สตาร์ทอัพหรือไม่

Android Studio จะเตือนคุณหากชั้นเรียนสตาร์ทอัพไม่อยู่ในไฟล์ DEX เดียว หากต้องการรับข้อมูลการวินิจฉัยซึ่งมีจำนวนเมธอดที่ไม่ใช่สตาร์ทอัพใน คลาสการเริ่มต้นใหม่ ตรวจสอบว่าคอมไพเลอร์ R8 ได้รับการอัปเดตเป็นเวอร์ชันเป็นอย่างน้อย 8.3.36-dev โดยทำการเปลี่ยนแปลงต่อไปนี้ในไฟล์ settings.gradle เมื่อ คุณใช้โปรไฟล์สตาร์ทอัพ:

Kotlin

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

ดึงดูด

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

ตรวจสอบว่าได้เพิ่ม --info หลังวันที่ assembleRelease ในคำสั่งต่อไปนี้เมื่อสร้างด้วย Gradle

./gradlew assembleRelease --info

จากนั้นการวินิจฉัยจะพิมพ์ไปยังเครื่องอ่านบัตร

หากแอปหรือไลบรารีใดๆ อ้างอิงถึง API ที่ใช้น้ำตาลน้อย แพ็กเกจ การติดตั้งใช้งานความเข้ากันได้ของคลาสเหล่านี้จะอยู่ในพารามิเตอร์ DEX ไฟล์ DEX สุดท้ายที่เคลือบน้ำตาลนี้ไม่ได้เข้าร่วมในเลย์เอาต์ DEX การเพิ่มประสิทธิภาพ