โปรไฟล์เริ่มต้นเป็นชุดย่อยของโปรไฟล์พื้นฐาน โปรไฟล์สตาร์ทอัพถูกใช้โดย ระบบบิลด์เพื่อเพิ่มประสิทธิภาพคลาสและเมธอดที่มี การปรับปรุงเลย์เอาต์ของโค้ดในไฟล์ DEX ของ APK โปรไฟล์สตาร์ทอัพ การเริ่มต้นแอปของคุณเร็วกว่าการใช้โปรไฟล์พื้นฐานเพียงอย่างเดียวถึง 15%
![](https://developer.android.google.cn/static/topic/performance/images/dex-layout-optimizations.png?authuser=9&hl=th)
ข้อกำหนด
เราขอแนะนำให้ใช้โปรไฟล์สตาร์ทอัพกับเครื่องมือต่อไปนี้
- 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 การเพิ่มประสิทธิภาพ
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- โปรไฟล์พื้นฐาน {:#baseline-profile}
- การเขียนเกณฑ์เปรียบเทียบขนาดเล็ก