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

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

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

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

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

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

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

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

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

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

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

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