สร้างโปรไฟล์สําหรับการเปิดตัวแอปทุกครั้งโดยอัตโนมัติโดยใช้ไลบรารี Jetpack
Macrobenchmark และ
BaselineProfileRule
เราขอแนะนำให้คุณใช้ com.android.tools.build:gradle:8.0.0
ขึ้นไป ซึ่งมาพร้อมกับการปรับปรุงการสร้างเมื่อใช้ Baseline Profiles
ขั้นตอนทั่วไปในการสร้างโปรไฟล์พื้นฐานใหม่มีดังนี้
- ตั้งค่าโมดูลโปรไฟล์พื้นฐาน
- กำหนดการทดสอบ JUnit ที่ช่วยสร้างโปรไฟล์พื้นฐาน
- เพิ่มเส้นทางของผู้ใช้ที่สําคัญ (CUJ) ที่ต้องการเพิ่มประสิทธิภาพ
- สร้างโปรไฟล์พื้นฐาน
หลังจากสร้าง Baseline Profile แล้ว ให้เปรียบเทียบโดยใช้อุปกรณ์จริงเพื่อ วัดการปรับปรุงความเร็ว
สร้างโปรไฟล์พื้นฐานใหม่ด้วย AGP 8.2 ขึ้นไป
วิธีที่ง่ายที่สุดในการสร้าง Baseline Profile ใหม่คือการใช้เทมเพลตโมดูล Baseline Profile ซึ่งพร้อมใช้งานตั้งแต่ Android Studio Iguana และ Android Gradle Plugin (AGP) 8.2 เป็นต้นไป
เทมเพลตโมดูลเครื่องมือสร้าง Baseline Profile ของ Android Studio จะสร้างโมดูลใหม่โดยอัตโนมัติเพื่อสร้างและเปรียบเทียบ Baseline Profile การเรียกใช้เทมเพลตจะสร้างการกำหนดค่าการบิลด์ทั่วไปส่วนใหญ่ การสร้างโปรไฟล์พื้นฐาน และรหัสยืนยัน เทมเพลต สร้างโค้ดเพื่อสร้างและเปรียบเทียบโปรไฟล์พื้นฐานเพื่อวัดการเริ่มต้นแอป
ตั้งค่าโมดูลโปรไฟล์พื้นฐาน
หากต้องการเรียกใช้เทมเพลตโมดูล Baseline Profile ให้ทำตามขั้นตอนต่อไปนี้
- เลือก File > New > New Module
- เลือกเทมเพลตเครื่องมือสร้างโปรไฟล์พื้นฐานในแผงเทมเพลต แล้วกำหนดค่าดังนี้
รูปที่ 1 เทมเพลตโมดูลเครื่องมือสร้างโปรไฟล์พื้นฐาน ช่องในเทมเพลตมีดังนี้
- แอปพลิเคชันเป้าหมาย: กำหนดแอปที่จะสร้างโปรไฟล์พื้นฐาน เมื่อมีโมดูลแอปเพียงโมดูลเดียวในโปรเจ็กต์ จะมีรายการเดียวในรายการนี้
- ชื่อโมดูล: ชื่อที่คุณต้องการตั้งให้กับโมดูล Baseline Profile ที่สร้างขึ้น
- ชื่อแพ็กเกจ: ชื่อแพ็กเกจที่คุณต้องการสำหรับโมดูล Baseline Profile
- ภาษา: คุณต้องการให้โค้ดที่สร้างเป็น Kotlin หรือ Java
- ภาษาการกำหนดค่าบิลด์: เลือกว่าต้องการใช้ Kotlin Script (KTS) หรือ Groovy สำหรับสคริปต์การกำหนดค่าบิลด์
- ใช้อุปกรณ์ที่มีการจัดการจาก Gradle: ไม่ว่าคุณจะใช้อุปกรณ์ที่มีการจัดการจาก Gradle เพื่อทดสอบแอปหรือไม่
- คลิกเสร็จสิ้น ระบบจะสร้างโมดูลใหม่ หากคุณใช้การควบคุมแหล่งที่มา คุณอาจได้รับแจ้งให้เพิ่มไฟล์โมดูลที่สร้างขึ้นใหม่ลงในการควบคุมแหล่งที่มา
กำหนดเครื่องมือสร้างโปรไฟล์พื้นฐาน
โมดูลที่สร้างขึ้นใหม่มีการทดสอบทั้งเพื่อสร้างและเปรียบเทียบ
Baseline Profile และทดสอบเฉพาะการเริ่มต้นแอปขั้นพื้นฐาน เราขอแนะนำให้คุณเพิ่ม
สิ่งเหล่านี้เพื่อรวม CUJ และเวิร์กโฟลว์การเริ่มต้นขั้นสูง ตรวจสอบว่าการทดสอบที่เกี่ยวข้องกับการเริ่มต้นแอปอยู่ในบล็อก rule
ที่ตั้งค่าเป็น includeInStartupProfile
true
ในทางกลับกัน เพื่อประสิทธิภาพสูงสุด ให้ตรวจสอบว่าการทดสอบที่ไม่เกี่ยวข้องกับการเริ่มต้นแอปไม่ได้รวมอยู่ในโปรไฟล์การเริ่มต้น การเพิ่มประสิทธิภาพการเริ่มต้นแอป
ใช้เพื่อกำหนดส่วนพิเศษของ Baseline Profile ที่เรียกว่าStartup Profile
ซึ่งจะช่วยให้ดูแลรักษาได้ง่ายขึ้นหากคุณแยก CUJ เหล่านี้ออกจาก Baseline Profile และโค้ดการวัดประสิทธิภาพที่สร้างขึ้น เพื่อให้ใช้ได้ทั้ง 2 อย่าง ซึ่งหมายความว่าการเปลี่ยนแปลง CUJ จะได้รับการใช้อย่างสม่ำเสมอ
สร้างและติดตั้งโปรไฟล์พื้นฐาน
เทมเพลตโมดูลโปรไฟล์พื้นฐานจะเพิ่มการกำหนดค่าการเรียกใช้ใหม่เพื่อสร้างโปรไฟล์พื้นฐาน หากคุณใช้ Product Flavor Android Studio จะสร้างการกำหนดค่าการเรียกใช้หลายรายการเพื่อให้คุณสร้าง Baseline Profile แยกต่างหากสำหรับแต่ละ Flavor ได้

