ภาพรวมของโปรไฟล์พื้นฐาน

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
  • การรองรับไดเรกทอรีชุดซอร์สบางส่วน (โมดูลไลบรารี): ประกาศไฟล์ Baseline Profile ที่รับรู้ตัวแปร เช่น src/free/generated/baselineProfiles/baseline-prof.txt สำหรับโมดูลไลบรารี
  • Baseline Profile มีคลาสที่ผ่านกระบวนการ Desugaring
8.2
  • การเขียนกฎใหม่ของ R8: D8 และ R8 สามารถเปลี่ยนกฎโปรไฟล์พื้นฐานและโปรไฟล์การเริ่มต้นที่มนุษย์อ่านได้เพื่อบันทึกกฎทั้งหมดที่คุณต้องใช้ในการเพิ่มประสิทธิภาพของแอปอย่างเต็มรูปแบบ ซึ่งจะช่วยให้คุณสร้างโปรไฟล์จากบิลด์ที่ไม่ได้ลดขนาดและนำไปใช้กับบิลด์ที่เผยแพร่ที่ลดขนาดแล้วได้ เพิ่มความครอบคลุมของเมธอดในโปรไฟล์พื้นฐานประมาณ 30% และเพิ่มประสิทธิภาพของแอปประมาณ 15%
  • โปรไฟล์การเริ่มต้นระบบ: สร้างโปรไฟล์พื้นฐานประเภทนี้เพื่อแจ้งเลย์เอาต์ของโค้ดภายใน DEX เพิ่มประสิทธิภาพการเริ่มต้นระบบอีกประมาณ 15% หรือเพิ่มขึ้นอย่างมากสำหรับแอปขนาดใหญ่
8.0 เวอร์ชันขั้นต่ำที่แนะนำ: ใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานเพื่อสร้างโปรไฟล์พื้นฐานด้วยงาน Gradle รายการเดียว
  • การรองรับไดเรกทอรีชุดซอร์สแบบเต็ม (โมดูลแอป): ประกาศไฟล์ต้นฉบับของโปรไฟล์พื้นฐานหลายไฟล์ และใช้ไดเรกทอรีที่รับรู้ตัวแปร เช่น src/free/generated/baselineProfiles/baseline-prof1.txt
7.4 เวอร์ชันขั้นต่ำที่รองรับ: แอปสามารถใช้โปรไฟล์พื้นฐานจากไลบรารี และระบุโปรไฟล์พื้นฐานของตนเองในไฟล์ src/main/baseline-prof.txt
  • Baseline Profile ได้รับการแพ็กเกจอย่างถูกต้องเมื่อสร้าง APK จาก App Bundle (ปัญหา #230361284)
  • สำหรับแอปที่มีไฟล์ .dex มากกว่า 1 ไฟล์ ระบบจะจัดแพ็กเกจโปรไฟล์พื้นฐานอย่างถูกต้องสำหรับไฟล์ .dex หลัก
  • D8 และ R8 รองรับการสร้างโปรไฟล์การเริ่มต้นจากบิลด์ที่มีการตั้งค่า isMinifyEnabled เป็น false

การตั้งค่าแหล่งที่มาของโปรไฟล์ที่คำนึงถึงตัวแปร

เมื่อใช้ปลั๊กอิน 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 เพื่อให้ครอบคลุมการโต้ตอบของผู้ใช้ทั่วไปที่เวลาในการแสดงผลหรือเวลาในการตอบสนองมีความสำคัญ ต่อไปนี้เป็นวิธีการทำงาน

  1. ระบบจะสร้างกฎโปรไฟล์ที่มนุษย์อ่านได้สำหรับแอปของคุณและคอมไพล์เป็นรูปแบบไบนารีในแอป ซึ่งคุณจะดูได้ใน assets/dexopt/baseline.prof จากนั้นคุณจะอัปโหลด Android App Bundle (AAB) ไปยัง Google Play ได้ตามปกติ

  2. Google Play จะประมวลผลโปรไฟล์และส่งไปยังผู้ใช้โดยตรงพร้อมกับ APK ในระหว่างการติดตั้ง ART จะทำการคอมไพล์ AOT ของเมธอดในโปรไฟล์ ซึ่งส่งผลให้เมธอดเหล่านั้นทำงานได้เร็วขึ้น หากโปรไฟล์มีเมธอดที่ใช้ในการเปิดแอปหรือระหว่างการแสดงผลเฟรม ผู้ใช้อาจพบว่าเวลาเปิดแอปเร็วขึ้นและอาการกระตุกน้อยลง

  3. ขั้นตอนการทำงานนี้จะทำงานร่วมกับการรวมโปรไฟล์ระบบคลาวด์เพื่อปรับแต่งประสิทธิภาพตามการใช้งานจริงของแอปเมื่อเวลาผ่านไป

รูปที่ 1 แผนภาพนี้แสดงเวิร์กโฟลว์ของโปรไฟล์พื้นฐานตั้งแต่การอัปโหลดไปจนถึงการนำส่งไปยังผู้ใช้ปลายทาง และความเกี่ยวข้องของเวิร์กโฟลว์ดังกล่าวกับโปรไฟล์ระบบคลาวด์

เปรียบเทียบโปรไฟล์พื้นฐานกับโปรไฟล์การเริ่มต้นระบบ

คุณใช้ปลั๊กอิน 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 อาจรบกวนการติดตั้งโปรไฟล์ ปิดใช้การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์เปรียบเทียบเพื่อช่วยให้มั่นใจว่าโปรไฟล์จะได้รับการติดตั้งอย่างมีประสิทธิภาพ

แหล่งข้อมูลเพิ่มเติม

แนะนำสำหรับคุณ