////////////////////////////////////////////////////6 KB 页面大小页面大小是 OS 管理内存的精细程度。如今大多数 CPU 都支持 4 KB 页面大小因此 Android OS 和应用一直以来都是针对 4 KB 页面大小进行构建和优化的。ARM CPU 支持更大的 16 KB 页面大小从 Android 15 开始AOSP 也支持构建具有 16 KB 页面大小的 Android。此选项会使用额外的内存但可以提高系统性能。从 Android 15 开始此选项默认处于停用状态但作为开发者模式或开发者选项提供以便 OEM 和应用开发者为日后在所有设备上切换到 16 KB 模式做好准备。Android 15 及更高版本支持使用 16 KB ELF 对齐方式构建 Android该对齐方式自 android14-6.1 开始适用于 4 KB 和 16 KB 内核。与 16 KB 内核搭配使用时此配置会使用额外的内存但可以提高系统性能。将 Android 用户空间设置为 16 KB只有内核为 16 KB 的arm64目标才支持 16 KB 页面。不过还有一个在 x86_64 上为 Cuttlefish 模拟 16 KB 用户空间的选项。对于arm64目标如果您使用 Kleaf 构建内核--page_size16k会以 16 KB 模式构建内核。如果您直接使用 Linux 内核配置则可以通过设置CONFIG_ARM64_16K_PAGES而非CONFIG_ARM64_4K_PAGES来选择 16 KB 页面。如需在 Android 用户空间中启用 16 KB 页面大小支持请在您的产品上设置以下 build 选项PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO : true会移除PAGE_SIZE定义并让组件在运行时确定页面大小。PRODUCT_MAX_PAGE_SIZE_SUPPORTED : 16384用于确保以 16 KB 对齐方式构建平台 ELF 文件。这种超出所需尺寸的大小是为了在未来实现兼容性。 采用 16 KB ELF 对齐方式后内核可以支持 4 KB/16 KB 页面大小。验证 build 标志选择lunch目标后请验证是否已在环境中正确设置 build 标志$ source build/envsetup.sh $ lunch target $ get_build_var TARGET_MAX_PAGE_SIZE_SUPPORTED 16384 $ get_build_var TARGET_NO_BIONIC_PAGE_SIZE_MACRO true如果前两个命令分别返回16384和true则表示已正确设置 build 标志以便与 16 KB 内核配合使用。不过即使 build 通过了也可能由于 16KB 环境中的差异而出现运行时问题。16 KB 页面大小系统编程任何搭载 Android 的设备上的绝大多数代码都不会直接处理页面大小。不过对于处理页面的代码内核的内存分配行为会发生变化您需要牢记这一点以便编写不仅兼容而且性能最佳且资源占用最少的代码。如果您在 4 KB 系统上对 1 KB、2 KB 或最多 4 KB 的区域调用mmap系统会预留 4 KB 来实现此操作。换言之向内核请求内存时内核必须始终将请求的内存向上舍入到最接近的页面大小。例如如果您在 4 KB 区域上分配 5 KB 区域内核会分配 8 KB。在 16 KB 内核中这些额外的“尾部”页面会更大。 例如在与 16 KB 内核搭配使用时所有这些从 1 KB 到 5 KB 的分配都会分配 16 KB。如果您请求 17 KB它会分配 32 KB。例如在 4 KB 系统上可以分配两个 4 KB 读写匿名区域。但是在 16 KB 内核上这会导致分配两个页面或 32 KB。在 16 KB 内核上如果可能这些区域可以合并为单个可读或可写页面以便仅使用 16 KB与 4 KB 内核的情况相比浪费 8 KB。如需进一步降低内存用量可以合并更多页面。事实上在经过最大限度优化的 16 KB 系统中16 KB 页面所需的内存比 4 KB 系统所需的内存更少因为页面表格是相同内存大小的四分之一。无论何时使用mmap请确保将您请求的大小向上舍入到最接近的页面大小。这样可确保内核分配的整个内存量在运行时值中直接对用户空间可见而不是隐式请求并隐式或意外可访问。构建采用 16 KB ELF 对齐方式的共享库如需构建属于 Android 项目的共享库启用 16 KB 页面大小中的早期设置就足够了PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO : truePRODUCT_MAX_PAGE_SIZE_SUPPORTED : 16384如需构建不属于 Android 项目的共享库您需要传递以下链接器标志-Wl,-z,max-page-size16384验证二进制文件和预构建版本是否符合 16 KB ELF 对齐要求如需验证对齐和运行时行为最好在经过编译的 16 KB 内核上进行测试和运行。不过为了尽早发现一些问题从 Android 16AOSP 实验版开始您可以在构建时设置PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE : true。在Android.bp中使用ignore_max_page_size: true并在Android.mk中使用LOCAL_IGNORE_MAX_PAGE_SIZE : true可暂时忽略它们。这些设置会验证所有预构建文件并允许您检测某个预构建文件何时更新但未对齐到 16 KB。您可以运行atest elf_alignment_test验证搭载 Android 15 及更高版本的设备上设备端 ELF 文件的对齐情况。///////////////////////////////////////////////////在 ARM64 上使用页面大小为 16 KB 的 Cuttlefish此设置需要使用ARM64Linux 主机。本页介绍了如何在ARM64上构建和启动支持 16 KB 页面大小的 Cuttlefish。本页面中的说明假定您的机器中已安装 Cuttlefish 软件包。如需查看安装说明请参阅安装 Cuttlefish 的第 1 步。若要启动 Cuttlefish您可以直接从 Android 持续集成网站下载预构建制品也可以从 AOSP 构建它们如果您需要修改源代码。通过下载制品来启动 Cuttlefish前往 Android 持续集成网站并输入aosp-main-throttled作为分支名称。点击aosp_cf_arm64_phone_pgagnostic目标的最新 build。现在请按照安装 Cuttlefish 的第 5 步中的说明操作。通过从 AOSP 进行构建来启动 Cuttlefish构建和启动设有与页面无关的目标的 Cuttlefish$ mkdir android-latest-branch cd android-latest-branch $ repo init -u https://android.googlesource.com/platform/manifest -b android-latest-release $ repo sync -c -j32 # Build cf agnostic target. $ source build/envsetup.sh $ lunch aosp_cf_arm64_phone_pgagnostic-trunk_staging-userdebug $ m # Launch cf with a kernel with 16 KB page size support. $ launch_cvd ... ... VIRTUAL_DEVICE_DISPLAY_POWER_MODE_CHANGED virtio_input_hid_handle_status: unknown type 20 virtio_input_hid_handle_status: unknown type 20 virtio_input_hid_handle_status: unknown type 20 virtio_input_hid_handle_status: unknown type 20 Generating new secret with slot ID: 4 VIRTUAL_DEVICE_BOOT_STARTED VIRTUAL_DEVICE_NETWORK_MOBILE_CONNECTED验证页面大小和启动状态如需验证页面大小和启动状态请执行以下操作以 root 身份访问 shell$ adb root adbd is already running as root $ adb shell vsoc_arm64_pgagnostic:/ #验证页面大小和启动状态vsoc_arm64_pgagnostic:/ # getconf PAGE_SIZE 16384 vsoc_arm64_pgagnostic:/ # getprop | grep sys.boot.completed sys.boot_completed: 1将 Cuttlefish 与自定义 16 KB 页面大小内核搭配使用如需使用自定义内核而不是预构建内核请执行以下操作为 Android 通用内核创建 Repo 目录并同步该目录$ mkdir common-android14-6.1 cd common-android14-6.1 $ repo init -u https://android.googlesource.com/kernel/manifest -b common-android14-6.1 $ repo sync -c -j$(nproc)构建 16 KB 页面大小的内核$ tools/bazel run --ltonone //common:kernel_aarch64_16k_dist $ tools/bazel run --ltonone //common-modules/virtual-device:virtual_device_aarch64_16k_dist -- \ --dist_dirout/android14-6.1/dist验证构建是否已成功执行# Generated files $ ls out/android14-6.1/dist/Image $ ls out/android14-6.1/dist/initramfs.img使用自定义 16 KB 页面大小的内核启动 Cuttlefish如需在 Cuttlefish 中使用新构建的内核请执行以下操作$ launch_cvd -kernel_path ~/common-android14-6.1/out/android14-6.1/dist/Image \ -initramfs_path ~/common-android14-6.1/out/android14-6.1/dist/initramfs.img \ --resumefalse --userdata_formatext4 \ --data_policyalways_create --blank_data_image_mb8000 -userdata_formatext4///////////////////////////////////////////////////////在 x86-64 上模拟页面大小为 16 KB 的 Cuttlefish此设置需要使用x86_64Linux 主机。本页介绍了如何在x86_64上构建和启动支持 16 KB 页面大小的 Cuttlefish。本页面中的说明假定您的机器中已安装 Cuttlefish 软件包。如需查看安装说明请参阅安装 Cuttlefish 的第 1 步。若要启动 Cuttlefish您可以直接从 Android 持续集成网站下载预构建制品也可以从 AOSP 构建它们如果您需要修改源代码。重要提醒x86_64 上支持 16 KB 页面大小的 Cuttlefish 会模拟 16 KB 页面大小的内核和用户空间因为 x86_64 架构不支持 16 KB 页面大小。内核实现在 Android 14 6.6 GKI 中page_size_emulation 补丁系列中添加了对模拟x86_6416 KB 页面的支持。在命令行中传递page_shift14即可启用此模拟。带有_16k后缀的x86_64目标或带有_pgagnostic后缀的旧目标例如aosp_cf_x86_64_phone_pgagnostic默认会传递此选项并默认在 16 KB 模式下运行。通过下载制品来启动 Cuttlefish前往 Android 持续集成网站并输入aosp-main-throttled作为分支名称。点击aosp_cf_x86_64_phone_pgagnostic目标的最新 build。现在请按照安装 Cuttlefish 的第 5 步中的说明操作。通过从 AOSP 进行构建来启动 Cuttlefish构建和启动设有与页面无关的目标的 Cuttlefish$ mkdir main cd main $ repo init -u https://android.googlesource.com/platform/manifest -b main $ repo sync -c -j32 # Build cf agnostic target. $ source build/envsetup.sh $ lunch aosp_cf_x86_64_phone_pgagnostic-trunk_staging-userdebug $ m # Launch cf with a kernel with 16 KB page size support. $ launch_cvd ... ... VIRTUAL_DEVICE_DISPLAY_POWER_MODE_CHANGED virtio_input_hid_handle_status: unknown type 20 virtio_input_hid_handle_status: unknown type 20 virtio_input_hid_handle_status: unknown type 20 virtio_input_hid_handle_status: unknown type 20 Generating new secret with slot ID: 4 VIRTUAL_DEVICE_BOOT_STARTED VIRTUAL_DEVICE_NETWORK_MOBILE_CONNECTED验证页面大小和启动状态如需验证页面大小和启动状态请执行以下操作以 root 身份访问 shell$ adb root adbd is already running as root $ adb shell vsoc_x86_64_pgagnostic:/ #验证页面大小和启动状态vsoc_x86_64_pgagnostic::/ # getconf PAGE_SIZE 16384 vsoc_x86_64_pgagnostic::/ # getprop | grep sys.boot.completed sys.boot_completed: 1///////////////////////////////////////////////////////刷写支持 16 KB 页面大小的 Pixel本页介绍了如何刷写支持 16 KB 页面大小的 Pixel。刷写搭载 Android 15 的 Pixel 8 和 9 的设备在 Android 15 中有 6 款 Pixel 设备支持 16 KB 页面大小并且可以使用 Android 刷写工具进行刷写Pixel 9 Pro (caiman)Pixel 9 Pro XL (komodo)Pixel 9 (tokay)Pixel 8 Pro (husky)Pixel 8 (shiba)Pixel 8a (akita)若要刷写支持 16 KB 的设备请按照以下说明操作将 Pixel 设备连接到桌面设备或笔记本电脑。前往 flash.android.com在Find a build to flash查找要刷写的 build框中输入git_aosp-main-with-phones-throttled。在Build results组合框中选择一个目标适用于 Pixel 9 Pro 的aosp_caiman_16k适用于 Pixel 9 Pro XL 的aosp_komodo_16k适用于 Pixel 9 的aosp_tokay_16k适用于 Pixel 8 Pro 的aosp_husky_pgagnostic适用于 Pixel 8 的aosp_shiba_pgagnostic适用于 Pixel 8a 的aosp_akita_16k注意前 16 KB 目标中使用了后缀_pgagnostic。最新的目标使用_16k后缀。选择Wipe Device擦除设备。使用此选项会删除设备上的所有用户数据。点击Install build安装 build。注意当 Pixel 设备连接到笔记本电脑时请务必在对话框中勾选Allow USB debugging允许 USB 调试。刷写搭载 Android 13 的 Pixel 6 和 Pixel 6 Pro 设备警告本文档的这一部分已废弃并计划于 2025 年 5 月 1 日移除。本部分介绍的是不再受支持的旧流程。为确保成功请更新到搭载 Android 15 的 Pixel 8 或 9然后按照刷写搭载 Android 15 并支持 16 KB 页面大小的 Pixel 8 和 9 设备中的说明操作Pixel 6oriole和 Pixel 6 Pro (raven) 在 Android 13 中支持 16k 页面大小。若要刷写支持 16 KB 的设备请按照以下说明操作将 Pixel 设备连接到桌面设备或笔记本电脑。前往 flash.android.com在Find a build to flash查找要刷写的 build框中输入main-16k-with-phones。在Build results构建结果组合框中选择一个目标适用于 Pixel 6 的aosp_oriole_16k_64适用于 Pixel 6 Pro 的aosp_raven_16k_64选择Wipe Device擦除设备。使用此选项会删除设备上的所有用户数据。点击Install build安装 build。///////////////////////////////////////////////////////获取页面大小本页面列出了获取设备中使用的内核页面大小的不同方法。如需连接到设备您可以使用adb。$ adb shell使用编程代码在 C 中首选getpagesize(2)# include unistd.h ... ... getpagesize();在 Java 中您可以使用系统配置import android.system.Os; import android.system.OsConstants; ... Os.sysconf(OsConstants._SC_PAGE_SIZE);使用 getconf 命令使用getconf命令获取页面大小如下所示$ getconf PAGE_SIZE 4096使用 /proc//smaps 伪文件伪文件/proc/pid/smaps中的KernelPageSize字段会显示页面大小如下所示$ grep KernelPageSize /proc/1/smaps KernelPageSize: 4 kB使用 LD_SHOW_AUXV1 链接器标志使用LD_SHOW_AUXV标志输出即将执行的程序的辅助向量。AT_PAGESZ字段包含页面大小如下所示$ LD_SHOW_AUXV1 ls AT_SYSINFO_EHDR 0x7250460000 AT_MINSIGSTKSZ 4720 AT_HWCAP 0b11111111111111111111111111111111 AT_PAGESZ 4096 AT_CLKTCK 100 AT_PHDR 0x5fda1e0040 AT_PHENT 56 AT_PHNUM 12 AT_BASE 0x72502f8000 AT_FLAGS 0 AT_ENTRY 0x5fda210000 AT_UID 0 AT_EUID 0 AT_GID 0 AT_EGID 0 AT_SECURE 0 AT_RANDOM 0x7fc59d66f8 AT_HWCAP2 0b100011001111111111 AT_EXECFN /system/bin/ls AT_PLATFORM aarch64 data dev. init vendor使用 /proc/config.gz 伪文件查看伪文件/proc/config.gz中的内核配置以了解页面大小。页面大小可能的配置如下CONFIG_ARM64_4K_PAGESy内核使用 4096 字节的页面。CONFIG_ARM64_16K_PAGESy内核使用 16384 字节的页面。CONFIG_ARM64_64K_PAGESy内核使用 65536 字节的页面。$ zcat /proc/config.gz | grep CONFIG_ARM64_[164K]*_PAGESy CONFIG_ARM64_16K_PAGESy使用辅助向量执行程序时内核会使用动态链接器所使用的信息如页面大小来分配和初始化辅助向量。辅助向量可以从伪文件/proc/pid/auxv中读取。进程 1 的辅助向量中的页面大小可以如下所示$ od -N8 -j56 -td8 -An /proc/1/auxv 4096其中十六进制、十进制或其他格式的od转储文件。-N8 -j56会将从偏移量 56 开始的 8 个字节转储到文件中对应于AT_PAGESZ。-td8会将值的格式设置为十进制 8 字节整数。-An会导致仅显示值而不显示其地址。从内核映像中读取您可以读取内核映像的头文件来确定页面大小。如果您需要了解要启动的内核的类型此方法在引导加载程序中非常有用。页面大小位于内核标头的第 25 个字节中$ file Image Image: Linux kernel ARM64 boot executable Image, little-endian, 16K pages $ hexdump -C Image -n 48 00000000 4d 5a 40 fa ff 7f 7b 14 00 00 00 00 00 00 00 00 |MZ...{.........| 00000010 00 00 64 02 00 00 00 00 0c 00 00 00 00 00 00 00 |..d.............| 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000030在此示例中该值为0x0C 0000 1100b。位 1 的值为0位 2 的值为1。通过读取这两位我们会以十进制形式得到10b或2。根据这些位的值您可以确定内核页面大小0- 不明1- 4 KB2- 16 KB3- 64 KB如需了解详情请参阅 Linux 内核文档///////////////////////////////////////////////////////针对 16 KB 页面大小进行优化对于大多数编程任务页面大小并不相关。但是如果您分配大量内存、处理高度优化组件、直接与内核交互或执行大量文件操作那么 Android 过渡到 16 KB 页面大小可能会给性能分析增加一些需要考虑的因素。本文着重介绍了页面大小如何改变性能动态的几种方式。检测内存问题使用mmap分配内存时请务必始终传递一个为页面大小倍数的参数。如果您在页面大小为 16 KB 的系统上请求4096字节则内核会分配16 KB浪费12 KB空间。查看/proc/maps、/proc/smaps或使用 Android 工具showmap该工具可很好地输出浪费的空间或检查进程的strace可帮助检测这些问题。检测磁盘可用空间问题搭载 Android 15 及更高版本的设备默认具有采用 16 KB 对齐方式的 ELF并且许多应用也采用 16 KB 对齐方式。无论系统如何许多文件都增加了内边距。如需查看磁盘上的实际大小您可以使用du my file查看文件占用的千字节数。如需查看文件的实际大小您可以使用du -b my file它会以字节为单位显示大小。如果表面大小大于实际大小通常表示文件已压缩或存在稀疏区域。如果表面大小小于实际大小则文件可能包含额外的元数据或者可能在磁盘上被拆分了。通过这些检查您可以分析磁盘上文件的实际大小。///////////////////////////////////////////////////////系统属性有许多不同的系统属性可指示 Android 系统在页面大小支持方面的各种状态。如果您想了解某个特定设备的配置方式可以通过以下选项大致了解如何在 Android 中配置和使用页面大小。ro.boot.hardware.cpu.pagesize是 OEM 专用值表示正在运行的页面大小。在 Android 16AOSP 实验版中如果不是从引导加载程序进行传递则默认情况下 init 根据 CPU 页面大小设置此值。ro.product.cpu.pagesize.max是PRODUCT_MAX_PAGE_SIZE_SUPPORTED的值换言之它是设备上二进制文件的预期对齐方式。ro.product.page_size在 Android 16 [AOSP 实验版] 中引入是产品定义的页面大小基于TARGET_BOOTS_16K。它定义了页面大小应该为多少并在Vts16KPageSizeTest中进行验证。如果使用了错误的内核则会通过指出与此属性不匹配来提示您。ro.product.build.16k_page.enabled表示设备是否支持开发者选项在 4 KB 模式和 16 KB 模式之间切换。详细了解如何启用和使用此选项。///////////////////////////////////////////////////////启用 16 KB 切换开关借助 16 KB 切换开关您可尝试 16 KB 内核。此切换开关可在 4 KB 内核和 16 KB 内核之间切换可在设置应用的“开发者选项”菜单中找到。16 KB 切换开关可用于检查应用与 16 KB 内核的兼容性但由于在 16 KB 模式下使用子页面块针对/data和/metadata分区使用 EXT4 时它可能无法反映实际 16 KB 设备的性能。切换开关配置步骤确保设备已将变量设置为页面通用以便同时使用 4 KB 和 16 KB 页面大小内核。建议您直接安装 16k 内核以确保设备直接在 16 KB 模式下运行然后再继续添加开发者选项。请参阅虚拟设备示例目标配置。PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO : true PRODUCT_MAX_PAGE_SIZE_SUPPORTED : 16384设置产品变量以在“设置”中显示开发者选项PRODUCT_16K_DEVELOPER_OPTION : true使用BOARD_KERNEL_PATH_16K设置内核路径。应使用CONFIG_ARM64_16K_PAGESy.构建此内核BOARD_KERNEL_PATH_16K : kernel/prebuilts/mainline/$(TARGET_KERNEL_ARCH)/16k/kernel-mainline.设置模块配置路径BOARD_KERNEL_MODULES_16K。它指向支持 16KB 的内核模块。设置这些参数会在系统分区上创建两个 OTAboot_ota_16k.zip用于切换到 16 KB 内核和boot_ota_4k.zip用于切换到 4 KB 内核。为较小尺寸启动 OTA 设置BOARD_16K_OTA_USE_INCREMENTAL : true以启用增量 OTA。BOARD_KERNEL_MODULES_16K $(wildcard kernel/prebuilts/mainline/$(TARGET_KERNEL_ARCH)/16k/*.ko) BOARD_KERNEL_MODULES_16K $(wildcard kernel/prebuilts/common-modules/virtual-device/mainline/$(TARGET_KERNEL_ARCH)/16k/*.ko)设置BOARD_16K_OTA_MOVE_VENDOR : true以将 OTA 移至供应商分区。这是可选操作大多数设备不应设置此项。验证成功完成此设置后用户选中“以 16KB 页面大小启动设备”后“设置”应用中会显示 16 KB 切换开关。/system/boot_otas或/vendor/boot_otas包含两个 OTA ZIP 文件boot_ota_16k.zip和boot_ota_4k.zip。使用 16 KB 切换开关按照开发者选项文档中的指示启用开发者选项。如果检测到设备受 OEM 锁定系统会显示一个对话框请用户对手机进行 OEM 解锁。按照相应步骤进行 OEM 解锁。当用户选中“以 16KB 页面大小启动设备”时/data和/metadata分区必须为 ext4。否则系统会显示一个对话框要求用户擦除设备数据。回答“是”会擦除设备数据并且您必须再次启用开发者选项。16 KB 切换开关现在会显示一个确认切换到 16 KB 的对话框用户确认后系统会应用启动 OTA。然后您可以在 4 KB 到 16 KB 模式之间来回切换而无需清空数据分区以测试应用行为。检查 16 KB 模式按照获取页面大小中的步骤操作验证页面大小。///////////////////////////////////////////////////////启用 16 KB 向后兼容选项借助 16 KB 切换开关您可运行内核为 16 KB 的设备。当设备运行 16 KB 内核时16 KB 向后兼容选项可用。如果应用具有 4 KB LOAD 分段对齐的 ELF 文件扩展名为.so或者压缩后的 APK 包含 4 KB ZIP 对齐的未压缩 ELF 文件则软件包管理系统会以 16 KB 向后兼容模式运行该应用。如果软件包管理系统为某应用启用了 16 KB 向后兼容模式该应用在首次启动时会显示一条警告表明它正以 16 KB 向后兼容模式运行。16 KB 向后兼容模式可让部分应用正常运行但为了实现最佳可靠性和稳定性应用仍应以 16 KB 对齐。如需启用 16 KB 向后兼容选项请按照以下说明操作请按照启用 16 KB 切换开关中的步骤启用 16 KB 切换开关。使用以下任一方法启用 16 KB 向后兼容模式Android 会在需要时在向后兼容模式下运行应用。后向兼容有两个单独的部分可以单独启用bionic.linker.16kb.app_compat.enabled属性用于控制加载库的方式pm.16kb.app_compat.disabled属性用于控制安装 APK 的方式。如需强制为设备上的每个应用启用 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属性设为enabled或disabled以在特定应用的AndroidManifest.xml中开启或关闭向后兼容模式。设定此属性后该应用在启动时不会显示向后兼容模式警告。在应用信息页面上的高级下调整以页面大小兼容模式运行应用这项设置的切换开关为特定应用启用或停用 16 KB 向后兼容模式。仅当设备以 16 KB 页面大小运行时这项设置才会显示。/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////