โปรไฟล์ Baseline ช่วยปรับปรุงความเร็วในการเรียกใช้โค้ดประมาณ 30% ตั้งแต่การเปิดตัวครั้งแรกโดยหลีกเลี่ยงขั้นตอนการตีความและการคอมไพล์แบบทันที (JIT) สำหรับเส้นทางโค้ดที่รวมไว้
การจัดส่งโปรไฟล์พื้นฐานในแอปหรือไลบรารีจะช่วยให้ Android Runtime (ART) สามารถเพิ่มประสิทธิภาพเส้นทางโค้ดที่ระบุผ่านการคอมไพล์ล่วงหน้า (AOT) ซึ่งจะช่วยปรับปรุงประสิทธิภาพสำหรับผู้ใช้ใหม่ทุกคนและการอัปเดตแอปทุกครั้ง การเพิ่มประสิทธิภาพตามคำแนะนำของโปรไฟล์ (PGO) นี้ช่วยให้แอปเพิ่มประสิทธิภาพการเริ่มต้น ลดการกระตุกของการโต้ตอบ และปรับปรุงประสิทธิภาพรันไทม์โดยรวมสำหรับผู้ใช้ตั้งแต่การเปิดตัวครั้งแรก
การเพิ่มประสิทธิภาพเหล่านี้ส่งผลโดยตรงต่อการปรับปรุงเมตริกทางธุรกิจ เช่น การคงผู้ใช้ไว้ ธุรกรรม และการให้คะแนน คุณอ่านเพิ่มเติมเกี่ยวกับวิธีที่ ประสิทธิภาพส่งผลต่อเมตริกทางธุรกิจได้ในเรื่องราวจาก Josh, Lyft, TikTok และ Zomato
ประโยชน์ของโปรไฟล์พื้นฐาน
Baseline Profile ช่วยให้คอมไพล์โค้ดล่วงหน้าในการโต้ตอบที่สำคัญของผู้ใช้ได้ เช่น การเริ่มต้นแอป การไปยังส่วนต่างๆ ระหว่างหน้าจอ หรือการเลื่อนดูเนื้อหา ซึ่งจะทำให้การทำงานราบรื่นขึ้นตั้งแต่ครั้งแรกที่เรียกใช้ การเพิ่มความเร็วและความ ตอบสนองของแอปด้วยโปรไฟล์พื้นฐานอาจทำให้มีผู้ใช้ที่ใช้งานอยู่รายวันมากขึ้น และอัตราการเข้าชมซ้ำโดยเฉลี่ยสูงขึ้น
โปรไฟล์พื้นฐานช่วยแนะแนวทางการเพิ่มประสิทธิภาพนอกเหนือจากการเริ่มต้นแอปด้วยการโต้ตอบของผู้ใช้ทั่วไป ซึ่งจะช่วยปรับปรุงเวลาทำงานของแอปตั้งแต่การเปิดตัวครั้งแรก การคอมไพล์ AOT ที่มีคำแนะนำไม่ต้องอาศัยอุปกรณ์ของผู้ใช้ และสามารถทำได้ 1 ครั้งต่อรุ่นในคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์แทนที่จะเป็นอุปกรณ์เคลื่อนที่ การเผยแพร่ที่มี Baseline Profile จะช่วยให้การเพิ่มประสิทธิภาพแอปพร้อมใช้งานได้เร็วกว่าการใช้ Cloud Profile เพียงอย่างเดียว
เมื่อไม่ได้ใช้ Baseline Profile โค้ดแอปทั้งหมดจะได้รับการคอมไพล์ JIT ในหน่วยความจำ
หลังจากได้รับการตีความ หรือเขียนลงในไฟล์ odex ในเบื้องหลังเมื่อ
อุปกรณ์ไม่ได้ใช้งาน หลังจากติดตั้งหรืออัปเดตแอป ผู้ใช้จะได้รับประสบการณ์ที่ไม่ดีนัก
ตั้งแต่ครั้งแรกที่เรียกใช้แอปจนกว่าจะมีการเพิ่มประสิทธิภาพเส้นทางโค้ดใหม่
แอปจำนวนมากวัดการเพิ่มประสิทธิภาพได้ประมาณ 30% หลังจากเพิ่มประสิทธิภาพแล้ว
โปรไฟล์สตาร์ทอัพ
โปรไฟล์การเริ่มต้นทำงานจะคล้ายกับโปรไฟล์พื้นฐาน แต่จะใช้ในเวลาคอมไพล์ เพื่อเพิ่มประสิทธิภาพเลย์เอาต์ DEX ให้เริ่มต้นทำงานได้เร็วขึ้น แทนที่จะใช้เพื่อการเพิ่มประสิทธิภาพในอุปกรณ์ ดูข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างโปรไฟล์การเริ่มต้นกับโปรไฟล์พื้นฐานได้ที่เปรียบเทียบโปรไฟล์พื้นฐานกับโปรไฟล์การเริ่มต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพเลย์เอาต์ DEX ได้ที่การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้น
เริ่มต้นใช้งาน
หากต้องการเริ่มเพิ่มประสิทธิภาพในแอปที่มีอยู่ ให้ดูสร้างโปรไฟล์พื้นฐาน
บิลด์โปรไฟล์เทียบกับบิลด์ที่เผยแพร่
คุณต้องเข้าใจความแตกต่างในการกำหนดค่าบิลด์ที่จำเป็น
เมื่อสร้างไฟล์โปรไฟล์พื้นฐานและโปรไฟล์เริ่มต้น (เช่น
baseline-prof.txt และ startup-prof.txt) กับเมื่อสร้าง APK เวอร์ชันที่เผยแพร่สุดท้ายที่ใช้โปรไฟล์เหล่านี้
เมื่อสร้างไฟล์โปรไฟล์ (เช่น benchmark)
เมื่อบันทึกโปรไฟล์พื้นฐานด้วยการทดสอบ แอปต้องไม่ออฟบัสเคต
หากต้องการให้กฎของโปรไฟล์ที่สร้างขึ้นตรงกับลายเซ็นของเมธอดในโค้ดอย่างถูกต้อง
คุณต้องปิดการปกปิดและเพิ่มประสิทธิภาพ (R8) สำหรับตัวแปรบิลด์
ที่ใช้ในการสร้างโปรไฟล์ ตัวแปรบิลด์นี้ต้องแตกต่างจากตัวแปรบิลด์ที่เผยแพร่ ซึ่งมีการเปิดใช้การเพิ่มประสิทธิภาพและการปรับให้ยากต่อการอ่าน (Obfuscation) คุณ
ทำได้โดยการตั้งค่า isMinifyEnabled = false สำหรับตัวแปรบิลด์การสร้างโปรไฟล์
หากไม่ได้ใช้ปลั๊กอิน 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 เวอร์ชันที่รองรับต่อไปนี้หรือสูงกว่า การขึ้นต่อกันเหล่านี้จำเป็นต้องใช้ในเวลาที่ต่างกันและทำงานร่วมกันเป็น ชุดเครื่องมือเพื่อเปิดใช้ Baseline Profile ที่ดีที่สุด
- ปลั๊กอิน Android Gradle:
com.android.tools.build:8.0.0 - ไลบรารี Macrobenchmark
androidx.benchmark:benchmark-macro-junit4:1.5.0 - โปรแกรมติดตั้งโปรไฟล์
androidx.profileinstaller:profileinstaller:1.4.1
เราขอแนะนำให้ใช้ AGP เวอร์ชันล่าสุดเพื่อสร้างและจัดการ Baseline Profiles ฟังก์ชันการทำงานหลักๆ ที่มาพร้อมกับ AGP เวอร์ชันต่างๆ มีดังนี้
| เวอร์ชัน AGP | ฟีเจอร์ |
|---|---|
| 9.1 |
รองรับไดเรกทอรีชุดซอร์สแบบเต็ม (โมดูลไลบรารี):
นอกเหนือจากไดเรกทอรีที่รับรู้ถึงตัวแปรแล้ว คุณยังประกาศ
ไฟล์แหล่งข้อมูลโปรไฟล์พื้นฐานหลายไฟล์ที่มีชื่อใดก็ได้ เช่น
src/free/generated/baselineProfiles/baseline-prof1.txt
สําหรับโมดูลไลบรารีและโมดูลแอปได้ด้วย
|
| 8.4 | การติดตั้งแอปในเครื่องของบิลด์ที่แก้ไขข้อบกพร่องไม่ได้โดยใช้ เครื่องมือบรรทัดคำสั่ง Gradle Wrapper หรือ Android Studio จะติดตั้ง Baseline Profile เพื่อให้ประสิทธิภาพ ของบิลด์ที่เผยแพร่ในเครื่องตรงกับการใช้งานจริงมากขึ้น การอัปเดตนี้ จะไม่ส่งผลต่อประสิทธิภาพการทำงานจริงของโปรไฟล์พื้นฐาน |
| 8.3 |
|
| 8.2 |
|
| 8.0 | เวอร์ชันขั้นต่ำที่แนะนำ: ใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐาน
เพื่อสร้างโปรไฟล์พื้นฐานด้วยงาน Gradle งานเดียว
|
| 7.4 |
เวอร์ชันต่ำสุดที่รองรับ: แอปสามารถใช้โปรไฟล์พื้นฐาน
จากไลบรารี และระบุโปรไฟล์พื้นฐานของตนเองในไฟล์
src/main/baseline-prof.txt
|
การตั้งค่าแหล่งที่มาของโปรไฟล์ที่คำนึงถึงตัวแปร
การใช้ปลั๊กอิน Android Gradle (AGP) เวอร์ชัน 8.0 สำหรับแอปพลิเคชันและ AGP เวอร์ชัน 8.3 สำหรับไลบรารีจะช่วยให้คุณวางกฎ Baseline Profile ไว้ในไดเรกทอรีชุดแหล่งที่มาเฉพาะได้ ซึ่งจะช่วยให้คุณไม่ต้องยึดติดกับข้อจำกัดของเส้นทางเดียวที่ตายตัว (เช่น 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
ข้อมูลที่ต้องระบุ
เมื่อใช้ Baseline Profile ในแอป คุณจะใส่โค้ดการเริ่มต้นแอปและ การโต้ตอบของผู้ใช้ทั่วไป เช่น การไปยังส่วนต่างๆ ระหว่างหน้าจอหรือการเลื่อน ได้ นอกจากนี้ คุณยังรวบรวมโฟลว์ทั้งหมดได้ด้วย เช่น การลงทะเบียน การเข้าสู่ระบบ หรือการชำระเงิน เส้นทางของผู้ใช้ที่คุณเห็นว่ามีความสําคัญจะได้รับประโยชน์จากโปรไฟล์พื้นฐานโดยการปรับปรุงประสิทธิภาพรันไทม์
หากคุณกำลังทดสอบแนวทางต่างๆ เพื่อปรับปรุงประสิทธิภาพ ให้พิจารณารวมโปรไฟล์พื้นฐานสำหรับทั้ง 2 กลุ่มของการทดสอบ การทำเช่นนี้จะช่วยให้คุณตีความผลลัพธ์ได้ง่ายขึ้นโดยการตรวจสอบว่าผู้ใช้ทั้งหมดเรียกใช้โค้ดที่คอมไพล์แล้วอย่างสม่ำเสมอ
ไลบรารีสามารถจัดเตรียม Baseline Profile ของตนเองและจัดส่งพร้อมกับรุ่นต่างๆ เพื่อ ปรับปรุงประสิทธิภาพของแอป เช่น ดูส่วนการใช้โปรไฟล์พื้นฐานใน ประสิทธิภาพของ Jetpack Compose
วิธีการทำงานของโปรไฟล์พื้นฐาน
ขณะพัฒนาแอปหรือไลบรารี ให้พิจารณากําหนด Baseline Profile เพื่อครอบคลุมการโต้ตอบทั่วไปของผู้ใช้ที่เวลาในการแสดงผลหรือเวลาในการตอบสนองมีความสําคัญ ต่อไปนี้เป็นวิธีการทำงาน
ระบบจะสร้างกฎโปรไฟล์ที่มนุษย์อ่านได้สำหรับแอปของคุณและคอมไพล์เป็น รูปแบบไบนารีในแอป คุณจะดูกฎเหล่านี้ได้ใน
assets/dexopt/baseline.profจากนั้นคุณจะอัปโหลด Android App Bundle (AAB) ไปยัง Google Play ได้ตามปกติGoogle Play จะประมวลผลโปรไฟล์และจัดส่งให้ผู้ใช้โดยตรงพร้อมกับ APK ในระหว่างการติดตั้ง ART จะทำการคอมไพล์ AOT ของเมธอดใน โปรไฟล์ ซึ่งจะทำให้เมธอดเหล่านั้นทำงานได้เร็วขึ้น หากโปรไฟล์มีเมธอดที่ใช้ในการเปิดตัวแอปหรือระหว่างการแสดงผลเฟรม ผู้ใช้อาจได้รับประสบการณ์การเปิดตัวที่เร็วขึ้นและลดอาการกระตุก
โฟลว์นี้จะทำงานร่วมกับการรวบรวมโปรไฟล์ระบบคลาวด์เพื่อปรับแต่ง ประสิทธิภาพตามการใช้งานแอปจริงเมื่อเวลาผ่านไป
เปรียบเทียบโปรไฟล์พื้นฐานกับโปรไฟล์เริ่มต้น
คุณใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานเพื่อกำหนดและสร้างไฟล์โปรไฟล์
ปลั๊กอินนี้เชื่อมต่อกับกระบวนการบิลด์ และ AGP จะคอมไพล์กฎโปรไฟล์ที่มนุษย์อ่านได้เหล่านี้ เป็นรูปแบบไบนารี ซึ่งแพ็กเป็น baseline.prof ภายใน APK หรือ AAB ที่ ART ใช้ได้อย่างมีประสิทธิภาพสำหรับการคอมไพล์ในอุปกรณ์ โดยมีเงื่อนไขว่าต้องมีขนาดเล็กกว่า 1.5 MB
โดยปกติแล้วไฟล์โปรไฟล์ที่สร้างขึ้นเหล่านี้จะมีชื่อว่า startup-prof.txt และ
baseline-prof.txt แม้ว่าเนื้อหาของทั้ง 2 ส่วนอาจดูคล้ายกันในบางครั้ง
โดยเฉพาะอย่างยิ่งหากคุณมุ่งเน้นที่การเริ่มต้นเป็นหลัก แต่ทั้ง 2 ส่วนมีวัตถุประสงค์ที่แตกต่างกัน
และส่งผลต่อประสิทธิภาพในระยะต่างๆ ดังนี้
โปรไฟล์พื้นฐาน
ไฟล์โปรไฟล์พื้นฐานมีชุดกฎที่ครอบคลุมซึ่ง Android Runtime (ART) ใช้เพื่อคอมไพล์เส้นทางโค้ดที่ใช้บ่อยล่วงหน้า ซึ่งจะช่วยเพิ่มประสิทธิภาพของแอปได้มากกว่าแค่การเริ่มต้น
โดยทั่วไปไฟล์โปรไฟล์พื้นฐานจะเป็นซูเปอร์เซ็ตของกฎที่พบใน Startup Profile ไฟล์นี้มีกฎทั้งหมดที่จำเป็นสำหรับการเพิ่มประสิทธิภาพการเริ่มต้นแอป (สร้างผ่านbaselineProfile Gradle Task) พร้อมด้วย
โปรไฟล์เพิ่มเติมสำหรับเส้นทางของผู้ใช้ที่สำคัญอื่นๆ เช่น การเลื่อน
และการไปยังส่วนต่างๆ ของหน้าจอ
ระบบจะสร้างกฎเพิ่มเติมที่ไม่ใช่กฎเริ่มต้นเหล่านี้โดยไม่คำนึงถึงค่าของ
includeInStartupProfileฟิลด์กำหนดค่า
โปรไฟล์สตาร์ทอัพ
ไฟล์โปรไฟล์การเริ่มต้นจะมีกฎที่เพิ่มประสิทธิภาพมาให้เหมาะกับเส้นทางการเริ่มต้นของแอปโดยเฉพาะ
ในระหว่างการคอมไพล์ D8 จะแปลงไบต์โค้ด Java เป็นรูปแบบ DEX
จากนั้น R8 จะใช้ไฟล์นี้เพื่อกำหนดเลย์เอาต์ของไฟล์ DEX เพื่อให้มั่นใจว่า
โค้ดเริ่มต้นที่สำคัญจะอยู่ในไฟล์ DEX หลักเพื่อให้ดำเนินการได้เร็วขึ้น
โดยทั่วไป คุณควรตั้งค่า includeInStartupProfile เป็น true เฉพาะใน
สถานการณ์การทดสอบที่จำเป็นต่อการแสดงผลครั้งแรกของแอป ดูข้อมูลเพิ่มเติมได้ที่สร้างโปรไฟล์สตาร์ทอัป
โปรไฟล์ Cloud
โปรไฟล์ในระบบคลาวด์เป็น PGO อีกรูปแบบหนึ่งที่รวบรวมโดย Google Play Store และเผยแพร่สำหรับการคอมไพล์เวลาติดตั้ง พร้อมกับโปรไฟล์พื้นฐาน
แม้ว่าโปรไฟล์ในระบบคลาวด์จะขับเคลื่อนโดยการโต้ตอบของผู้ใช้จริงกับแอป แต่ระบบจะใช้เวลาหลายชั่วโมงถึงหลายวันหลังจากอัปเดตในการเผยแพร่ ซึ่งจำกัด ความพร้อมใช้งาน จนกว่าจะมีการกระจายโปรไฟล์อย่างเต็มรูปแบบ ประสิทธิภาพของแอป จะต่ำกว่าที่ควรจะเป็นสำหรับผู้ใช้แอปใหม่หรือแอปที่อัปเดต นอกจากนี้ โปรไฟล์ในระบบคลาวด์ยังรองรับเฉพาะอุปกรณ์ Android ที่ใช้ Android 9 (ระดับ API 28) ขึ้นไป และจะปรับขนาดได้ดีเฉพาะกับแอปที่มีฐานผู้ใช้ขนาดใหญ่เพียงพอ
ลักษณะการทำงานของการคอมไพล์ใน Android เวอร์ชันต่างๆ
เวอร์ชันแพลตฟอร์ม Android ใช้แนวทางการคอมไพล์แอปที่แตกต่างกัน ซึ่งแต่ละแนวทางมี การแลกเปลี่ยนประสิทธิภาพที่สอดคล้องกัน โปรไฟล์พื้นฐานปรับปรุงวิธีการคอมไพล์ก่อนหน้าด้วยการจัดทำโปรไฟล์สำหรับการติดตั้งทั้งหมด
| เวอร์ชัน Android | วิธีการรวบรวม | แนวทางการเพิ่มประสิทธิภาพ |
|---|---|---|
| 5 ถึง 6 (ระดับ API 21 ถึง 23) | AOT แบบเต็ม | ระบบจะเพิ่มประสิทธิภาพทั้งแอป ในระหว่างการติดตั้ง ซึ่งส่งผล ให้ต้องรอนานกว่าจะใช้ แอปได้ เพิ่มการใช้ RAM และ พื้นที่ดิสก์ และ ใช้เวลานานขึ้นในการโหลดโค้ด จากดิสก์ ซึ่งอาจ เพิ่มเวลาในการเริ่มต้นระบบแบบ Cold Startup |
| 7 ถึง 8.1 (API ระดับ 24 ถึง 27) | AOT บางส่วน (Baseline Profile) | Baseline Profile จะได้รับการติดตั้งโดย
androidx.profileinstaller
ในการเรียกใช้ครั้งแรกเมื่อ
โมดูลแอปกำหนด
ทรัพยากร Dependency นี้ ART สามารถปรับปรุงสิ่งนี้ได้เพิ่มเติมโดยการเพิ่มกฎโปรไฟล์เพิ่มเติมในระหว่างการใช้งานแอป และคอมไพล์กฎเหล่านั้นเมื่ออุปกรณ์ไม่มีการใช้งาน ซึ่งจะช่วย
เพิ่มประสิทธิภาพพื้นที่ดิสก์
และเวลาในการโหลดโค้ดจาก
ดิสก์ จึงช่วยลด
เวลารอสำหรับแอป |
| 9 (ระดับ API 28) และ สูงกว่า | AOT บางส่วน (Baseline + Cloud Profile) | Play ใช้ Baseline Profile ระหว่างการติดตั้งแอปเพื่อ เพิ่มประสิทธิภาพ APK และ Cloud Profile หากมี หลังจากติดตั้งแล้ว ระบบจะอัปโหลดโปรไฟล์ ART ไปยัง Play จากนั้นจะรวบรวมและแสดงเป็นโปรไฟล์ในระบบคลาวด์แก่ผู้ใช้รายอื่นๆ เมื่อผู้ใช้ติดตั้งหรืออัปเดตแอป |
ปัญหาที่ทราบแล้ว
ปัญหาและวิธีแก้ปัญหาที่อาจเกิดขึ้น หรือปัญหาที่อยู่ระหว่างการพัฒนาวิธีแก้ไขเบื้องต้นมีดังนี้
การสร้างโปรไฟล์พื้นฐานอาจล้มเหลวเนื่องจากการตั้งค่าสิทธิ์ในอุปกรณ์บางรุ่น ซึ่งรวมถึงอุปกรณ์ OnePlus หากต้องการหลีกเลี่ยงปัญหานี้ ให้ปิดตัวเลือกปิดใช้การตรวจสอบสิทธิ์ในการตั้งค่าตัวเลือกสำหรับนักพัฒนาแอป
หากต้องการจัดเตรียมโปรไฟล์พื้นฐานสำหรับไลบรารีให้สำเร็จ ให้ใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐาน 1.2.3 หรือ AGP 8.3 เป็นอย่างน้อย (ปัญหา #313992099)
หากคุณสร้างโปรไฟล์พื้นฐานด้วยคำสั่ง
./gradlew app:generateBaselineProfileระบบจะเรียกใช้การเปรียบเทียบในโมดูลทดสอบด้วย และจะทิ้งผลลัพธ์ หากเกิดกรณีนี้ คุณจะสร้างได้เฉพาะ Baseline Profiles โดยเรียกใช้คำสั่งด้วย-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfileปัญหานี้ได้รับการแก้ไขแล้วใน AGP 8.2คำสั่งในการสร้างโปรไฟล์พื้นฐานสำหรับประเภทบิลด์ทุกประเภท -
./gradlew app:generateBaselineProfile- จะสร้างโปรไฟล์พื้นฐานสำหรับ ประเภทบิลด์ที่เผยแพร่เท่านั้น ปัญหานี้ได้รับการแก้ไขแล้วใน AGP 8.1ช่องทางการเผยแพร่แอปที่ไม่ใช่ Google Play Store อาจไม่รองรับการใช้ Baseline Profile ในการติดตั้ง ผู้ใช้แอปที่ติดตั้งผ่านช่องทางเหล่านี้จะไม่เห็นสิทธิประโยชน์จนกว่า dexopt ในเบื้องหลังจะทำงาน ซึ่งอาจใช้เวลาข้ามคืน
การแชร์แอปภายในของ Play Store ไม่รองรับ Baseline Profile แต่แทร็กทดสอบภายใน รองรับ
การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์บางรุ่น เช่น อุปกรณ์ Huawei อาจรบกวน การติดตั้งโปรไฟล์ หากต้องการให้การติดตั้งโปรไฟล์มีประสิทธิภาพ โปรดปิดการเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์เปรียบเทียบ
แหล่งข้อมูลเพิ่มเติม
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- สร้างและวัดโปรไฟล์พื้นฐานโดยไม่มี Macrobenchmark
- การเพิ่มประสิทธิภาพเลย์เอาต์ DEX และโปรไฟล์การเริ่มต้น