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

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

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

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

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

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

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

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

โปรไฟล์การเริ่มต้น

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

เริ่มต้นใช้งาน

หากต้องการเริ่มเพิ่มประสิทธิภาพในแอปที่มีอยู่ ให้ดูสร้างโปรไฟล์ พื้นฐาน

บิลด์โปรไฟล์เทียบกับบิลด์ที่เผยแพร่

คุณต้องเข้าใจความแตกต่างในการกำหนดค่าบิลด์ที่จำเป็นเมื่อ สร้าง ไฟล์โปรไฟล์พื้นฐานและโปรไฟล์การเริ่มต้น (เช่น baseline-prof.txt และ startup-prof.txt) เทียบกับเมื่อสร้าง APK ที่เผยแพร่ขั้นสุดท้ายซึ่งใช้โปรไฟล์เหล่านี้

เมื่อสร้างไฟล์โปรไฟล์ (เช่น benchmark):

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

เมื่อสร้าง APK ที่เผยแพร่ขั้นสุดท้าย:

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

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

  • ปลั๊กอิน Android Gradle: com.android.tools.build:8.0.0
  • Macrobenchmark Library: androidx.benchmark:benchmark-macro-junit4:1.4.1
  • Profile Installer: androidx.profileinstaller:profileinstaller:1.4.1

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

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

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

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

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

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

ต่อไปนี้เป็นคลาสตัวอย่างเพื่อสร้างโปรไฟล์พื้นฐานสำหรับการเริ่มต้นแอป รวมถึงเหตุการณ์การไปยังส่วนต่างๆ และการเลื่อนหลายรายการโดยใช้ Macrobenchmark Library ที่แนะนำ

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

คุณสามารถดูโค้ดนี้ในบริบทแบบเต็มและรายละเอียดเพิ่มเติมได้ในส่วนตัวอย่างประสิทธิภาพใน GitHub

ข้อมูลที่ต้องระบุ

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

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

ไลบรารีสามารถระบุโปรไฟล์พื้นฐานของตัวเองและเผยแพร่โปรไฟล์ดังกล่าวพร้อมกับเวอร์ชันที่เผยแพร่เพื่อปรับปรุงประสิทธิภาพของแอป ดูตัวอย่างได้ที่ส่วนใช้โปรไฟล์พื้นฐานใน ประสิทธิภาพของ Jetpack Compose

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

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

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

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

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

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

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

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

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

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

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

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

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

โปรไฟล์การเริ่มต้น

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

โปรไฟล์ Cloud

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

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

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

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

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 บางส่วน (โปรไฟล์พื้นฐาน + โปรไฟล์ Cloud) Play ใช้โปรไฟล์พื้นฐานระหว่างการติดตั้งแอปเพื่อเพิ่มประสิทธิภาพ APK และโปรไฟล์ Cloud (หากมี) หลังจากติดตั้งแล้ว ระบบจะอัปโหลดโปรไฟล์ ART ไปยัง Play รวบรวมโปรไฟล์ และเผยแพร่เป็นโปรไฟล์ Cloud ให้ผู้ใช้รายอื่นเมื่อติดตั้งหรืออัปเดตแอป

ปัญหาที่ทราบแล้ว

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

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

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

  • หากต้องการระบุโปรไฟล์พื้นฐานสำหรับไลบรารีให้สำเร็จ ให้ใช้ ปลั๊กอิน 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 อาจไม่รองรับการใช้โปรไฟล์พื้นฐานในการติดตั้ง ผู้ใช้แอปที่ติดตั้งผ่านช่องทางเหล่านี้จะไม่เห็นประโยชน์จนกว่า dexopt ในเบื้องหลังจะทำงาน ซึ่งมักจะเกิดขึ้นในชั่วข้ามคืน

  • การแชร์แอปภายในของ Play Store ไม่รองรับโปรไฟล์พื้นฐาน แต่ แทร็กการทดสอบภายใน รองรับ

  • การเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์บางเครื่อง เช่น อุปกรณ์ Huawei อาจรบกวนการติดตั้งโปรไฟล์ หากต้องการให้ติดตั้งโปรไฟล์ได้อย่างมีประสิทธิภาพ ให้ปิดการเพิ่มประสิทธิภาพแบตเตอรี่ในอุปกรณ์ทดสอบ

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

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