โปรไฟล์การเริ่มต้นเป็นกลุ่มย่อยของโปรไฟล์พื้นฐาน ระบบบิลด์ใช้โปรไฟล์การเริ่มต้นเพื่อเพิ่มประสิทธิภาพคลาสและเมธอดที่โปรไฟล์ดังกล่าวมีอยู่โดยการปรับปรุงเลย์เอาต์ของโค้ดในไฟล์ 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 การเริ่มต้นแอปจะเป็นไปตามรายการต่อไปนี้
- กิจกรรม Launcher หลัก
- การแจ้งเตือนที่เรียกให้แอปเริ่มต้น
- กิจกรรม Launcher ที่ไม่บังคับ
ทำตามรายการนี้จากด้านบนและหยุดก่อนที่ classes.dex จะเต็ม หากต้องการครอบคลุมเส้นทางเพิ่มเติมในภายหลัง ให้ย้ายโค้ดออกจากเส้นทางการเริ่มต้นแล้วเพิ่มเส้นทางเพิ่มเติม หากต้องการย้ายโค้ดออกจากเส้นทางการเริ่มต้น ให้ตรวจสอบร่องรอย Perfetto ระหว่างการเริ่มต้นแอป แล้วมองหาการดำเนินการที่ใช้เวลานาน นอกจากนี้ คุณยังใช้ Macrobenchmark
ที่เปิดใช้การติดตามเมธอดเพื่อดูการเรียกเมธอดทั้งหมดระหว่างการเริ่มต้นแอปได้ด้วย
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- โปรไฟล์พื้นฐาน {:#baseline-profiles}
- การเขียน Microbenchmark