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

Baseline Profiles ช่วยปรับปรุงความเร็วในการเรียกใช้โค้ดประมาณ 30% ตั้งแต่การเปิดตัวครั้งแรก โดยหลีกเลี่ยงขั้นตอนการตีความและการคอมไพล์แบบทันที (JIT) สำหรับเส้นทางโค้ดที่รวมไว้

การจัดส่ง Baseline Profile ในแอปหรือไลบรารีจะช่วยให้ Android Runtime (ART) สามารถเพิ่มประสิทธิภาพเส้นทางโค้ดที่ระบุผ่านการคอมไพล์ Ahead-of-Time (AOT) ซึ่งจะช่วยเพิ่มประสิทธิภาพสำหรับผู้ใช้ใหม่ทุกคนและการอัปเดตแอปทุกครั้ง การเพิ่มประสิทธิภาพตามโปรไฟล์ (PGO) นี้ช่วยให้แอปเพิ่มประสิทธิภาพการเริ่มต้น ลดความหน่วงของการโต้ตอบ และปรับปรุงประสิทธิภาพรันไทม์โดยรวมสำหรับผู้ใช้ตั้งแต่การเปิดตัวครั้งแรก

การเพิ่มประสิทธิภาพเหล่านี้ส่งผลโดยตรงต่อการปรับปรุงเมตริกทางธุรกิจ เช่น การคงผู้ใช้ไว้ ธุรกรรม และการให้คะแนน คุณอ่านเพิ่มเติมเกี่ยวกับวิธีที่ ประสิทธิภาพส่งผลต่อเมตริกทางธุรกิจได้ในเรื่องราวจาก Josh, Lyft, TikTok และ Zomato

ประโยชน์ของโปรไฟล์พื้นฐาน

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

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) สำหรับตัวแปรบิลด์ ที่ใช้ในการสร้างโปรไฟล์ ตัวแปรนี้ต้องแตกต่างจากตัวแปรบิลด์รุ่นที่เผยแพร่ ซึ่งมีการเปิดใช้การสร้างความสับสนและการเพิ่มประสิทธิภาพ คุณทำได้โดยการตั้งค่า isMinifyEnabled = false สำหรับตัวแปรบิลด์การสร้างโปรไฟล์ หากไม่ได้ใช้ปลั๊กอิน Gradle ของ Baseline Profile คุณควรตรวจสอบว่าได้ใช้ -dontobfuscate และ -dontoptimize แล้ว ปลั๊กอิน Gradle ของ Baseline Profile จะจัดการการกำหนดค่านี้ให้คุณโดยอัตโนมัติ

เมื่อสร้าง APK รุ่นสุดท้าย

บิลด์รุ่นของคุณควรมี isMinifyEnabled = true เสมอเพื่อรับประโยชน์จาก การปรับให้ยากต่อการอ่าน การลดขนาด และการเพิ่มประสิทธิภาพ R8 จะเขียนกฎใหม่โดยอัตโนมัติ จากไฟล์โปรไฟล์ที่ไม่ได้สับสนเพื่อให้ตรงกับโค้ดที่สับสนและเพิ่มประสิทธิภาพแล้ว ใน APK ของรุ่นที่เผยแพร่ หากต้องการให้การเพิ่มประสิทธิภาพเลย์เอาต์ DEX (ขับเคลื่อนโดยโปรไฟล์ Startup) มีประสิทธิภาพ แอปที่เผยแพร่ต้อง มีการปกปิดโค้ดและใช้ R8 โดยเปิดใช้การเพิ่มประสิทธิภาพทั้งหมด

ห่วงโซ่การอ้างอิงมีเวอร์ชันการเผยแพร่ที่เสถียรและเวอร์ชันที่กำลังพัฒนา หากต้องการ สร้างและติดตั้ง Baseline Profile ให้ใช้ปลั๊กอิน Android Gradle, ไลบรารี Macrobenchmark และ Profile Installer เวอร์ชันที่รองรับต่อไปนี้หรือสูงกว่า การขึ้นต่อกันเหล่านี้จำเป็นต้องใช้ในเวลาที่ต่างกันและทำงานร่วมกันเป็น เครื่องมือเพื่อเปิดใช้ Baseline Profile ที่เหมาะสม

  • ปลั๊กอิน Android Gradle: com.android.tools.build:8.0.0
  • ไลบรารี Macrobenchmark androidx.benchmark:benchmark-macro-junit4:1.4.1
  • โปรแกรมติดตั้งโปรไฟล์ androidx.profileinstaller:profileinstaller:1.4.1

เราขอแนะนำให้ใช้ AGP เวอร์ชันล่าสุดเพื่อสร้างและจัดการ Baseline Profiles ฟังก์ชันการทำงานหลักๆ ที่มาพร้อมกับ AGP เวอร์ชันต่างๆ มีดังนี้

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

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

