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

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

ดูข้อมูลเพิ่มเติมได้ที่ ภาพรวมของโปรไฟล์การเริ่มต้น

ข้อกำหนด

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

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

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

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

สร้างโปรไฟล์การเริ่มต้น

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
        ) {
            uiAutomator {
                // Launch directly into the NEWS_FEED using startActivityIntent
                startIntent(Intent().apply {
                    setPackage(packageName)
                    setAction("com.example.app.NEWS_FEED")
                })
        }
    }
}

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

ข้อควรพิจารณาในการสร้างโปรไฟล์การเริ่มต้น

ในการตัดสินใจว่าจะครอบคลุมเส้นทางของผู้ใช้ใดบ้างเมื่อสร้างโปรไฟล์การเริ่มต้น ให้พิจารณาว่าผู้ใช้ส่วนใหญ่เริ่มแอปพลิเคชันจากที่ใด โดยปกติแล้วจะเริ่มจาก Launcher และหลังจากเข้าสู่ระบบแล้ว ซึ่งเป็นเส้นทางโปรไฟล์พื้นฐานที่ง่ายที่สุดด้วย

หลังจากครอบคลุม Use Case แรกแล้ว ให้ทำตาม Funnel ของผู้ใช้สำหรับการเริ่มต้นแอป ในหลายกรณี Funnel การเริ่มต้นแอปจะเป็นไปตามรายการต่อไปนี้

  1. กิจกรรม Launcher หลัก
  2. การแจ้งเตือนที่เรียกให้แอปเริ่มต้น
  3. กิจกรรม Launcher ที่ไม่บังคับ

ทำตามรายการนี้จากด้านบนและหยุดก่อนที่ classes.dex จะเต็ม หากต้องการครอบคลุมเส้นทางเพิ่มเติมในภายหลัง ให้ย้ายโค้ดออกจากเส้นทางการเริ่มต้นแล้วเพิ่มเส้นทางเพิ่มเติม หากต้องการย้ายโค้ดออกจากเส้นทางการเริ่มต้น ให้ตรวจสอบร่องรอย Perfetto ระหว่างการเริ่มต้นแอป แล้วมองหาการดำเนินการที่ใช้เวลานาน นอกจากนี้ คุณยังใช้ Macrobenchmark ที่เปิดใช้การติดตามเมธอดเพื่อดูการเรียกเมธอดทั้งหมดระหว่างการเริ่มต้นแอปได้ด้วย