เมื่อการกำหนดค่าการเรียกใช้ Generate Baseline Profile เสร็จสมบูรณ์ ระบบจะคัดลอก
Baseline Profile ที่สร้างขึ้นไปยัง
src/variant/generated/baselineProfiles/baseline-prof.txt
ไฟล์ในโมดูลที่กำลังสร้างโปรไฟล์ ตัวเลือกตัวแปรคือ
ประเภทบิลด์รุ่นที่เผยแพร่หรือตัวแปรบิลด์ที่เกี่ยวข้องกับประเภทบิลด์รุ่นที่เผยแพร่
โปรไฟล์พื้นฐานที่สร้างขึ้นมีต้นกำเนิดใน build/outputs
เส้นทางแบบเต็มจะขึ้นอยู่กับตัวแปรหรือรสชาติของแอปที่กำลังสร้างโปรไฟล์ และ
ไม่ว่าคุณจะใช้อุปกรณ์ที่ Gradle จัดการหรืออุปกรณ์ที่เชื่อมต่อเพื่อสร้างโปรไฟล์ หากคุณใช้ชื่อที่โค้ดใช้และการกำหนดค่าบิลด์ที่เทมเพลตสร้างขึ้น ระบบจะสร้าง Baseline Profile ในไฟล์ build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt
คุณอาจไม่จำเป็นต้องโต้ตอบกับ Baseline Profile เวอร์ชันที่สร้างขึ้นนี้โดยตรง
เว้นแต่คุณจะคัดลอกไปยังโมดูลเป้าหมายด้วยตนเอง (ไม่แนะนำ)
สร้างโปรไฟล์พื้นฐานใหม่ด้วย AGP 8.1
หากใช้เทมเพลตโมดูล Baseline Profile ไม่ได้ ให้ใช้เทมเพลตโมดูล Macrobenchmark และปลั๊กอิน Gradle ของ Baseline Profile เพื่อสร้าง Baseline Profile ใหม่ เราขอแนะนำให้คุณใช้เครื่องมือเหล่านี้โดยเริ่มจาก Android Studio Giraffe และ AGP 8.1
ขั้นตอนในการสร้าง Baseline Profile ใหม่โดยใช้เทมเพลตโมดูล Macrobenchmark และปลั๊กอิน Gradle ของ Baseline Profile มีดังนี้
- ตั้งค่า โมดูล Macrobenchmark ในโปรเจ็กต์ Gradle
- กำหนดคลาสใหม่ชื่อ
BaselineProfileGenerator
ดังนี้class BaselineProfileGenerator { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun startup() = baselineProfileRule.collect( packageName = "com.example.app", profileBlock = { startActivityAndWait() } ) }
โดยเครื่องมือสร้างนี้อาจมีการโต้ตอบกับแอปนอกเหนือจากการเริ่มต้นแอป ซึ่งช่วยให้คุณเพิ่มประสิทธิภาพรันไทม์ของแอปได้ เช่น การเลื่อนรายการ การเรียกใช้ภาพเคลื่อนไหว และการไปยังส่วนต่างๆ ภายใน
Activity
ดู ตัวอย่างอื่นๆ ของการทดสอบที่ใช้@BaselineProfileRule
เพื่อ ปรับปรุงเส้นทางของผู้ใช้ที่สําคัญ เพิ่มปลั๊กอิน Gradle ของ Baseline Profile (
libs.plugins.androidx.baselineprofile
) ปลั๊กอินนี้จะช่วยให้สร้าง Baseline Profile และดูแลรักษาได้ง่ายขึ้นในอนาคตหากต้องการสร้าง Baseline Profile ให้เรียกใช้
:app:generateBaselineProfile
หรือ:app:generateVariantBaselineProfile
งาน Gradle ใน เทอร์มินัลเรียกใช้เครื่องมือสร้างเป็นการทดสอบที่มีการวัดประสิทธิภาพ ในอุปกรณ์จริงที่รูท โปรแกรมจำลอง หรืออุปกรณ์ที่มีการจัดการจาก Gradle หากใช้อุปกรณ์ที่มีการจัดการ Gradle ให้ตั้งค่า
aosp
เป็นsystemImageSource
เนื่องจากคุณต้องมีสิทธิ์เข้าถึงระดับรูท สำหรับเครื่องมือสร้าง Baseline Profileเมื่อสิ้นสุดงานการสร้าง ระบบจะคัดลอก Baseline Profile ไปยัง
app/src/variant/generated/baselineProfiles
สร้างโปรไฟล์พื้นฐานใหม่โดยไม่มีเทมเพลต
เราขอแนะนำให้สร้าง Baseline Profile โดยใช้ Android Studio เทมเพลตโมดูล Baseline Profile (แนะนำ) หรือเทมเพลต Macrobenchmark แต่คุณก็ ใช้ปลั๊กอิน Gradle ของ Baseline Profile ด้วยตัวเองได้เช่นกัน ดูข้อมูลเพิ่มเติมเกี่ยวกับปลั๊กอิน Gradle ของ Baseline Profile ได้ที่ กำหนดค่าการสร้าง Baseline Profile
วิธีสร้างโปรไฟล์พื้นฐานโดยใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐาน โดยตรงมีดังนี้
- สร้างโมดูล
com.android.test
ใหม่ เช่น:baseline-profile
กำหนดค่าไฟล์
build.gradle.kts
สำหรับ:baseline-profile
ดังนี้- ใช้ปลั๊กอิน
androidx.baselineprofile
- ตรวจสอบว่า
targetProjectPath
ชี้ไปยังโมดูล:app
- เพิ่มอุปกรณ์ที่มีการจัดการจาก Gradle (GMD) หากต้องการ
ในตัวอย่างต่อไปนี้คือ
pixel6Api31
หากไม่ได้ระบุไว้ ปลั๊กอินจะใช้อุปกรณ์ที่เชื่อมต่อ ไม่ว่าจะเป็นอุปกรณ์จำลองหรืออุปกรณ์จริง - ใช้การกำหนดค่าที่ต้องการตามที่แสดงใน ตัวอย่างต่อไปนี้
Kotlin
plugins { id("com.android.test") id("androidx.baselineprofile") } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath = ":app" // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices += "pixel6Api31" // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices = false }
Groovy
plugins { id 'com.android.test' id 'androidx.baselineprofile' } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath ':app' // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device 'Pixel 6' apiLevel 31 systemImageSource 'aosp' } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices ['pixel6Api31'] // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices false }
- ใช้ปลั๊กอิน
สร้างการทดสอบโปรไฟล์พื้นฐานใน
:baseline-profile
โมดูลทดสอบ ตัวอย่างต่อไปนี้เป็นการทดสอบที่เริ่มแอปและรอ ให้แอปไม่ได้ใช้งานKotlin
class BaselineProfileGenerator { @get:Rule val baselineRule = BaselineProfileRule() @Test fun startupBaselineProfile() { baselineRule.collect("com.myapp") { startActivityAndWait() } } }
Java
public class BaselineProfileGenerator { @Rule Public BaselineProfileRule baselineRule = new BaselineProfileRule(); @Test Public void startupBaselineProfile() { baselineRule.collect( "com.myapp", (scope -> { scope.startActivityAndWait(); Return Unit.INSTANCE; }) ) } }
อัปเดตไฟล์
build.gradle.kts
ในโมดูลแอป เช่น:app
- ใช้ปลั๊กอิน
androidx.baselineprofile
- เพิ่มทรัพยากร Dependency ของ
baselineProfile
ไปยังโมดูล:baseline-profile
Kotlin
plugins { id("com.android.application") id("androidx.baselineprofile") } android { // There are no changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile(project(":baseline-profile")) }
Groovy
plugins { id 'com.android.application' id 'androidx.baselineprofile' } android { // No changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile ':baseline-profile' }
- ใช้ปลั๊กอิน
สร้างโปรไฟล์โดยเรียกใช้ทาสก์
:app:generateBaselineProfile
หรือ:app:generateVariantBaselineProfile
Gradleเมื่อสิ้นสุดงานการสร้าง ระบบจะคัดลอก Baseline Profile ไปยัง
app/src/variant/generated/baselineProfiles
สร้างโปรไฟล์พื้นฐานใหม่ด้วย AGP 7.3-7.4
คุณสร้าง Baseline Profile ด้วย AGP 7.3-7.4 ได้ แต่เราขอแนะนำอย่างยิ่งให้ อัปเกรดเป็น AGP 8.1 ขึ้นไป เพื่อให้คุณใช้ปลั๊กอิน Gradle ของ Baseline Profile และฟีเจอร์ล่าสุดได้
หากต้องการสร้าง Baseline Profile ด้วย AGP 7.3-7.4 ขั้นตอนจะเหมือนกับขั้นตอนสำหรับ AGP 8.1 โดยมีข้อยกเว้นดังนี้
- อย่าเพิ่มปลั๊กอิน Gradle ของ Baseline Profile
- หากต้องการสร้าง Baseline Profile ให้เรียกใช้งาน Gradle Task
./gradlew [emulator name][flavor][build type]AndroidTest
เช่น./gradlew :benchmark:pixel6Api31BenchmarkAndroidTest
- คุณต้องใช้กฎของ Baseline Profile ที่สร้างขึ้นกับโค้ดด้วยตนเอง
ใช้กฎที่สร้างขึ้นด้วยตนเอง
ตัวสร้างโปรไฟล์พื้นฐานจะสร้างไฟล์ข้อความรูปแบบที่มนุษย์อ่านได้ (HRF) ในอุปกรณ์และคัดลอกไปยังเครื่องโฮสต์ หากต้องการใช้โปรไฟล์ที่สร้างขึ้นกับโค้ด ให้ทำตามขั้นตอนต่อไปนี้
ค้นหาไฟล์ HRF ในโฟลเดอร์บิลด์ของโมดูลที่คุณสร้างโปรไฟล์ใน
[module]/build/outputs/managed_device_android_test_additional_output/[device]
โปรไฟล์จะเป็นไปตามรูปแบบการตั้งชื่อ
[class name]-[test method name]-baseline-prof.txt
ซึ่งมีลักษณะดังนี้BaselineProfileGenerator-startup-baseline-prof.txt
คัดลอกโปรไฟล์ที่สร้างขึ้นไปยัง
src/main/
และเปลี่ยนชื่อไฟล์เป็นbaseline-prof.txt
เพิ่มการอ้างอิงไปยังไลบรารี ProfileInstaller ในไฟล์
build.gradle.kts
ของแอปเพื่อเปิดใช้การคอมไพล์ Baseline Profile ในเครื่อง ในกรณีที่ไม่มี Cloud Profiles นี่เป็น วิธีเดียวในการโหลดโปรไฟล์พื้นฐานจากแหล่งที่ไม่รู้จักในเครื่องdependencies { implementation("androidx.profileinstaller:profileinstaller:1.4.1") }
สร้างแอปเวอร์ชันที่ใช้งานจริงขณะที่กฎ HRF ที่ใช้จะ คอมไพล์เป็นรูปแบบไบนารีและรวมอยู่ใน APK หรือ AAB จากนั้นเผยแพร่ แอปตามปกติ
เปรียบเทียบโปรไฟล์พื้นฐาน
หากต้องการเปรียบเทียบโปรไฟล์พื้นฐาน ให้สร้างการกำหนดค่าการเรียกใช้การทดสอบที่มีการวัดประสิทธิภาพของ Android ใหม่
จากการดำเนินการใน Gutter ซึ่งจะเรียกใช้การเปรียบเทียบที่กำหนดไว้ในไฟล์ StartupBenchmarks.kt
หรือ StartupBencharks.java
ดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบเปรียบเทียบได้ที่สร้างคลาส Macrobenchmark
และวัดผลอัตโนมัติด้วยไลบรารี Macrobenchmark

เมื่อเรียกใช้ภายใน Android Studio เอาต์พุตการสร้างจะมีรายละเอียดเกี่ยวกับการปรับปรุงความเร็วที่ Baseline Profile มอบให้ ดังนี้
StartupBenchmarks_startupCompilationBaselineProfiles timeToInitialDisplayMs min 161.8, median 178.9, max 194.6 StartupBenchmarks_startupCompilationNone timeToInitialDisplayMs min 184.7, median 196.9, max 202.9
บันทึกเส้นทางโค้ดที่จำเป็นทั้งหมด
เมตริกสำคัญ 2 รายการสำหรับการวัดเวลาเริ่มต้นของแอปมีดังนี้
- เวลาที่ใช้ในการเริ่มแสดงผล (TTID)
- เวลาที่ใช้ในการแสดงเฟรมแรกของ UI แอปพลิเคชัน
- เวลาที่ใช้ในการแสดงผลครบถ้วน (TTFD)
- TTID บวกกับเวลาในการแสดงเนื้อหาที่โหลดแบบไม่พร้อมกันหลังจากที่แสดงเฟรมแรก
ระบบจะรายงาน TTFD เมื่อเรียกใช้เมธอด
reportFullyDrawn()
ของ
ComponentActivity
หากไม่มีการเรียกใช้ reportFullyDrawn()
ระบบจะรายงาน TTID แทน
คุณอาจต้องเลื่อนเวลาเมื่อมีการเรียกใช้ reportFullyDrawn()
จนกว่าการโหลดแบบไม่พร้อมกันจะเสร็จสมบูรณ์ เช่น หาก UI มีรายการแบบไดนามิก เช่น RecyclerView
หรือ lazy
list ระบบอาจป้อนข้อมูลในรายการโดยใช้งานในเบื้องหลังซึ่งจะเสร็จสมบูรณ์หลังจากวาดรายการเป็นครั้งแรก และหลังจากที่ทำเครื่องหมาย UI ว่าวาดเสร็จสมบูรณ์แล้ว ในกรณีดังกล่าว โค้ดที่ทำงานหลังจากที่ UI ไปถึง
สถานะที่วาดเสร็จสมบูรณ์แล้วจะไม่รวมอยู่ใน Baseline Profile
หากต้องการรวมการสร้างรายการเป็นส่วนหนึ่งของโปรไฟล์พื้นฐาน ให้รับ
FullyDrawnReporter
โดยใช้
getFullyDrawnReporter()
แล้วเพิ่มผู้รายงานลงในโค้ดแอป ปล่อยผู้รายงานเมื่อ
งานที่ทำงานเบื้องหลังป้อนข้อมูลในรายการเสร็จสิ้น FullyDrawnReporter
จะไม่เรียกใช้เมธอด reportFullyDrawn()
จนกว่าจะปล่อยรีพอร์ตเตอร์ทั้งหมด การทำเช่นนี้จะทำให้ Baseline Profile มีเส้นทางโค้ดที่จำเป็นในการสร้างรายการ
การดำเนินการนี้จะไม่เปลี่ยนลักษณะการทำงานของแอปสำหรับผู้ใช้ แต่จะช่วยให้ Baseline
Profile มีเส้นทางโค้ดที่จำเป็นทั้งหมด
หากแอปใช้ Jetpack Compose ให้ใช้ API ต่อไปนี้เพื่อระบุสถานะที่วาดเสร็จสมบูรณ์
ReportDrawn
ระบุว่า Composable พร้อมสำหรับการโต้ตอบทันทีReportDrawnWhen
ต้องมีเพรดิเคต เช่นlist.count > 0
เพื่อระบุเวลาที่ Composable พร้อมสำหรับการโต้ตอบReportDrawnAfter
ใช้วิธีการระงับที่เมื่อเสร็จสมบูรณ์แล้ว จะบ่งบอกว่า Composable พร้อมสำหรับการโต้ตอบ
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- บันทึกเมตริก Macrobenchmark
- เขียน Macrobenchmark
- ไลบรารี JankStats