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

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

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

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

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

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

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

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

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

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

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

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

@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun appStartupAndUserJourneys() {
        baselineProfileRule.collect(packageName = PACKAGE_NAME) {
            // App startup journey.
            startActivityAndWait()

            device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
            device.findObject(By.res("myLazyColumn")).also {
                it.fling(Direction.DOWN)
                it.fling(Direction.UP)
            }
            device.pressBack()
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

โปรไฟล์ Cloud

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

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

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

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

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

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

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

  • การแชร์แอปภายในของ Play Store ไม่รองรับ Baseline Profile แต่แทร็กการทดสอบภายใน รองรับ

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

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