从历史上看,Android 仅支持 4 KB 内存页面大小,这优化了系统内存性能,以适应 Android 设备通常拥有的平均总内存量。从 Android 15 开始,AOSP 支持配置为使用 16 KB 页面大小的设备(16 KB 设备)。如果您的应用直接或通过 SDK 间接使用任何 NDK 库,则需要重新构建应用,才能在这些 16 KB 设备上运行。
随着设备制造商不断制造出具有更大物理内存 (RAM) 的设备,许多此类设备将采用 16 KB(最终甚至更大)的页面大小来优化设备性能。添加对 16 KB 页面大小设备的支持,可让您的应用在这些设备上运行,并帮助您的应用受益于相关的性能改进。如果不重新编译,应用将无法在未来 Android 版本的 16 KB 设备上运行。
为帮助您为应用添加支持,我们提供了相关指南,介绍了如何检查应用是否受到影响、如何重新构建应用(如果适用),以及如何使用模拟器(包括 Android 模拟器的 Android 15 系统映像)在 16 KB 环境中测试应用。
ประโยชน์และประสิทธิภาพที่เพิ่มขึ้น
配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:
- 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
- 应用启动期间的功耗降低:平均降低了 4.56%
- 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
- 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)
这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。
ตรวจสอบว่าแอปของคุณได้รับผลกระทบหรือไม่
如果您的应用使用了任何原生代码,则应重新构建应用,使其支持 16 KB 设备。如果您不确定自己的应用是否使用了原生代码,可以使用 APK 分析器来确定是否存在任何原生代码,然后检查您找到的任何共享库的 ELF 段对齐情况。Android Studio 还提供了一些功能,可帮助您自动检测对齐问题。
如果您的应用仅使用以 Java 或 Kotlin 编程语言编写的代码(包括所有库或 SDK),则该应用已支持 16 KB 设备。不过,我们建议您在 16 KB 环境中测试应用,以验证应用行为是否出现意外的回归。
แอปของคุณใช้โค้ดเนทีฟหรือไม่
แอปของคุณใช้โค้ดเนทีฟในกรณีต่อไปนี้
- แอปของคุณใช้โค้ด C/C++ (เนทีฟ) หากแอปใช้ Android NDK แสดงว่าแอปใช้โค้ดเนทีฟ
- แอปของคุณลิงก์กับไลบรารีแบบเนทีฟหรือทรัพยากร Dependency ของบุคคลที่สาม (เช่น SDK) ที่ใช้ไลบรารีหรือทรัพยากร Dependency ดังกล่าว
- แอปของคุณสร้างขึ้นโดยเครื่องมือสร้างแอปของบุคคลที่สามที่ใช้ไลบรารีแบบเนทีฟในอุปกรณ์
ระบุไลบรารีแบบเนทีฟโดยใช้ตัววิเคราะห์ 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 Manager ใน 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 Analyzer เรียกใช้คำสั่งต่อไปนี้ในแต่ละไฟล์ออบเจ็กต์ที่ใช้ร่วมกัน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 SDKSHARED_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 ของแอป บรรทัดสุดท้ายของเอาต์พุตจะระบุว่า "ยืนยันสำเร็จ" หาก ไลบรารีที่แชร์ทั้งหมดสอดคล้องกันอย่างถูกต้องหากการยืนยันไม่สำเร็จ คุณจะต้องปรับไลบรารีที่ใช้ร่วมกันบางรายการใหม่ ดังนั้น คุณจะต้องอัปเดตการแพ็กเกจสำหรับไลบรารีเหล่านั้น จากนั้น คอมไพล์แอปอีกครั้งและทดสอบอีกครั้งโดยทำตามขั้นตอนในส่วนนี้
สร้างแอปให้รองรับอุปกรณ์ขนาด 16 KB
หากแอปใช้โค้ดเนทีฟ ให้ทำตามขั้นตอนที่ระบุไว้ในส่วนต่อไปนี้เพื่อให้แน่ใจว่าแอปของคุณรองรับอุปกรณ์ขนาด 16 KB
- อัปเดตการแพ็กเกจไลบรารีที่ใช้ร่วมกัน
- คอมไพล์แอปโดยใช้การจัดวาง ELF ขนาด 16 KB
- แก้ไขโค้ดและแก้ปัญหาขณะรันไทม์
- ตรวจสอบว่า SDK รองรับขนาด 16 KB หรือไม่
อัปเดตการแพ็กเกจไลบรารีที่ใช้ร่วมกัน
เราขอแนะนำให้อัปเกรดเป็น AGP เวอร์ชัน 8.5.1 ขึ้นไปและใช้ ไลบรารีที่ใช้ร่วมกันแบบไม่บีบอัด
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 บีบอัดไลบรารีที่แชร์เมื่อแพ็กเกจแอปเพื่อหลีกเลี่ยงปัญหาการติดตั้งแอปที่มีไลบรารีที่แชร์ที่ไม่ได้จัดวาง
Groovy
เพิ่มตัวเลือกต่อไปนี้ในไฟล์ build.gradle
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Kotlin
เพิ่มตัวเลือกต่อไปนี้ในไฟล์ build.gradle.kts
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
คอมไพล์แอปโดยใช้การจัดวาง 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 ขึ้นไป คุณต้องอัปเดต ndk-build, build.gradle,
build.gradle.kts หรือแฟล็กของ Linker ดังนี้
ndk-build
ใน Application.mk ให้ทำดังนี้
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
Groovy
ในไฟล์ build.gradle ให้ตั้งค่าอาร์กิวเมนต์
-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON ดังนี้
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
}
}
}
}
Kotlin
ในไฟล์ build.gradle.kts ให้ตั้งค่าอาร์กิวเมนต์
-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON ดังนี้
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments += listOf("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON")
}
}
}
}
ระบบบิลด์อื่นๆ
ระบุแฟล็กของ Linker ต่อไปนี้
-Wl,-z,max-page-size=16384
Android NDK r26 และต่ำกว่า
อัปเดต NDK เสมอ ควรใช้เป็นทางเลือกสุดท้ายเท่านั้น และไม่รับประกันการสนับสนุน
หากต้องการรองรับการคอมไพล์ไลบรารีที่ใช้ร่วมกันซึ่งสอดคล้องกับขนาด 16 KB ด้วย Android NDK
เวอร์ชัน r26 หรือต่ำกว่า คุณต้องอัปเดตการกำหนดค่า ndk-build หรือ cmake
ดังนี้
ndk-build
อัปเดต Android.mk เพื่อเปิดใช้การจัดวาง ELF ขนาด 16 KB ดังนี้
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
CMake
อัปเดต CMakeLists.txt เพื่อเปิดใช้การจัดวาง ELF ขนาด 16 KB ดังนี้
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
Android NDK r22 และต่ำกว่า
อัปเดต NDK เสมอ ควรใช้เป็นทางเลือกสุดท้ายเท่านั้น และไม่รับประกันการสนับสนุน
นอกเหนือจากขั้นตอนที่ระบุไว้สำหรับ NDK r26 และต่ำกว่า คุณต้อง
ตั้งค่า common-page-size=16384 หากใช้ NDK r22 หรือต่ำกว่า ต้องตั้งค่า
common-page-size=16384เนื่องจากข้อบกพร่องในเวอร์ชันก่อนหน้าของ
GNU ld และตัวลิงก์ LLVM lld วิธีแก้ปัญหานี้สำหรับขนาดหน้าเว็บทั่วไปจะใช้ได้ก็ต่อเมื่อ ELF มีส่วน .relro_padding อยู่ด้วย (LLD 18 ขึ้นไป)
หากต้องการคอมไพล์ไลบรารีที่ใช้ร่วมกันที่รองรับ 16 KB ด้วย Android NDK
เวอร์ชัน r22 หรือต่ำกว่า ให้อัปเดตการกำหนดค่า ndk-build หรือ cmake ดังนี้
ndk-build
อัปเดต Android.mk เพื่อสร้าง ELF ที่รองรับขนาด 16 KB ดังนี้
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
LOCAL_LDFLAGS += "-Wl,-z,common-page-size=16384"
CMake
อัปเดต CMakeLists.txt เพื่อสร้าง ELF ที่รองรับขนาด 16 KB ดังนี้
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,common-page-size=16384")
แก้ไขโค้ดและแก้ปัญหาที่เกิดขึ้นขณะรันไทม์
แม้ว่าแอปจะได้รับการปรับให้มีขนาด 16 KB แล้ว แต่แอปก็อาจพบข้อผิดพลาดหากส่วนต่างๆ ในโค้ดของคุณคาดว่าอุปกรณ์ใช้ขนาดหน้าเว็บที่เฉพาะเจาะจง หากต้องการหลีกเลี่ยงปัญหานี้ ให้ทำตามขั้นตอนต่อไปนี้
นำการอ้างอิงที่ฮาร์ดโค้ดซึ่งอ้างอิงค่าคงที่
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 ที่สร้างไว้ล่วงหน้าบางรายการไม่รองรับ 16 KB คุณจึงควรตรวจสอบเว็บไซต์ของผู้ให้บริการ SDK แต่ละรายเพื่อดูว่าควรใช้ 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 Emulator ด้วยอิมเมจระบบที่อิงตาม 16 KB
หากต้องการตั้งค่าสภาพแวดล้อมแบบ 16 KB โดยใช้โปรแกรมจำลอง Android ให้ทำตามขั้นตอนต่อไปนี้
- ใน Android Studio ให้คลิกเครื่องมือ > SDK Manager
ในแท็บ SDK Platforms ให้เลือกShow Package Details จากนั้นขยาย ส่วน Android VanillaIceCream ขึ้นไป แล้วเลือกอิมเมจระบบโปรแกรมจำลองอย่างใดอย่างหนึ่งหรือทั้ง 2 รายการต่อไปนี้ โดยขึ้นอยู่กับอุปกรณ์เสมือนที่คุณต้องการสร้าง
- อิมเมจระบบ ARM 64 v8a ขนาดหน้า 16 KB ของ Google APIs Experimental
- Google APIs Experimental 16 KB Page Size Intel x86_64 Atom System รูปภาพ
คลิกใช้ > ตกลงเพื่อดาวน์โหลดอิมเมจระบบที่คุณเลือก
ทำตามขั้นตอนเพื่อตั้งค่าอุปกรณ์เสมือนสำหรับ Android 15 และเมื่อระบบ แจ้งให้เลือกอิมเมจระบบ ให้เลือกอิมเมจระบบ 16 KB ที่คุณ ดาวน์โหลด หากระบบไม่แนะนำโดยอัตโนมัติ คุณจะดูอิมเมจระบบขนาด 16 KB ได้ในแท็บอิมเมจอื่นๆ
เปิดโปรแกรมจำลอง
หลังจากตั้งค่า Android Emulator และอุปกรณ์เสมือนเสร็จแล้ว ให้เปิดใช้ โปรแกรมจำลองจากเมนูอุปกรณ์เป้าหมาย หรือจากบรรทัดคำสั่ง
เปิดใช้โหมด 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 Beta 2 ขึ้นไป)
โหมด 16 KB สำหรับความเข้ากันได้แบบย้อนหลัง
คำเตือนในโหมดความเข้ากันได้กับขนาดหน้า
ตัวเลือกความเข้ากันได้แบบย้อนหลัง 16 KB จะพร้อมใช้งานเมื่ออุปกรณ์ใช้ เคอร์เนลขนาด 16 KB Package Manager จะเรียกใช้แอปในโหมดความเข้ากันได้แบบย้อนกลับขนาด 16 KB เมื่อตรงตามเงื่อนไขต่อไปนี้
- หากแอปมีไฟล์ ELF (นามสกุล
.so) ที่มีการจัดแนวส่วน LOAD เป็น 4 KB - หาก APK ที่ซิปมีไฟล์ ELF ที่ไม่ได้บีบอัดซึ่งมีขนาด 4 KB และจัดเรียง ZIP
หาก Package Manager เปิดใช้โหมดความเข้ากันได้แบบย้อนกลับ 16 KB สำหรับ แอป แอปจะแสดงคำเตือนเมื่อเปิดใช้ครั้งแรกว่าแอป ทำงานในโหมดความเข้ากันได้แบบย้อนกลับ 16 KB
โหมดความเข้ากันได้แบบย้อนหลังขนาด 16 KB ช่วยให้แอปบางแอปทำงานได้ แต่เพื่อให้แอปมีความน่าเชื่อถือและเสถียรภาพดีที่สุด แอปควรยังคงสอดคล้องกับขนาด 16 KB
ในหน้าข้อมูลแอป ให้สลับการตั้งค่าเรียกใช้แอปด้วยโหมดความเข้ากันได้กับขนาดหน้าในส่วนขั้นสูงเพื่อเปิดหรือปิดใช้โหมดความเข้ากันได้แบบย้อนหลัง 16 KB สำหรับแอปที่เฉพาะเจาะจง การตั้งค่านี้จะปรากฏขึ้นเมื่ออุปกรณ์ทำงานด้วย หน้าหน่วยความจำขนาด 16 KB เท่านั้น
การตั้งค่าโหมดเข้ากันได้กับขนาดหน้า
หากต้องการบังคับให้ใช้การรองรับการทำงานร่วมกันแบบย้อนหลังขนาด 16 KB สำหรับทุกแอปในอุปกรณ์ ให้ทำดังนี้
adb shell setprop bionic.linker.16kb.app_compat.enabled true
adb shell setprop pm.16kb.app_compat.disabled false
วิธีปิดการรองรับเวอร์ชันเก่าขนาด 16 KB สำหรับทุกแอปในอุปกรณ์
adb shell setprop bionic.linker.16kb.app_compat.enabled false
adb shell setprop pm.16kb.app_compat.disabled true
ตั้งค่าพร็อพเพอร์ตี้ android:pageSizeCompat เป็นเปิดใช้หรือปิดใช้เพื่อเปิดหรือปิดโหมดความเข้ากันได้แบบย้อนหลังสำหรับแอปที่เฉพาะเจาะจงใน AndroidManifest.xml เมื่อตั้งค่าพร็อพเพอร์ตี้นี้ แอปจะไม่แสดงคำเตือนเกี่ยวกับโหมด Backcompat เมื่อเปิดตัว
ข้อกำหนดความเข้ากันได้ของ Google Play
เนื่องจากผู้ผลิตอุปกรณ์ติดตั้ง RAM เพิ่มเติมในอุปกรณ์เพื่อเพิ่มประสิทธิภาพ ผู้ผลิตหลายรายจึงจะใช้ขนาดหน้าหน่วยความจำที่ใหญ่ขึ้น เช่น 16 KB Google Play ขอแนะนำข้อกำหนดใหม่ด้านความเข้ากันได้เพื่อเตรียมพร้อมสำหรับการเปิดตัวอุปกรณ์ที่กำลังจะมาถึงเหล่านี้ โดยตั้งแต่วันที่ 1 พฤศจิกายน 2025 เป็นต้นไป แอปใหม่ทั้งหมดและการอัปเดตแอปที่มีอยู่ซึ่งส่งไปยัง Google Play และกำหนดเป้าหมายเป็นอุปกรณ์ที่ใช้ Android 15 (API ระดับ 35) ขึ้นไปจะต้องรองรับหน้าหน่วยความจำขนาด 16 KB
ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อกำหนดด้านความเข้ากันได้นี้ได้ในบล็อกโพสต์นี้