ทำความเข้าใจข้อกำหนด การสร้าง และแนวทางปฏิบัติแนะนำ keywords_public: โปรไฟล์การเริ่มต้น, โปรไฟล์พื้นฐาน, ประสิทธิภาพของแอป, การเพิ่มประสิทธิภาพ APK, เลย์เอาต์ DEX, Android Studio, Jetpack Macrobenchmark
โปรไฟล์ Startup เป็นกลุ่มย่อยของโปรไฟล์พื้นฐาน ระบบบิลด์ใช้โปรไฟล์การเริ่มต้นเพื่อเพิ่มประสิทธิภาพคลาสและเมธอดที่มีอยู่ต่อไปโดยการปรับปรุงเลย์เอาต์ของโค้ดในไฟล์ DEX ของ APK โดยปกติแล้วการเริ่มต้นแอปจะเร็วขึ้น 15-30% เมื่อใช้โปรไฟล์การเริ่มต้น เมื่อเทียบกับการใช้โปรไฟล์พื้นฐาน เพียงอย่างเดียว
ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมของโปรไฟล์สตาร์ทอัพ
ข้อกำหนด
เราขอแนะนำให้ใช้โปรไฟล์ Startup กับเครื่องมือต่อไปนี้
- 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
ในบล็อก
baselineProfile {}ของไฟล์บิลด์ของโมดูลแอป ให้ตั้งค่าdexLayoutOptimization = true
สร้างโปรไฟล์สตาร์ทอัป
Android Studio จะสร้างโปรไฟล์เริ่มต้นควบคู่ไปกับโปรไฟล์พื้นฐานเมื่อคุณใช้เทมเพลตเครื่องมือสร้างโปรไฟล์พื้นฐานเริ่มต้น
ขั้นตอนทั่วไปในการสร้างและสร้างโปรไฟล์ Startup จะเหมือนกับขั้นตอนในการสร้างโปรไฟล์พื้นฐาน
วิธีเริ่มต้นในการสร้างโปรไฟล์ Startup คือการใช้เทมเพลตโมดูล Baseline Profile
Generator จากภายใน Android Studio ซึ่งรวมถึงการโต้ตอบในการเริ่มต้นใช้งาน
ที่สร้างโปรไฟล์ Startup พื้นฐาน หากต้องการเพิ่มเส้นทางของผู้ใช้ที่สําคัญ (CUJ) ลงในโปรไฟล์สตาร์ทอัพนี้
ให้เพิ่ม CUJ การเริ่มต้นแอปของคุณลงในบล็อก rule
โดยตั้งค่า includeInStartupProfile เป็น true สำหรับแอปที่เรียบง่าย การเปิดตัวMainActivityของแอปอาจเพียงพอ สำหรับแอปที่ซับซ้อนมากขึ้น ให้พิจารณา
เพิ่มจุดแรกเข้าที่พบบ่อยที่สุดในแอป เช่น การเริ่มแอปจาก
หน้าจอหลักหรือการเปิดใช้ลิงก์ในรายละเอียด
ข้อมูลโค้ดต่อไปนี้แสดงเครื่องมือสร้าง Baseline Profile (โดยค่าเริ่มต้นคือไฟล์ 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 จะใช้กฎเหล่านี้โดยอัตโนมัติ
ข้อควรพิจารณาในการสร้างโปรไฟล์สตาร์ทอัป
หากต้องการตัดสินใจว่าจะครอบคลุมเส้นทางของผู้ใช้ใดเมื่อสร้างโปรไฟล์สตาร์ทอัป ให้พิจารณาว่าผู้ใช้ส่วนใหญ่เริ่มสมัครจากที่ใด โดยปกติแล้วจะมาจากตัวเรียกใช้และ หลังจากที่ผู้ใช้เข้าสู่ระบบแล้ว นอกจากนี้ยังเป็นโปรไฟล์ระดับพื้นฐานที่ง่ายที่สุด เส้นทาง
หลังจากครอบคลุม Use Case แรกแล้ว ให้ทําตาม Funnel ของผู้ใช้สําหรับการเริ่มต้นแอป ในหลายกรณี Funnel การเริ่มต้นแอปจะเป็นไปตามรายการต่อไปนี้
- กิจกรรมของ Launcher หลัก
- การแจ้งเตือนที่ทริกเกอร์การเริ่มต้นแอป
- กิจกรรมตัวเรียกใช้ที่ไม่บังคับ
ทำตามรายการนี้จากด้านบนและหยุดก่อนที่ classes.dex จะเต็ม หากต้องการครอบคลุมเส้นทางอื่นๆ ในภายหลัง ให้ย้ายโค้ดออกจากเส้นทางการเริ่มต้นและเพิ่มเส้นทางอื่นๆ หากต้องการ
ย้ายโค้ดออกจากเส้นทางการเริ่มต้น ให้ตรวจสอบการติดตาม Perfetto ระหว่างการเริ่มต้นแอป
และมองหาการดำเนินการที่ใช้เวลานาน นอกจากนี้ คุณยังใช้ macrobenchmark
โดยเปิดใช้การติดตามเมธอดเพื่อให้เห็นภาพรวมที่สมบูรณ์และอัตโนมัติของเมธอด
ที่เรียกใช้ระหว่างการเริ่มต้นแอปได้ด้วย
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- โปรไฟล์พื้นฐาน {:#baseline-profiles}
- การเขียน Microbenchmark