Baseline Profile ช่วยปรับปรุงความเร็วในการเรียกใช้โค้ดได้ประมาณ 30% จากการเปิดใช้งานครั้งแรกโดยหลีกเลี่ยงขั้นตอนการตีความและการคอมไพล์ Just-In-Time (JIT) สำหรับเส้นทางโค้ดที่รวมไว้
การจัดส่งโปรไฟล์พื้นฐานในแอปหรือไลบรารีจะช่วยให้ Android Runtime (ART) สามารถเพิ่มประสิทธิภาพเส้นทางโค้ดที่ระบุผ่านการคอมไพล์ Ahead-of-Time (AOT) ซึ่งจะช่วยปรับปรุงประสิทธิภาพสำหรับผู้ใช้ใหม่ทุกคนและการอัปเดตแอปทุกครั้ง การเพิ่มประสิทธิภาพที่อิงตามโปรไฟล์ (PGO) นี้ช่วยให้แอปเพิ่มประสิทธิภาพการเริ่มต้น ลดความกระตุกในการโต้ตอบ และปรับปรุงประสิทธิภาพรันไทม์โดยรวมสำหรับผู้ใช้ตั้งแต่การเปิดใช้งานครั้งแรก
การปรับปรุงประสิทธิภาพเหล่านี้ส่งผลโดยตรงต่อเมตริกทางธุรกิจที่ดีขึ้น เช่น การคงผู้ใช้ไว้ ธุรกรรม และคะแนน อ่านข้อมูลเพิ่มเติมเกี่ยวกับผลกระทบของประสิทธิภาพที่มีต่อเมตริกทางธุรกิจได้ในเรื่องราวจาก Josh, Lyft, TikTok และ Zomato
ประโยชน์ของโปรไฟล์พื้นฐาน
Baseline Profile ช่วยให้คอมไพล์โค้ดล่วงหน้าในการโต้ตอบที่สำคัญของผู้ใช้ เช่น การเริ่มต้นแอป การไปยังส่วนต่างๆ ระหว่างหน้าจอ หรือการเลื่อนดูเนื้อหา ซึ่งจะช่วยให้แอปทำงานได้ราบรื่นขึ้นตั้งแต่ครั้งแรกที่เรียกใช้ การเพิ่มความเร็วและการตอบสนองของแอปด้วยโปรไฟล์พื้นฐานจะช่วยเพิ่มจำนวนผู้ใช้ที่ใช้งานอยู่รายวันและอัตราการกลับมาใช้งานโดยเฉลี่ยที่สูงขึ้น
Baseline Profile ช่วยแนะนําการเพิ่มประสิทธิภาพนอกเหนือจากการเริ่มต้นแอป โดยให้การโต้ตอบของผู้ใช้ทั่วไปที่ปรับปรุงรันไทม์ของแอปตั้งแต่การเปิดตัวครั้งแรก การคอมไพล์ AOT ที่มีคำแนะนำไม่ได้อาศัยอุปกรณ์ของผู้ใช้ และสามารถทำได้ 1 ครั้งต่อรุ่นในคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์แทนอุปกรณ์เคลื่อนที่ การจัดส่งรุ่นที่มีโปรไฟล์พื้นฐานจะช่วยให้การเพิ่มประสิทธิภาพแอปพร้อมใช้งานได้เร็วกว่าการใช้โปรไฟล์ระบบคลาวด์เพียงอย่างเดียว
เมื่อไม่ได้ใช้โปรไฟล์พื้นฐาน โค้ดทั้งหมดของแอปจะได้รับการคอมไพล์ JIT ในหน่วยความจำหลังจากที่ได้รับการตีความ หรือเขียนลงในไฟล์ odex ในเบื้องหลังเมื่ออุปกรณ์ไม่มีการใช้งาน หลังจากติดตั้งหรืออัปเดตแอป ผู้ใช้จะได้รับประสบการณ์การใช้งานที่ไม่ดีนักตั้งแต่ครั้งแรกที่เรียกใช้แอปจนกว่าเส้นทางโค้ดใหม่จะได้รับการเพิ่มประสิทธิภาพ
แอปจำนวนมากมีประสิทธิภาพเพิ่มขึ้นประมาณ 30% หลังจากเพิ่มประสิทธิภาพ
โปรไฟล์เริ่มต้น
โปรไฟล์การเริ่มต้นทำงานคล้ายกับโปรไฟล์พื้นฐาน แต่จะใช้ในเวลาคอมไพล์เพื่อเพิ่มประสิทธิภาพเลย์เอาต์ DEX เพื่อให้เริ่มต้นทำงานได้เร็วขึ้น แทนที่จะใช้เพื่อเพิ่มประสิทธิภาพในอุปกรณ์ ดูข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างโปรไฟล์การเริ่มต้นระบบกับโปรไฟล์พื้นฐานได้ที่เปรียบเทียบโปรไฟล์พื้นฐานกับโปรไฟล์การเริ่มต้นระบบ ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพเลย์เอาต์ DEX ได้ที่การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้นระบบ
เริ่มต้นใช้งาน
หากต้องการเริ่มเพิ่มประสิทธิภาพในแอปที่มีอยู่ โปรดดูหัวข้อสร้างโปรไฟล์พื้นฐาน
บิลด์โปรไฟล์เทียบกับบิลด์ที่เผยแพร่
คุณต้องเข้าใจความแตกต่างในการกำหนดค่าบิลด์ที่จำเป็นเมื่อสร้างไฟล์โปรไฟล์ Baseline และโปรไฟล์การเริ่มต้นระบบ (เช่น baseline-prof.txt และ startup-prof.txt) เทียบกับเมื่อสร้าง APK เวอร์ชันสุดท้ายที่ใช้โปรไฟล์เหล่านี้
เมื่อสร้างไฟล์โปรไฟล์ (เช่น benchmark)
เมื่อบันทึกโปรไฟล์พื้นฐานด้วยการทดสอบ คุณต้องไม่สร้างความสับสนให้กับแอป
เพื่อให้แน่ใจว่ากฎโปรไฟล์ที่สร้างขึ้นตรงกับซิกเนเจอร์เมธอดของโค้ดอย่างถูกต้อง คุณต้องปิดการสร้างความสับสนและการเพิ่มประสิทธิภาพ (R8) สำหรับตัวแปรบิลด์ที่ใช้ในการสร้างโปรไฟล์ ตัวแปรนี้ต้องแตกต่างจากตัวแปรบิลด์ที่เผยแพร่ ซึ่งเปิดใช้การสร้างความสับสนและการเพิ่มประสิทธิภาพ ซึ่งทำได้โดยตั้งค่า isMinifyEnabled = false สำหรับตัวแปรบิลด์การสร้างโปรไฟล์ หากไม่ได้ใช้ปลั๊กอิน Baseline Profile Gradle คุณควรตรวจสอบว่าได้ใช้ -dontobfuscate และ -dontoptimize ด้วย ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานจะจัดการการกำหนดค่านี้ให้คุณโดยอัตโนมัติ
คุณสามารถยืนยันว่าแอปไม่ได้ถูกสร้างความสับสนในระหว่างการสร้างโปรไฟล์โดยเปิดไฟล์โปรไฟล์ข้อความที่สร้างขึ้น (เช่น baseline-prof.txt) และตรวจสอบว่าชื่อคลาสและเมธอดไม่ได้ถูกสร้างความสับสน
เมื่อสร้าง APK รุ่นสุดท้าย ให้ทำดังนี้
เมื่อสร้างแอปรุ่นที่เผยแพร่ แอปของคุณควรได้รับการสร้างความสับสน บิลด์ที่เผยแพร่ต้องมี isMinifyEnabled = true เพื่อรับประโยชน์จากการปรับให้ยากต่อการอ่าน (Obfuscation) การลดขนาด และการเพิ่มประสิทธิภาพ R8 จะเขียนกฎใหม่โดยอัตโนมัติจากไฟล์โปรไฟล์ที่ไม่ได้ผ่านการสร้างความสับสนเพื่อให้ตรงกับโค้ดที่ผ่านการสร้างความสับสนและเพิ่มประสิทธิภาพใน APK เวอร์ชันที่เผยแพร่ บิลด์จะใช้ประโยชน์จากไฟล์ข้อความที่ไม่ได้ผ่านการสร้างความสับสนโดยการแปลงกฎอย่างถูกต้อง
หากต้องการให้การเพิ่มประสิทธิภาพเลย์เอาต์ DEX (ขับเคลื่อนโดยโปรไฟล์การเริ่มต้นระบบ) ทำงาน แอปที่เผยแพร่ต้องมีการสร้างความสับสนและใช้ R8 โดยเปิดใช้การเพิ่มประสิทธิภาพทั้งหมด
เวิร์กโฟลว์ขั้นสูง (ไม่ใช่ Gradle)
หากคุณใช้เวิร์กโฟลว์ขั้นสูงที่ไม่ใช่ Gradle (เช่น Bazel, Buck หรือไปป์ไลน์การทำงานอัตโนมัติ CI ที่กำหนดเอง) เพื่อสร้างโปรไฟล์ คุณยังคงต้องปฏิบัติตามหลักการเดียวกัน แอปของคุณต้องไม่ถูกสร้างความสับสนหรือเพิ่มประสิทธิภาพเมื่อบันทึกโปรไฟล์ อย่างไรก็ตาม เมื่อสร้างแอปรุ่นที่เผยแพร่ คุณต้องสร้างความสับสนให้กับแอป R8 จะประมวลผลไฟล์กฎข้อความที่ไม่ได้ผ่านการสร้างความสับสน และเปลี่ยนรูปแบบกฎอย่างถูกต้องเพื่อนำไปใช้กับแอปเวอร์ชันที่เผยแพร่ซึ่งผ่านการสร้างความสับสน
เวอร์ชันเสถียรขั้นต่ำที่แนะนำ
เชนทรัพยากร Dependency มีเวอร์ชันที่เผยแพร่แบบเสถียรและเวอร์ชันที่เผยแพร่เพื่อการพัฒนา หากต้องการสร้างและติดตั้งโปรไฟล์พื้นฐาน ให้ใช้ปลั๊กอิน Android Gradle, ไลบรารี Macrobenchmark และ Profile Installer เวอร์ชันที่รองรับต่อไปนี้หรือเวอร์ชันที่สูงกว่า ต้องใช้ทรัพยากร Dependency เหล่านี้ในเวลาที่ต่างกันและทำงานร่วมกันเป็น Toolchain เพื่อเปิดใช้ Baseline Profile ที่เหมาะสมที่สุด
- ปลั๊กอิน Android Gradle:
com.android.tools.build:8.0.0 - ไลบรารี Macrobenchmark:
androidx.benchmark:benchmark-macro-junit4:1.5.0 - Profile Installer:
androidx.profileinstaller:profileinstaller:1.4.1
เราขอแนะนำให้ใช้ AGP เวอร์ชันล่าสุดเพื่อสร้างและจัดการโปรไฟล์พื้นฐาน ฟังก์ชันหลักที่มาพร้อมกับ AGP เวอร์ชันต่างๆ มีดังนี้
| เวอร์ชัน AGP | ฟีเจอร์ |
|---|---|
| 9.1 |
การรองรับไดเรกทอรีชุดซอร์สแบบเต็ม (โมดูลไลบรารี):
นอกจากไดเรกทอรีที่รับรู้ตัวแปรแล้ว คุณยังประกาศไฟล์ต้นฉบับของโปรไฟล์พื้นฐานหลายไฟล์ที่มีชื่อตามใจชอบได้ เช่น src/free/generated/baselineProfiles/baseline-prof1.txt สำหรับโมดูลไลบรารีและโมดูลแอป
|
| 8.4 | การติดตั้งแอปในเครื่องของบิลด์ที่แก้ไขข้อบกพร่องไม่ได้โดยใช้เครื่องมือบรรทัดคำสั่ง Wrapper ของ Gradle หรือ Android Studio จะติดตั้งโปรไฟล์พื้นฐาน เพื่อให้ประสิทธิภาพของบิลด์ที่เผยแพร่ในเครื่องตรงกับการใช้งานจริงมากขึ้น การอัปเดตนี้จะไม่ส่งผลต่อประสิทธิภาพเวอร์ชันที่ใช้งานจริงของโปรไฟล์พื้นฐาน |
| 8.3 |
|
| 8.2 |
|
| 8.0 | เวอร์ชันขั้นต่ำที่แนะนำ: ใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานเพื่อสร้างโปรไฟล์พื้นฐานด้วยงาน Gradle รายการเดียว
|
| 7.4 |
เวอร์ชันขั้นต่ำที่รองรับ: แอปสามารถใช้โปรไฟล์พื้นฐานจากไลบรารี และระบุโปรไฟล์พื้นฐานของตนเองในไฟล์ src/main/baseline-prof.txt
|
การตั้งค่าแหล่งที่มาของโปรไฟล์ที่คำนึงถึงตัวแปร
เมื่อใช้ปลั๊กอิน Android Gradle (AGP) เวอร์ชัน 8.0 สำหรับแอปพลิเคชันและ AGP เวอร์ชัน 8.3 สำหรับไลบรารี คุณสามารถวางกฎโปรไฟล์พื้นฐานไว้ในไดเรกทอรีชุดซอร์สที่เฉพาะเจาะจงได้ ซึ่งจะช่วยให้คุณก้าวข้ามข้อจำกัดของเส้นทางเดียวที่ตายตัว (เช่น src/main/baseline-prof.txt) และเปิดใช้ไฟล์หลายไฟล์ได้
ซึ่งจะช่วยให้รองรับตัวแปรได้อย่างมีประสิทธิภาพ โดยคุณสามารถกำหนดโปรไฟล์พื้นฐานที่แตกต่างกันซึ่งปรับให้เหมาะกับเวอร์ชันและประเภทของบิลด์ที่เฉพาะเจาะจง (เช่น การใช้ไดเรกทอรีอย่าง src/variant/baselineProfiles/) ซึ่งช่วยให้มั่นใจได้ว่าระบบจะใช้กฎการเพิ่มประสิทธิภาพอย่างแม่นยำสำหรับไบนารีของแอปพลิเคชันหรือไลบรารีที่ไม่ซ้ำกันแต่ละรายการ
ตัวอย่างการสร้างโปรไฟล์
ต่อไปนี้คือตัวอย่างคลาสในการสร้างโปรไฟล์พื้นฐานสำหรับการเริ่มต้นแอป รวมถึงเหตุการณ์การนำทางและการเลื่อนหลายรายการโดยใช้ไลบรารี Macrobenchmark ที่แนะนำ
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
uiAutomator {
// App startup journey.
startApp(PACKAGE_NAME)
// Find and click elements using the new DSL
onElement { textAsString() == "COMPOSE LAZYLIST" }.click()
onElement { viewIdResourceName == "myLazyColumn" }.also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
pressBack()
}
}
}
}
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ไลบรารี UI Automator เพื่อทำให้เส้นทางของผู้ใช้เป็นอัตโนมัติได้ที่เขียนการทดสอบอัตโนมัติด้วย UI Automator
คุณดูโค้ดนี้ในบริบทแบบเต็มและรายละเอียดเพิ่มเติมได้ในส่วนตัวอย่างประสิทธิภาพใน GitHub
ข้อมูลที่ต้องระบุ
เมื่อใช้โปรไฟล์พื้นฐานในแอป คุณสามารถใส่โค้ดการเริ่มต้นแอปและการโต้ตอบของผู้ใช้ทั่วไป เช่น การไปยังส่วนต่างๆ ระหว่างหน้าจอหรือการเลื่อน นอกจากนี้ คุณยังรวบรวมขั้นตอนทั้งหมด เช่น การลงทะเบียน การเข้าสู่ระบบ หรือการชำระเงินได้ด้วย เส้นทางของผู้ใช้ที่คุณเห็นว่าสำคัญจะได้รับประโยชน์จากโปรไฟล์พื้นฐานด้วยการปรับปรุงประสิทธิภาพรันไทม์
หากคุณกำลังทดสอบแนวทางต่างๆ เพื่อปรับปรุงประสิทธิภาพ ให้พิจารณารวมโปรไฟล์พื้นฐานสำหรับทั้ง 2 กลุ่มของการทดสอบ การทำเช่นนี้จะช่วยให้คุณตีความผลลัพธ์ได้ง่ายขึ้นโดยตรวจสอบว่าผู้ใช้ทั้งหมดเรียกใช้โค้ดที่คอมไพล์แล้วอย่างสม่ำเสมอ
ไลบรารีสามารถจัดทำโปรไฟล์พื้นฐานของตนเองและจัดส่งพร้อมกับรุ่นต่างๆ เพื่อปรับปรุงประสิทธิภาพของแอป ตัวอย่างเช่น ดูส่วนใช้โปรไฟล์พื้นฐานในประสิทธิภาพของ Jetpack Compose
วิธีการทำงานของโปรไฟล์พื้นฐาน
ขณะพัฒนาแอปหรือไลบรารี ให้พิจารณากำหนด Baseline Profile เพื่อให้ครอบคลุมการโต้ตอบของผู้ใช้ทั่วไปที่เวลาในการแสดงผลหรือเวลาในการตอบสนองมีความสำคัญ ต่อไปนี้เป็นวิธีการทำงาน
ระบบจะสร้างกฎโปรไฟล์ที่มนุษย์อ่านได้สำหรับแอปของคุณและคอมไพล์เป็นรูปแบบไบนารีในแอป ซึ่งคุณจะดูได้ใน
assets/dexopt/baseline.profจากนั้นคุณจะอัปโหลด Android App Bundle (AAB) ไปยัง Google Play ได้ตามปกติGoogle Play จะประมวลผลโปรไฟล์และส่งไปยังผู้ใช้โดยตรงพร้อมกับ APK ในระหว่างการติดตั้ง ART จะทำการคอมไพล์ AOT ของเมธอดในโปรไฟล์ ซึ่งส่งผลให้เมธอดเหล่านั้นทำงานได้เร็วขึ้น หากโปรไฟล์มีเมธอดที่ใช้ในการเปิดแอปหรือระหว่างการแสดงผลเฟรม ผู้ใช้อาจพบว่าเวลาเปิดแอปเร็วขึ้นและอาการกระตุกน้อยลง
ขั้นตอนการทำงานนี้จะทำงานร่วมกับการรวมโปรไฟล์ระบบคลาวด์เพื่อปรับแต่งประสิทธิภาพตามการใช้งานจริงของแอปเมื่อเวลาผ่านไป
เปรียบเทียบโปรไฟล์พื้นฐานกับโปรไฟล์การเริ่มต้นระบบ
คุณใช้ปลั๊กอิน Baseline Profile Gradle เพื่อกำหนดและสร้างไฟล์โปรไฟล์
ปลั๊กอินนี้จะเชื่อมโยงกับกระบวนการบิลด์ และ AGP จะคอมไพล์กฎโปรไฟล์ที่มนุษย์อ่านได้เหล่านี้เป็นรูปแบบไบนารี ซึ่งแพ็กเกจเป็น baseline.prof ภายใน APK หรือ AAB ที่ ART สามารถใช้ได้อย่างมีประสิทธิภาพสำหรับการคอมไพล์ในอุปกรณ์ โดยมีขนาดเล็กกว่า 1.5 MB
โดยปกติแล้วไฟล์โปรไฟล์ที่สร้างขึ้นเหล่านี้จะมีชื่อว่า startup-prof.txt และ baseline-prof.txt แม้ว่าเนื้อหาอาจดูคล้ายกันในบางครั้ง โดยเฉพาะอย่างยิ่งหากคุณมุ่งเน้นที่การเริ่มต้นเป็นหลัก แต่ทั้ง 2 อย่างนี้มีวัตถุประสงค์ที่แตกต่างกันและส่งผลต่อประสิทธิภาพในระยะต่างๆ ดังนี้
โปรไฟล์พื้นฐาน
ไฟล์โปรไฟล์พื้นฐานมีชุดกฎที่ครอบคลุมซึ่ง Android Runtime (ART) ใช้เพื่อคอมไพล์เส้นทางโค้ดที่ใช้บ่อยล่วงหน้า ซึ่งจะเพิ่มประสิทธิภาพของแอปนอกเหนือจากการเริ่มต้นระบบ
โดยทั่วไปแล้ว ไฟล์โปรไฟล์พื้นฐานจะเป็นซูเปอร์เซ็ตของกฎที่พบในโปรไฟล์การเริ่มต้นระบบ ไฟล์นี้มีกฎทั้งหมดที่จำเป็นสำหรับการเพิ่มประสิทธิภาพการเริ่มต้นแอป (สร้างผ่านงาน baselineProfile Gradle) พร้อมกับโปรไฟล์เพิ่มเติมสำหรับเส้นทางของผู้ใช้ที่สำคัญอื่นๆ เช่น การเลื่อน
และการไปยังหน้าจอต่างๆ
ระบบจะสร้างกฎเพิ่มเติมที่ไม่ใช่กฎเริ่มต้นเหล่านี้โดยไม่คำนึงถึงค่าของฟิลด์กำหนดค่า includeInStartupProfile
โปรไฟล์สตาร์ทอัพ
ไฟล์โปรไฟล์การเริ่มต้นระบบมีกฎที่เพิ่มประสิทธิภาพมาเพื่อเส้นทางการเริ่มต้นระบบของแอปโดยเฉพาะ ในระหว่างการคอมไพล์ D8 จะแปลงไบต์โค้ด Java เป็นรูปแบบ DEX
จากนั้น R8 จะใช้ไฟล์นี้เพื่อกำหนดเลย์เอาต์ของไฟล์ DEX โดยตรวจสอบว่าโค้ดเริ่มต้นที่สำคัญอยู่ในไฟล์ DEX หลักเพื่อให้ดำเนินการได้เร็วขึ้น โดยทั่วไป คุณควรตั้งค่า includeInStartupProfile เป็น true สำหรับสถานการณ์การทดสอบที่จำเป็นต่อการแสดงผลครั้งแรกของแอปเท่านั้น ดูข้อมูลเพิ่มเติมได้ที่สร้างโปรไฟล์การเริ่มต้นระบบ
โปรไฟล์ในระบบคลาวด์
Cloud Profile เป็น PGO อีกรูปแบบหนึ่งที่รวบรวมโดย Google Play Store และเผยแพร่สำหรับการคอมไพล์เวลาติดตั้งร่วมกับ Baseline Profile
แม้ว่าโปรไฟล์ระบบคลาวด์จะขับเคลื่อนโดยการโต้ตอบของผู้ใช้จริงกับแอป แต่ก็ใช้เวลาหลายชั่วโมงถึงหลายวันหลังจากการอัปเดตจึงจะเผยแพร่ ซึ่งทำให้ความพร้อมใช้งานมีจำกัด ประสิทธิภาพของแอปจะไม่ดีที่สุดสำหรับผู้ใช้แอปใหม่หรือแอปที่อัปเดตจนกว่าจะมีการกระจายโปรไฟล์อย่างสมบูรณ์ นอกจากนี้ Cloud Profile ยังรองรับเฉพาะอุปกรณ์ Android ที่ใช้ Android 9 (ระดับ API 28) ขึ้นไป และปรับขนาดได้ดีสำหรับแอปที่มีฐานผู้ใช้ขนาดใหญ่พอเท่านั้น
ลักษณะการคอมไพล์ใน Android เวอร์ชันต่างๆ
เวอร์ชันแพลตฟอร์ม Android ใช้วิธีการคอมไพล์แอปที่แตกต่างกัน โดยแต่ละวิธีมีข้อดีข้อเสียด้านประสิทธิภาพที่สอดคล้องกัน Baseline Profile ปรับปรุงวิธีการคอมไพล์ก่อนหน้าโดยการจัดทำโปรไฟล์สำหรับการติดตั้งทั้งหมด
| เวอร์ชัน Android | วิธีการรวบรวมข้อมูล | แนวทางการเพิ่มประสิทธิภาพ |
|---|---|---|
| 5 ถึง 6 (ระดับ API 21 ถึง 23) | AOT แบบเต็ม | ระบบจะเพิ่มประสิทธิภาพทั้งแอปในระหว่างการติดตั้ง ซึ่งส่งผลให้ผู้ใช้ต้องรอนานก่อนที่จะใช้แอปได้ มีการใช้ RAM และพื้นที่ในดิสก์เพิ่มขึ้น และใช้เวลานานขึ้นในการโหลดโค้ดจากดิสก์ ซึ่งอาจเพิ่มเวลาในการทำ Cold Startup |
| 7 ถึง 8.1 (API ระดับ 24 ถึง 27) | AOT บางส่วน (โปรไฟล์พื้นฐาน) | androidx.profileinstaller จะติดตั้งโปรไฟล์พื้นฐานในการเรียกใช้ครั้งแรกเมื่อโมดูลแอปกำหนดทรัพยากร Dependency นี้ ART สามารถปรับปรุง
ประสิทธิภาพนี้ได้อีกโดยการเพิ่ม
กฎโปรไฟล์เพิ่มเติม
ระหว่างการใช้งานแอป และ
คอมไพล์กฎเหล่านั้นเมื่อ
อุปกรณ์ไม่มีการใช้งาน ซึ่งจะเพิ่มประสิทธิภาพพื้นที่ในดิสก์และเวลาในการโหลดโค้ดจากดิสก์ จึงช่วยลดเวลารอสำหรับแอป |
| 9 (ระดับ API 28) ขึ้นไป | AOT บางส่วน (Baseline + โปรไฟล์ระบบคลาวด์) | Play จะใช้โปรไฟล์พื้นฐาน ระหว่างการติดตั้งแอปเพื่อ เพิ่มประสิทธิภาพ APK และโปรไฟล์ ระบบคลาวด์ (หากมี) หลังจากติดตั้งแล้ว ระบบจะอัปโหลดโปรไฟล์ ART ไปยัง Play, รวบรวม และจัดเตรียมเป็นโปรไฟล์ระบบคลาวด์ให้แก่ผู้ใช้รายอื่นๆ เมื่อติดตั้งหรืออัปเดตแอป |
ปัญหาที่ทราบแล้ว
ปัญหาและวิธีแก้ไขที่เป็นไปได้ หรือปัญหาที่อยู่ระหว่างการพัฒนาวิธีแก้ไขเบื้องต้นมีดังนี้
การสร้างโปรไฟล์พื้นฐานอาจไม่สำเร็จเนื่องจากการตั้งค่าสิทธิ์ในอุปกรณ์บางรุ่น รวมถึงอุปกรณ์ OnePlus หากต้องการแก้ไขปัญหานี้ ให้ปิดตัวเลือกปิดใช้การตรวจสอบสิทธิ์ในการตั้งค่าตัวเลือกสำหรับนักพัฒนาแอป
หากต้องการจัดทำโปรไฟล์พื้นฐานสำหรับไลบรารีให้สำเร็จ ให้ใช้ปลั๊กอิน Baseline Profile Gradle 1.2.3 หรือ AGP 8.3 เป็นอย่างน้อย (ปัญหา #313992099)
หากคุณสร้างโปรไฟล์พื้นฐานด้วยคำสั่ง
./gradlew app:generateBaselineProfileการเปรียบเทียบในโมดูลทดสอบก็จะทำงานด้วย และระบบจะทิ้งผลลัพธ์ หากเกิดกรณีนี้ขึ้น คุณจะสร้างได้เฉพาะโปรไฟล์พื้นฐานโดยเรียกใช้คำสั่งด้วย-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfileปัญหานี้ได้รับการแก้ไขแล้วใน AGP 8.2คำสั่งในการสร้างโปรไฟล์พื้นฐานสำหรับประเภทบิลด์ทุกประเภท
./gradlew app:generateBaselineProfileจะสร้างโปรไฟล์พื้นฐานสำหรับบิลด์ที่เผยแพร่เท่านั้น ปัญหานี้ได้รับการแก้ไขแล้วใน AGP 8.1ช่องทางการจัดจำหน่ายแอปที่ไม่ใช่ Google Play Store อาจไม่รองรับการใช้ Baseline Profile ในการติดตั้ง ผู้ใช้แอปที่ติดตั้งผ่านช่องทางเหล่านี้จะไม่เห็นประโยชน์จนกว่า dexopt ในเบื้องหลังจะทำงาน ซึ่งมักจะเป็นช่วงข้ามคืน
การแชร์แอปภายในของ Play Store ไม่รองรับโปรไฟล์พื้นฐาน แต่แทร็กทดสอบภายในรองรับ
การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์บางรุ่น เช่น อุปกรณ์ Huawei อาจรบกวนการติดตั้งโปรไฟล์ ปิดใช้การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์เปรียบเทียบเพื่อช่วยให้มั่นใจว่าโปรไฟล์จะได้รับการติดตั้งอย่างมีประสิทธิภาพ
แหล่งข้อมูลเพิ่มเติม
- การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้นระบบ
- ปรับปรุงประสิทธิภาพของแอปด้วยโปรไฟล์พื้นฐาน
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- สร้างและวัด Baseline Profile โดยไม่ต้องใช้ Macrobenchmark
- การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้นระบบ