การใช้ปลั๊กอิน Android Gradle (AGP) เวอร์ชัน 8.0 สำหรับแอปพลิเคชันและ AGP เวอร์ชัน 8.3 สำหรับไลบรารีจะช่วยให้คุณวางกฎ Baseline Profile ไว้ในไดเรกทอรีชุดแหล่งที่มาเฉพาะได้ ซึ่งจะช่วยให้คุณไม่ต้องยึดติดกับข้อจำกัดของเส้นทางเดียวที่ตายตัว (เช่น src/main/baseline-prof.txt) และใช้ไฟล์หลายไฟล์ได้

ซึ่งจะช่วยให้รองรับตัวแปรได้อย่างมีประสิทธิภาพ ทำให้คุณกำหนด Baseline Profile ที่แตกต่างกันซึ่งปรับให้เหมาะกับรุ่นและประเภทการสร้างที่เฉพาะเจาะจงได้ (เช่น ใช้ไดเรกทอรีอย่าง src/variant/baselineProfiles/) ซึ่งจะช่วยให้มั่นใจได้ว่า กฎการเพิ่มประสิทธิภาพจะได้รับการปรับใช้อย่างแม่นยำสำหรับแอปพลิเคชันหรือไบนารีของไลบรารีแต่ละรายการ

ตัวอย่างการสร้างโปรไฟล์

ต่อไปนี้คือตัวอย่างคลาสในการสร้าง Baseline Profile สำหรับการเริ่มต้นแอป รวมถึงเหตุการณ์การนำทางและการเลื่อนหลายรายการโดยใช้ไลบรารี 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 ของตนเองและจัดส่งพร้อมกับรุ่นต่างๆ เพื่อ ปรับปรุงประสิทธิภาพของแอป เช่น ดูส่วนการใช้ Baseline Profile ใน ประสิทธิภาพของ Jetpack Compose

วิธีการทำงานของโปรไฟล์พื้นฐาน

ขณะพัฒนาแอปหรือไลบรารี ให้พิจารณากําหนดโปรไฟล์พื้นฐานเพื่อครอบคลุมการโต้ตอบของผู้ใช้ทั่วไปที่เวลาในการแสดงผลหรือเวลาในการตอบสนองมีความสําคัญ วิธีการทำงานมีดังนี้

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

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

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

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

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

คุณใช้ปลั๊กอิน Gradle ของ Baseline Profile เพื่อกำหนดและสร้างไฟล์โปรไฟล์ ปลั๊กอินนี้จะเชื่อมต่อกับกระบวนการสร้าง และ AGP จะคอมไพล์กฎโปรไฟล์ที่มนุษย์อ่านได้เหล่านี้ เป็นรูปแบบไบนารีที่แพ็กเป็น baseline.prof ภายใน APK หรือ AAB ซึ่ง ART สามารถใช้ได้อย่างมีประสิทธิภาพสำหรับการคอมไพล์ในอุปกรณ์ โดยมีเงื่อนไขว่าต้องมีขนาดเล็กกว่า 1.5 MB

โดยปกติแล้วไฟล์โปรไฟล์ที่สร้างขึ้นเหล่านี้จะมีชื่อว่า startup-prof.txt และ baseline-prof.txt แม้ว่าเนื้อหาของทั้ง 2 ส่วนอาจดูคล้ายกันในบางครั้ง โดยเฉพาะอย่างยิ่งหากคุณมุ่งเน้นที่สตาร์ทอัพเป็นหลัก แต่ทั้ง 2 ส่วนมีวัตถุประสงค์ที่แตกต่างกัน และส่งผลต่อประสิทธิภาพในระยะต่างๆ

โปรไฟล์พื้นฐาน

ไฟล์ Baseline Profile มีชุดกฎที่ครอบคลุมซึ่ง Android Runtime (ART) ใช้เพื่อคอมไพล์เส้นทางโค้ดที่ใช้บ่อยล่วงหน้า ซึ่งจะช่วยเพิ่มประสิทธิภาพของแอปได้มากกว่าแค่ตอนเริ่มต้น

โดยทั่วไปแล้วไฟล์โปรไฟล์พื้นฐานจะเป็นซูเปอร์เซ็ตของกฎที่พบในโปรไฟล์เริ่มต้น ไฟล์นี้มีกฎทั้งหมดที่จำเป็นสำหรับการเพิ่มประสิทธิภาพการเริ่มต้นแอป (สร้างผ่านbaselineProfile งาน Gradle) พร้อมด้วย โปรไฟล์เพิ่มเติมสำหรับการเดินทางของผู้ใช้ที่สำคัญอื่นๆ เช่น การเลื่อน และการไปยังส่วนต่างๆ ของหน้าจอ

กฎเพิ่มเติมที่ไม่ใช่กฎเริ่มต้นเหล่านี้จะสร้างขึ้นโดยไม่คำนึงถึงค่าของ includeInStartupProfileฟิลด์การกำหนดค่า

โปรไฟล์สตาร์ทอัพ

