ในอดีต Android รองรับเฉพาะหน้าหน่วยความจำขนาด 4 KB ซึ่งได้ เพิ่มประสิทธิภาพหน่วยความจำของระบบสำหรับปริมาณหน่วยความจำทั้งหมดโดยเฉลี่ยที่ อุปกรณ์ Android มักจะมี ตั้งแต่ Android 15 เป็นต้นไป AOSP จะรองรับ อุปกรณ์ที่กำหนดค่าให้ใช้หน้าขนาด 16 KB (อุปกรณ์ 16 KB) หากแอปใช้ไลบรารี NDK ไม่ว่าจะโดยตรงหรือโดยอ้อมผ่าน SDK คุณจะต้องสร้างแอปใหม่เพื่อให้ทำงานในอุปกรณ์ที่มีขนาด 16 KB เหล่านี้ได้
เนื่องจากผู้ผลิตอุปกรณ์ยังคงสร้างอุปกรณ์ที่มีหน่วยความจำจริง (RAM) มากขึ้น อุปกรณ์จำนวนมากเหล่านี้จะใช้ขนาดหน้า 16 KB (และในที่สุดก็จะใหญ่ขึ้น) เพื่อเพิ่มประสิทธิภาพของอุปกรณ์ การเพิ่มการรองรับอุปกรณ์ที่มีขนาดหน้า 16 KB จะช่วยให้แอปของคุณทำงานบนอุปกรณ์เหล่านี้ได้ และช่วยให้แอปได้รับประโยชน์จากการปรับปรุงประสิทธิภาพที่เกี่ยวข้อง หากไม่มีการคอมไพล์ใหม่ แอปจะใช้ไม่ได้ในอุปกรณ์แบบ 16 KB ใน Android รุ่นต่อๆ ไป
เราได้ให้คำแนะนำเกี่ยวกับวิธีตรวจสอบว่าแอปได้รับผลกระทบหรือไม่ วิธีสร้างแอปใหม่ (หากมี) และวิธีทดสอบแอปในสภาพแวดล้อมแบบ 16 KB โดยใช้โปรแกรมจำลอง (รวมถึงอิมเมจระบบ Android 15 สำหรับ Android Emulator) เพื่อช่วยให้คุณเพิ่มการรองรับแอปได้
ประโยชน์และการปรับปรุงประสิทธิภาพ
อุปกรณ์ที่กำหนดค่าหน้าเว็บขนาด 16 KB จะใช้หน่วยความจำโดยเฉลี่ยมากกว่าเล็กน้อย แต่ปรับปรุงประสิทธิภาพการทำงานได้หลากหลายสำหรับทั้งระบบและแอป ดังนี้
- เวลาเปิดแอปลดลงขณะที่ระบบมีภาระเกี่ยวกับหน่วยความจำ: ลดลงโดยเฉลี่ย 3.16% โดยการปรับปรุงที่เห็นได้ชัดมากขึ้น (สูงสุด 30%) สำหรับบางแอปที่เราทดสอบ
- การลดพลังงานในระหว่างการเปิดแอป: ลดลง 4.56% โดยเฉลี่ย
- การเปิดตัวกล้องเร็วขึ้น: Hot Start เร็วขึ้น 4.48% โดยเฉลี่ย และ Cold Start เร็วขึ้น 6.60% โดยเฉลี่ย
- ปรับปรุงเวลาในการบูตระบบ: เร็วขึ้น 8% (ประมาณ 950 มิลลิวินาที) โดยเฉลี่ย
การปรับปรุงเหล่านี้อิงตามการทดสอบขั้นต้นของเรา และผลลัพธ์ในอุปกรณ์จริงอาจแตกต่างกัน เราจะให้การวิเคราะห์เพิ่มเติมเกี่ยวกับโอกาสในการได้ผู้ใช้ใหม่สำหรับแอปขณะที่เราทำการทดสอบต่อไป
ตรวจสอบว่าแอปของคุณได้รับผลกระทบหรือไม่
หากแอปใช้โค้ดเนทีฟ คุณควรสร้างแอปใหม่ ให้รองรับอุปกรณ์ขนาด 16 KB หากไม่แน่ใจว่าแอปใช้โค้ดเนทีฟหรือไม่ คุณสามารถใช้ APK Analyzer เพื่อระบุว่ามีโค้ดเนทีฟหรือไม่ จากนั้นตรวจสอบการจัดแนวของส่วน ELF สำหรับไลบรารีที่ใช้ร่วมกันที่คุณพบ Android Studio ยังมีฟีเจอร์ที่จะช่วยให้คุณตรวจหาปัญหาการจัดแนวโดยอัตโนมัติได้ด้วย
หากแอปใช้เฉพาะโค้ดที่เขียนในภาษาโปรแกรม Java หรือ Kotlin ซึ่งรวมถึงไลบรารีหรือ SDK ทั้งหมด แสดงว่าแอปของคุณรองรับอุปกรณ์ขนาด 16 KB อยู่แล้ว อย่างไรก็ตาม เราขอแนะนำให้คุณทดสอบแอปในสภาพแวดล้อมแบบ 16 KB เพื่อยืนยันว่าไม่มีการถดถอยที่ไม่คาดคิดในลักษณะการทำงานของแอป
แอปของคุณใช้โค้ดแบบเนทีฟหรือไม่
แอปของคุณใช้โค้ดแบบเนทีฟหากตรงกับข้อใดข้อหนึ่งต่อไปนี้
- แอปของคุณใช้โค้ด C/C++ (เนทีฟ) หากแอปของคุณใช้ Android NDK แสดงว่าแอปใช้โค้ดแบบเนทีฟ
- แอปของคุณลิงก์กับไลบรารีหรือทรัพยากร Dependency แบบเนทีฟของบุคคลที่สาม (เช่น SDK) ที่ใช้โค้ดเนทีฟ
- แอปของคุณสร้างขึ้นโดยเครื่องมือสร้างแอปของบุคคลที่สามที่ใช้ไลบรารีแบบเนทีฟในอุปกรณ์
ระบุไลบรารีแบบเนทีฟโดยใช้ตัววิเคราะห์ APK
ตัววิเคราะห์ APK เป็นเครื่องมือที่ช่วยให้คุณประเมินแง่มุมต่างๆ ของ APK ที่สร้างขึ้น วิธีตรวจสอบว่าแอปของคุณใช้โค้ดแบบเนทีฟหรือไม่ (ไม่ว่าแอปจะรองรับขนาด 16 KB หรือไม่)
- เปิด Android Studio แล้วคลิก ไฟล์ > เปิด แล้วเลือกโปรเจ็กต์ใดก็ได้
จากแถบเมนู ให้คลิกบิวด์ > วิเคราะห์ APK...
เลือก APK ที่ต้องการวิเคราะห์
ดูในโฟลเดอร์
libซึ่งเป็นที่เก็บไฟล์ออบเจ็กต์ที่แชร์ (.so) หากมี หากมีไฟล์ออบเจ็กต์ที่แชร์ แสดงว่าแอปของคุณใช้โค้ดเนทีฟ คอลัมน์ การจัดตำแหน่ง จะแสดงข้อความเตือนสำหรับไฟล์ที่มีปัญหาการจัดตำแหน่ง หากไม่มีไฟล์ออบเจ็กต์ที่แชร์หรือไม่มีโฟลเดอร์libแสดงว่าแอปของคุณไม่ได้ใช้โค้ดแบบเนทีฟ
ตรวจหาปัญหาการจัดตำแหน่งด้วยการตรวจสอบอัตโนมัติ
Android Studio จะเตือนคุณล่วงหน้าหากไลบรารีหรือ APK ที่สร้างไว้ล่วงหน้าไม่เป็นไปตามข้อกำหนดขนาด 16 KB ใช้เครื่องมือ APK Analyzer เพื่อตรวจสอบว่าไลบรารีใดต้องได้รับการ อัปเดตหรือต้องมีการเปลี่ยนแปลงโค้ดหรือไม่
Lint ใน Android Studio จะไฮไลต์ไลบรารีแบบเนทีฟที่ ไม่ได้จัดตำแหน่งขนาด 16 KB ด้วย
ตรวจสอบการจัดตำแหน่งของส่วน ELF สำหรับไลบรารีที่ใช้ร่วมกัน
สำหรับไลบรารีที่ใช้ร่วมกัน ให้ตรวจสอบว่าส่วน ELF ของไลบรารีที่ใช้ร่วมกันได้รับการจัดตำแหน่งอย่างถูกต้องโดยใช้การจัดตำแหน่ง ELF ขนาด 16 KB หากคุณพัฒนาแอปใน Linux หรือ macOS คุณสามารถใช้สคริปต์ check_elf_alignment.sh ตามที่อธิบายไว้ในส่วนต่อไปนี้ นอกจากนี้ คุณยังใช้เครื่องมือบรรทัดคำสั่งได้โดยตรง
ใช้สคริปต์ check_elf_alignment.sh (Linux หรือ macOS)
ทำตามขั้นตอนต่อไปนี้เพื่อตรวจสอบการจัดตำแหน่งของส่วน ELF โดยใช้สคริปต์ check_elf_alignment.sh
บันทึกสคริปต์
check_elf_alignment.shลงในไฟล์เรียกใช้สคริปต์ในไฟล์ APK ของแอป
check_elf_alignment.sh APK_NAME.apkสคริปต์จะแสดงผลเป็น
ALIGNEDหรือUNALIGNEDสำหรับarm64-v8aไลบรารีที่ใช้ร่วมกันทั้งหมดหากไลบรารีที่ใช้ร่วมกัน
arm64-v8aหรือx86_64เป็นUNALIGNEDคุณจะต้อง อัปเดตการแพ็กเกจสำหรับไลบรารีเหล่านั้น จากนั้นคอมไพล์แอป อีกครั้งและทดสอบอีกครั้งโดยทำตามขั้นตอนในส่วนนี้
ใช้เครื่องมือบรรทัดคำสั่งโดยตรง
ทำตามขั้นตอนต่อไปนี้เพื่อตรวจสอบการจัดตำแหน่งของส่วน ELF โดยใช้เครื่องมือบรรทัดคำสั่งโดยตรง
- ตรวจสอบว่าได้ติดตั้งทั้งเครื่องมือสร้าง Android SDK เวอร์ชัน 35.0.0 ขึ้นไปและ Android NDK โดยใช้ เครื่องมือจัดการ SDK ใน Android Studio หรือ
sdkmanagerเครื่องมือบรรทัดคำสั่ง แยกไฟล์ APK ของแอป
Linux หรือ macOS
unzip APK_NAME.apk -d /tmp/my_apk_outWindows (PowerShell)
Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_outในไดเรกทอรีชั่วคราวที่คุณแยกไฟล์ APK ให้ตรวจสอบเนื้อหาของไดเรกทอรี
libสำหรับไฟล์ออบเจ็กต์ที่แชร์ (.so) ไฟล์เหล่านี้เป็น ไฟล์ออบเจ็กต์ที่แชร์เดียวกันกับที่คุณเห็นขณะระบุ ไลบรารีแบบเนทีฟโดยใช้ตัววิเคราะห์ APK เรียกใช้คำสั่งต่อไปนี้ในไฟล์ออบเจ็กต์ที่แชร์แต่ละไฟล์Linux หรือ macOS
SDK_ROOT_LOCATION/Android/sdk/ndk/NDK_VERSION/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-objdump -p SHARED_OBJECT_FILE.so | grep LOADWindows (PowerShell)
SDK_ROOT_LOCATION\Android\sdk\ndk\NDK_VERSION\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-objdump.exe -p SHARED_OBJECT_FILE.so | Select-String -Pattern "LOAD"โดยที่
SDK_ROOT_LOCATIONคือเส้นทางไปยังไดเรกทอรีที่คุณติดตั้ง Android SDK,SHARED_OBJECT_FILEคือชื่อของไฟล์ออบเจ็กต์ที่แชร์ที่คุณกำลังตรวจสอบ และNDK_VERSIONคือเวอร์ชันของ Android NDK ที่คุณติดตั้ง (เช่น28.0.12433566) เอาต์พุตจะมีลักษณะคล้ายกับเอาต์พุตต่อไปนี้สำหรับแต่ละไฟล์ที่คุณตรวจสอบLOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**14 LOAD off 0x0000000000042a90 vaddr 0x0000000000043a90 paddr 0x0000000000043a90 align 2**14 LOAD off 0x0000000000046230 vaddr 0x0000000000048230 paddr 0x0000000000048230 align 2**14ตรวจสอบบรรทัดเอาต์พุตเพื่อให้แน่ใจว่าส่วนโหลดมีค่าไม่น้อยกว่า
2**14หากส่วนโหลดมีค่า2**13,2**12หรือค่าต่ำกว่า คุณจะต้องอัปเดตการแพ็กเกจสำหรับไลบรารีเหล่านั้น จากนั้น คอมไพล์แอปอีกครั้ง และทดสอบอีกครั้งโดยทำตามขั้นตอนในส่วนนี้จากนั้นเรียกใช้เครื่องมือบรรทัดคำสั่ง
zipalignในไฟล์ APK ของแอปLinux หรือ macOS
SDK_ROOT_LOCATION/Android/sdk/build-tools/35.0.0/zipalign -v -c -P 16 4 APK_NAME.apkWindows (PowerShell)
SDK_ROOT_LOCATION\Android\sdk\build-tools\35.0.0\zipalign.exe -v -c -P 16 4 APK_NAME.apkโดยที่
SDK_ROOT_LOCATIONคือเส้นทางไปยังไดเรกทอรีที่คุณติดตั้ง Android SDK และAPK_NAMEคือชื่อของไฟล์ APK ของแอป บรรทัดสุดท้ายของเอาต์พุตจะแสดงข้อความ "Verification successful" หากไลบรารีที่ใช้ร่วมกันทั้งหมดได้รับการจัดตำแหน่งอย่างถูกต้องหากการยืนยันไม่สำเร็จ แสดงว่าไลบรารีที่ใช้ร่วมกันบางรายการต้องได้รับการจัดตำแหน่งใหม่ ดังนั้น คุณจะต้องอัปเดตการแพ็กเกจสำหรับไลบรารีเหล่านั้น จากนั้น คอมไพล์แอปอีกครั้งและทดสอบอีกครั้งโดยทำตามขั้นตอนในส่วนนี้
สร้างแอปที่รองรับอุปกรณ์ขนาด 16 KB
หากแอปของคุณใช้โค้ดแบบเนทีฟ ให้ทำตามขั้นตอนที่ระบุไว้ในส่วนต่อไปนี้เพื่อให้แน่ใจว่าแอปของคุณรองรับอุปกรณ์ขนาด 16 KB
- อัปเดตการแพ็กเกจของไลบรารีที่ใช้ร่วมกัน
- คอมไพล์แอปโดยใช้การจัดตำแหน่ง ELF ขนาด 16 KB
- แก้ไขโค้ดและแก้ปัญหาที่รันไทม์
- ตรวจสอบว่า SDK รองรับขนาด 16 KB หรือไม่
อัปเดตการแพ็กเกจของไลบรารีที่ใช้ร่วมกัน
อัปเกรดเป็น AGP เวอร์ชัน 8.5.1 ขึ้นไปและใช้ไลบรารีที่ใช้ร่วมกันซึ่งไม่ได้บีบอัด
ใช้ bundletool เพื่อยืนยันการจัดตำแหน่ง zip
หากต้องการดูการจัดตำแหน่งของ Bundle ให้ใช้คำสั่งต่อไปนี้
bundletool dump config --bundle=<my .aab> | grep alignment
หากเห็น PAGE_ALIGNMENT_16K แสดงว่า Bundle ของคุณขอการจัดตำแหน่ง zip ขนาด 16 KB หากเห็น PAGE_ALIGNMENT_4K แสดงว่าคำสั่งนี้จะกำหนดให้ APK ที่สร้างจาก AAB นี้มีไฟล์ .so ที่จัดตำแหน่งขนาด 4 KB ในไฟล์ zip
AGP เวอร์ชัน 8.5.1 ขึ้นไป
อุปกรณ์ขนาด 16 KB กำหนดให้แอปที่มาพร้อมกับไลบรารีที่ใช้ร่วมกันซึ่งไม่ได้บีบอัดต้องจัดตำแหน่งไลบรารีเหล่านั้นในขอบเขตที่จัดตำแหน่ง zip ขนาด 16 KB หากต้องการทำเช่นนี้ คุณต้องอัปเกรดเป็นปลั๊กอิน Android Gradle (AGP) เวอร์ชัน 8.5.1 ขึ้นไป ดูรายละเอียดเกี่ยวกับกระบวนการอัปเกรดได้ในส่วนผู้ช่วยอัปเกรดปลั๊กอิน Android Gradle
AGP เวอร์ชัน 8.5 ลงไป
หากอัปเกรด AGP เป็นเวอร์ชัน 8.5.1 ขึ้นไปไม่ได้ คุณสามารถเปลี่ยนไปใช้ไลบรารีที่ใช้ร่วมกันซึ่งบีบอัดแล้วแทน อัปเดตการกำหนดค่า Gradle เพื่อให้ Gradle บีบอัดไลบรารีที่ใช้ร่วมกันเมื่อแพ็กเกจแอป เพื่อหลีกเลี่ยงปัญหาการติดตั้งแอปกับไลบรารีที่ใช้ร่วมกันซึ่งไม่ได้จัดตำแหน่ง
ดึงดูด
เพิ่มตัวเลือกต่อไปนี้ในไฟล์ build.gradle
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Kotlin
เพิ่มตัวเลือกต่อไปนี้ในไฟล์ build.gradle.kts
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
AGP เวอร์ชัน 8.0 ลงไป
หากคุณใช้ AGP เวอร์ชัน 8.0 หรือต่ำกว่า คุณจะต้องปิดใช้ตัวเลือกไลบรารีแบบเนทีฟที่ไม่ได้บีบอัดสำหรับ App Bundle ในไฟล์ gradle.properties ด้วย
android.bundle.enableUncompressedNativeLibs=false
คอมไพล์แอปโดยใช้การจัดตำแหน่ง ELF ขนาด 16 KB
อุปกรณ์ขนาด 16 KB กำหนดให้ส่วน ELF ของไลบรารีที่ใช้ร่วมกันต้องได้รับการจัดตำแหน่งอย่างถูกต้องโดยใช้การจัดตำแหน่ง ELF ขนาด 16 KB เพื่อให้แอปทำงานได้
สำหรับนักพัฒนาเกม หากเกมของคุณทำงานบนเกมเอนจิน Unity โปรดดูคู่มือ Unity หากเกมของคุณทำงานบน เกมเอนจิน Unreal, โปรดดู คู่มือ Unreal สำหรับเอนจินเกมแบบเนทีฟ ให้ทำตามคู่มือนี้ต่อไป
หากต้องการคอมไพล์แอปโดยใช้การจัดตำแหน่ง ELF ขนาด 16 KB ให้ทำตามขั้นตอนในส่วนใดส่วนหนึ่งต่อไปนี้ ทั้งนี้ขึ้นอยู่กับเวอร์ชันของ Android NDK ที่คุณใช้
Android NDK r28 ขึ้นไป
NDK เวอร์ชัน r28 ขึ้นไปจะคอมไพล์โดยจัดตำแหน่งขนาด 16 KB โดยค่าเริ่มต้น
Android NDK r27 ลงไป
หากต้องการรองรับการคอมไพล์ไลบรารีที่ใช้ร่วมกันซึ่งจัดตำแหน่งขนาด 16 KB ด้วย Android NDK เวอร์ชัน r27 ลงไป ให้ใช้แฟล็ก Linker ต่อไปนี้
-Wl,-z,max-page-size=16384
-Wl,-z,common-page-size=16384
วิธีอัปเดตไฟล์การกำหนดค่าระบบบิวด์
ndk-build
หากใช้ ndk-build ให้อัปเดต Android.mk เพื่อเปิดใช้การจัดตำแหน่ง ELF ขนาด 16 KB
LOCAL_LDFLAGS += -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384
CMake
หากใช้ CMake ให้อัปเดต CMakeLists.txt เพื่อเปิดใช้การจัดตำแหน่ง ELF ขนาด 16 KB
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
"-Wl,-z,max-page-size=16384"
"-Wl,-z,common-page-size=16384"
)
แก้ไขโค้ดและแก้ปัญหาที่รันไทม์
แม้ว่าแอปของคุณจะได้รับการจัดตำแหน่งขนาด 16 KB แล้ว แต่แอปก็อาจพบข้อผิดพลาดได้หากส่วนต่างๆ ในโค้ดของคุณสันนิษฐานว่าอุปกรณ์ใช้ขนาดหน้าหนึ่งๆ หากต้องการหลีกเลี่ยงปัญหานี้ ให้ทำตามขั้นตอนต่อไปนี้
นำทรัพยากร Dependency ที่ฮาร์ดโค้ดซึ่งอ้างอิงค่าคงที่
PAGE_SIZEหรืออินสแตนซ์ในตรรกะโค้ดที่สันนิษฐานว่าขนาดหน้าของอุปกรณ์คือ 4 KB (4096) ออกให้ใช้
getpagesize()หรือsysconf(_SC_PAGESIZE)แทนมองหาการใช้งาน
mmap()และ API อื่นๆ ที่ต้องใช้การจัดตำแหน่งหน้า เป็นอาร์กิวเมนต์ แล้วแทนที่ด้วยตัวเลือกอื่นหากจำเป็น
ในบางกรณี หากแอปของคุณใช้ PAGE_SIZE เป็นค่าที่สะดวกซึ่งไม่ได้เชื่อมโยงกับขนาดหน้าพื้นฐาน การดำเนินการนี้จะไม่ทำให้แอปหยุดทำงานเมื่อใช้ในโหมด 16 KB อย่างไรก็ตาม หากค่านี้ส่งไปยังเคอร์เนลด้วย mmap โดยไม่มี MAP_FIXED เคอร์เนลจะยังคงใช้ทั้งหน้า ซึ่งทำให้สิ้นเปลืองหน่วยความจำ ด้วยเหตุนี้ PAGE_SIZE จึงไม่กำหนดไว้เมื่อเปิดใช้โหมด 16 KB ใน NDK เวอร์ชัน r27 ขึ้นไป
หากแอปของคุณใช้ PAGE_SIZE ในลักษณะนี้และไม่เคยส่งค่านี้ไปยังเคอร์เนลโดยตรง ให้สร้างตัวแปรใหม่ที่มีชื่อใหม่แทนการใช้ PAGE_SIZE เพื่อแสดงว่าตัวแปรนี้ใช้เพื่อวัตถุประสงค์อื่นและไม่ได้แสดงถึงหน้าหน่วยความจำจริง
ตรวจสอบว่า SDK รองรับขนาด 16 KB หรือไม่
SDK หลายรายการเข้ากันได้กับขนาดหน้า 16 KB โดยเฉพาะอย่างยิ่งหากคุณสร้าง SDK เองหรือใช้ SDK ที่สร้างไว้ล่วงหน้ารุ่นล่าสุด อย่างไรก็ตาม เนื่องจาก SDK ที่สร้างไว้ล่วงหน้าหรือ SDK บางเวอร์ชันไม่เข้ากันได้กับขนาด 16 KB คุณจึงควรตรวจสอบเว็บไซต์ของผู้ให้บริการ SDK แต่ละรายเพื่อดูว่าควรใช้เวอร์ชันใดกับขนาด 16 KB
ทดสอบแอปในสภาพแวดล้อมขนาด 16 KB
หลังจากสร้างแอปที่รองรับอุปกรณ์ขนาด 16 KB แล้ว คุณควรทดสอบแอปในสภาพแวดล้อมขนาด 16 KB เพื่อดูว่าแอปของคุณพบการถดถอยหรือไม่ โดยทำตามขั้นตอนต่อไปนี้
ตั้งค่า Android 15 SDK ขึ้นไป
ตั้งค่าสภาพแวดล้อมการทดสอบอย่างใดอย่างหนึ่งต่อไปนี้
เริ่มอุปกรณ์ทดสอบ จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อยืนยันว่าอุปกรณ์ใช้สภาพแวดล้อมขนาด 16 KB
adb shell getconf PAGE_SIZEคำสั่งควรแสดงผลเป็นค่า
16384เรียกใช้คำสั่ง
zipalignต่อไปนี้เพื่อยืนยันว่าแอปของคุณได้รับการจัดตำแหน่งขนาด 16 KB โดยที่ APK_NAME คือชื่อของ ไฟล์ APK ของแอปzipalign -c -P 16 -v 4 APK_NAME.apkทดสอบแอปอย่างละเอียด โดยเน้นที่ส่วนต่างๆ ที่อาจได้รับผลกระทบจาก การเปลี่ยนอินสแตนซ์โค้ดที่อ้างอิงขนาดหน้าหนึ่งๆ
ตั้งค่าโปรแกรมจำลองของ Android ด้วยอิมเมจระบบแบบ 16 KB
หากต้องการตั้งค่าสภาพแวดล้อมขนาด 16 KB โดยใช้โปรแกรมจำลองของ Android ให้ทำตามขั้นตอนต่อไปนี้
- ใน Android Studio ให้คลิกเครื่องมือ > เครื่องมือจัดการ SDK
ในแท็บ SDK Platforms ให้เลือก แสดงรายละเอียดแพ็กเกจ จากนั้นขยาย ส่วน Android VanillaIceCream ขึ้นไป แล้วเลือกอิมเมจระบบโปรแกรมจำลองอย่างใดอย่างหนึ่งหรือทั้งสองอย่างต่อไปนี้ ทั้งนี้ขึ้นอยู่กับอุปกรณ์เสมือนที่คุณ ต้องการสร้าง:
- อิมเมจระบบ Google APIs Experimental 16 KB Page Size ARM 64 v8a
- อิมเมจระบบ Google APIs Experimental 16 KB Page Size Intel x86_64 Atom
คลิกใช้ > ตกลง เพื่อดาวน์โหลดอิมเมจระบบที่คุณเลือก
ทำตามขั้นตอนเพื่อตั้งค่าอุปกรณ์เสมือนจริงสำหรับ Android 15 และเมื่อระบบแจ้งให้เลือกอิมเมจระบบ ให้เลือกอิมเมจระบบขนาด 16 KB ที่คุณดาวน์โหลด หากระบบไม่แนะนำโดยอัตโนมัติ คุณจะค้นหาอิมเมจระบบขนาด 16 KB ได้ในแท็บอิมเมจอื่นๆ
เปิดใช้โปรแกรมจำลอง
หลังจากตั้งค่าโปรแกรมจำลองของ Android และอุปกรณ์เสมือนเสร็จแล้ว ให้เปิดใช้ โปรแกรมจำลอง จากเมนูอุปกรณ์เป้าหมาย หรือ จากบรรทัดคำสั่ง
เปิดใช้โหมด 16 KB ในอุปกรณ์โดยใช้ตัวเลือกสำหรับนักพัฒนาแอป
สลับตัวเลือกสำหรับนักพัฒนาแอปบูตโดยใช้หน้าหน่วยความจำขนาด 16 KB เพื่อบูตอุปกรณ์ในโหมด 16 KB
ใน Android 15 เวอร์ชัน QPR คุณสามารถใช้ตัวเลือกสำหรับนักพัฒนาแอปที่มีในอุปกรณ์บางรุ่นเพื่อบูตอุปกรณ์ในโหมด 16 KB และทำการทดสอบในอุปกรณ์ได้ ก่อนใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ ให้ไปที่การตั้งค่า > ระบบ > การอัปเดตซอฟต์แวร์ แล้วใช้การอัปเดตที่มี
ตัวเลือกสำหรับนักพัฒนาแอปนี้พร้อมใช้งานในอุปกรณ์ต่อไปนี้
Pixel 8 และ 8 Pro (ที่ใช้ Android 15 QPR1 ขึ้นไป)
Pixel 8a (ใช้ Android 15 QPR1 ขึ้นไป)
Pixel 9, 9 Pro และ 9 Pro XL (ใช้ Android 15 QPR2 ขึ้นไป)
Pixel 9a (ใช้ Android 16 ขึ้นไป)
โหมด Backcompat ขนาด 16 KB
คำเตือนในโหมดความเข้ากันได้กับขนาดหน้า
ตัวเลือก Backcompat ขนาด 16 KB จะใช้ได้เมื่ออุปกรณ์ทำงานด้วยเคอร์เนลขนาด 16 KB ตัวจัดการแพ็กเกจจะเรียกใช้แอปในโหมด Backcompat ขนาด 16 KB เมื่อเป็นไปตามเงื่อนไขต่อไปนี้
- หากแอปมีไฟล์ ELF (ที่มีนามสกุล
.so) ที่มีการจัดตำแหน่งส่วน LOAD ขนาด 4 KB - หาก APK ที่บีบอัดมีไฟล์ ELF ที่ไม่ได้บีบอัดซึ่งจัดตำแหน่ง zip ขนาด 4 KB
หากตัวจัดการแพ็กเกจเปิดใช้โหมด Backcompat ขนาด 16 KB สำหรับแอป แอปจะแสดงคำเตือนเมื่อเปิดใช้ครั้งแรกว่าแอปกำลังทำงานในโหมด Backcompat ขนาด 16 KB
โหมด Backcompat ขนาด 16 KB ช่วยให้แอปบางแอปทำงานได้ แต่แอปควรได้รับการจัดตำแหน่งขนาด 16 KB เพื่อความน่าเชื่อถือและความเสถียรสูงสุด
ในหน้าข้อมูลแอป ให้สลับการตั้งค่าเรียกใช้แอปด้วย โหมดความเข้ากันได้กับขนาดหน้า ในส่วนขั้นสูง เพื่อเปิดหรือปิดใช้โหมด Backcompat ขนาด 16 KB สำหรับแอปที่เฉพาะเจาะจง การตั้งค่านี้จะปรากฏขึ้นเมื่ออุปกรณ์ทำงานด้วย ขนาดหน้า 16 KB เท่านั้น
การตั้งค่าโหมดความเข้ากันได้กับขนาดหน้า
วิธีบังคับเปิดใช้ Backcompat ขนาด 16 KB สำหรับทุกแอปในอุปกรณ์
adb shell setprop bionic.linker.16kb.app_compat.enabled true
adb shell setprop pm.16kb.app_compat.disabled false
วิธีบังคับปิดใช้ Backcompat ขนาด 16 KB สำหรับทุกแอปในอุปกรณ์
adb shell setprop bionic.linker.16kb.app_compat.enabled false
adb shell setprop pm.16kb.app_compat.disabled true
ใน Android 17 คุณยังบังคับปิดใช้ Backcompat ขนาด 16 KB สำหรับทุกแอปและทำให้ไบนารีที่ไม่เข้ากันหยุดทำงานทันทีได้ด้วย
adb shell setprop bionic.linker.16kb.app_compat.enabled fatal
adb shell setprop pm.16kb.app_compat.disabled true
ตั้งค่าพร็อพเพอร์ตี้ android:pageSizeCompat เป็นเปิดใช้หรือปิดใช้เพื่อเปิดหรือปิดโหมด Backcompat สำหรับแอปที่เฉพาะเจาะจงใน AndroidManifest.xml ของแอป เมื่อตั้งค่าพร็อพเพอร์ตี้นี้ แอปจะไม่แสดงคำเตือนโหมด Backcompat เมื่อเปิดใช้
ข้อกำหนดความเข้ากันได้กับ Google Play
เนื่องจากผู้ผลิตอุปกรณ์ติดตั้ง RAM เพิ่มเติมในอุปกรณ์เพื่อเพิ่มประสิทธิภาพ อุปกรณ์จำนวนมากจึงจะใช้ขนาดหน้าใหญ่ขึ้น เช่น 16 KB เพื่อเตรียมพร้อมสำหรับการเปิดตัวอุปกรณ์ที่จะมาถึงเหล่านี้ Google Play จึงขอแนะนำข้อกำหนดความเข้ากันได้ใหม่ โดยตั้งแต่วันที่ 1 พฤศจิกายน 2025 เป็นต้นไป แอปใหม่ทั้งหมดและการอัปเดตแอปที่มีอยู่ซึ่งส่งไปยัง Google Play และกำหนดเป้าหมายเป็นอุปกรณ์ที่ใช้ Android 15 (API ระดับ 35) ขึ้นไปจะต้องรองรับขนาดหน้า 16 KB
อ่านเพิ่มเติมเกี่ยวกับข้อกำหนดความเข้ากันได้นี้ได้ในบล็อกโพสต์นี้