ไฟล์โปรไฟล์การเริ่มต้นระบบมีกฎที่เพิ่มประสิทธิภาพมาให้เหมาะกับเส้นทางการเริ่มต้นระบบของแอปโดยเฉพาะ ในระหว่างการคอมไพล์ D8 จะแปลงไบต์โค้ด Java เป็นรูปแบบ DEX จากนั้น R8 จะใช้ไฟล์นี้เพื่อกำหนดเลย์เอาต์ของไฟล์ DEX เพื่อให้มั่นใจว่า โค้ดเริ่มต้นที่สำคัญจะอยู่ในไฟล์ DEX หลักเพื่อให้ดำเนินการได้เร็วขึ้น โดยทั่วไป คุณควรตั้งค่า includeInStartupProfile เป็น true เฉพาะใน สถานการณ์การทดสอบที่จำเป็นต่อการแสดงผลครั้งแรกของแอป ดูข้อมูลเพิ่มเติมได้ที่สร้างโปรไฟล์สตาร์ทอัพ

โปรไฟล์ Cloud

โปรไฟล์ในระบบคลาวด์เป็น PGO อีกรูปแบบหนึ่งที่ Google Play Store รวบรวมและเผยแพร่เพื่อการคอมไพล์เวลาติดตั้ง พร้อมกับโปรไฟล์พื้นฐาน

แม้ว่าโปรไฟล์ในระบบคลาวด์จะขับเคลื่อนโดยการโต้ตอบของผู้ใช้จริงกับแอป แต่ระบบจะใช้เวลาหลายชั่วโมงถึงหลายวันหลังจากอัปเดตในการเผยแพร่ ซึ่งจำกัด ความพร้อมใช้งาน จนกว่าจะมีการกระจายโปรไฟล์อย่างเต็มรูปแบบ ประสิทธิภาพของแอป จะต่ำกว่าที่ควรจะเป็นสำหรับผู้ใช้แอปใหม่หรือแอปที่อัปเดต นอกจากนี้ Cloud Profiles ยังรองรับเฉพาะอุปกรณ์ Android ที่ใช้ Android 9 (API ระดับ 28) ขึ้นไป และปรับขนาดได้ดีเฉพาะกับแอปที่มีฐานผู้ใช้ขนาดใหญ่เพียงพอ

ลักษณะการทำงานของการคอมไพล์ใน Android เวอร์ชันต่างๆ

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

เวอร์ชัน Android วิธีการรวบรวม แนวทางการเพิ่มประสิทธิภาพ
5 ถึง 6 (API ระดับ 21 ถึง 23) AOT แบบเต็ม ระบบจะเพิ่มประสิทธิภาพแอปทั้งแอป ในระหว่างการติดตั้ง ซึ่งส่งผลให้ ต้องรอนานกว่าจะใช้ แอปได้ มีการใช้ RAM และ พื้นที่ดิสก์มากขึ้น และ ใช้เวลานานขึ้นในการโหลดโค้ด จากดิสก์ ซึ่งอาจ เพิ่มเวลาในการเริ่มต้นระบบแบบ Cold Start
7 ถึง 8.1 (API ระดับ 24 ถึง 27) AOT บางส่วน (โปรไฟล์พื้นฐาน) โปรไฟล์พื้นฐานจะ ติดตั้งโดย androidx.profileinstaller ในการเรียกใช้ครั้งแรกเมื่อ โมดูลแอปกำหนด ทรัพยากร Dependency นี้ ART สามารถปรับปรุง สิ่งนี้ได้เพิ่มเติมโดยการเพิ่ม กฎโปรไฟล์เพิ่มเติม ในระหว่างการใช้งานแอป และ คอมไพล์กฎเหล่านั้นเมื่อ อุปกรณ์ไม่ได้ใช้งาน ซึ่งจะช่วย เพิ่มประสิทธิภาพพื้นที่ในดิสก์ และเวลาในการโหลดโค้ดจาก ดิสก์ จึงช่วยลด เวลารอของแอป
9 (API ระดับ 28) และ สูงกว่า AOT บางส่วน (Baseline + โปรไฟล์ Cloud) Play ใช้ Baseline Profile ระหว่างการติดตั้งแอปเพื่อ เพิ่มประสิทธิภาพ APK และ Cloud Profile หากมี หลังจากติดตั้งแล้ว ระบบจะอัปโหลดโปรไฟล์ ART ไปยัง Play รวบรวม แล้วแสดงเป็นโปรไฟล์ในระบบคลาวด์แก่ผู้ใช้รายอื่นเมื่อติดตั้งหรืออัปเดตแอป

ปัญหาที่ทราบ

ปัญหาและวิธีแก้ปัญหาที่อาจเกิดขึ้น หรือปัญหาที่อยู่ระหว่างการพัฒนาวิธีแก้ไขเบื้องต้นมีดังนี้

  • การสร้าง Baseline Profile อาจล้มเหลวเนื่องจากการตั้งค่าสิทธิ์ในอุปกรณ์บางรุ่น รวมถึงอุปกรณ์ OnePlus หากต้องการหลีกเลี่ยงปัญหานี้ ให้ปิดตัวเลือกปิดใช้การตรวจสอบสิทธิ์ในการตั้งค่าตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์

  • อุปกรณ์ Firebase Test Lab ไม่รองรับการสร้าง Baseline Profile รวมถึงอุปกรณ์ Test Lab ที่จัดการโดย Gradle (ปัญหา #285187547)

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

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

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