Android15适配16kb

4,421 阅读9分钟

Android15适配16kb

image.png

1.前言:

之前的文章讲解了其中一个项目升级到了Android15并且做了相应适配,但是由于项目是在ott盒子和TV设备上使用的,而且项目的功能很简单,就2个页面,没有涉及到16kb,只是把Android12文件读写、蓝牙权限、gms升级了一下,这次是新的Ai应用里面用到了mmkv进行数据存储,其他的第三方sdk没有涉及到16kb所以无需修改,而Google明确规定需要适配16kb.

**[自2025 年 11 月 1 日]**起,所有提交到 Google Play 且使用原生 C/C++ 代码(面向 Android 15 及以上设备)的新应用和应用更新都必须支持 16 KB 的页面大小。这是确保您的应用在最新 Android 硬件上发挥最佳性能的关键一步。无需原生 C/C++ 代码或依赖项,仅使用 Kotlin 和 Java 编程语言的应用已经兼容,但如果您使用的是原生代码,现在是时候采取行动了。

Starting November 1st, 2025, all new apps and updates to existing apps submitted to Google Play and targeting Android 15+ devices must support 16 KB page sizes on 64-bit devices.

Google开始正式强制Android适配16 KB Page Size,这是一个关键的技术要求,确保您的用户能够在新设备上获得性能提升,并为平台未来在新硬件上的改进性能做好准备。如果不重新编译以支持16 KB页面,您的应用在这些设备变得更广泛普及时可能无法在这些设备上正常运行。官方数据显示,配置为使用16 KB页面大小的设备,平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升。

2.概念:

什么是16K页面对齐?告别4K时代

在计算机操作系统中,内存以固定大小的“页面”为单位进行管理。长久以来,安卓系统一直沿用4KB作为标准的页面大小。所谓“页面对齐”,就是确保内存中的数据块(尤其是应用的可执行文件和库)从能被页面大小整除的地址开始存放。

随着硬件的飞速发展,现代智能手机配备了越来越大的内存(RAM),4KB的页面大小在管理庞大内存时逐渐显得力不从心,导致了性能瓶颈。为了突破这一限制,安卓系统从安卓15开始引入了对16KB页面的支持,并将在安卓16及更高版本中将其作为一项强制性的技术要求,特别是对于搭载大内存的设备。这意味着,应用和系统进程将以16KB为单位进行内存的分配和管理。

3.性能提示预览:

Google 测试显示,16 KB 页面可以带来:

  • 应用启动速度提升:3% 到 30% 不等
  • 电池续航改善:平均提升 4.5%
  • 相机启动加速:4.5% 到 6.6% 的提升
  • 系统启动加速:约 8% 的提升

4.未适配16kb前的截图:

image.png

5.适配详细步骤:

  • 对开发者的要求与详细适配指南
  • 验证所有so的对齐
  • 升级Gradle插件版本
  • 启动测试环境充分验证各种机型和设备

5.1 验证(.so)的对齐

您需要手动验证应用中所有的原生库(包括您自己编写和第三方提供的)是否都已正确对齐。

image.png

5.2 Gradle插件版本升级:

  • Android Gradle 插件 (AGP): 必须将AGP版本升级至 8.5.1或更高。新版本的AGP内置了对16KB对齐的支持,它会在打包APK时自动确保.so文件以正确的对齐方式存储。

image.png

image.png

6.mmkv适配:

由于项目中只使用的mmkv库,所以只需要升级这一个版本即可.

未升级前的版本:

image.png 升级后的版本:

image.png

7.适配16kb后的截图:

已经没有16kb未适配的提示了,Apk does not support 16kb devices 截图中的4kb也变成16kb,

image.png

8.其他第三方SDK和预编译库适配

应用中未对齐的库通常来自第三方SDK。

  • 联系提供商: 一旦发现未对齐的第三方库,应立即联系其提供商,要求他们提供支持16K页面对齐的新版本。由于这是Google Play的强制要求,主流SDK提供商通常会积极跟进。
  • 检查更新日志: 关注您所使用的所有原生SDK的官方更新日志和发布说明,确认哪个版本开始支持16K对齐。

9.模拟器测试效果截图:

image.png

10.手机测试效果:

Android15的手机也能正常使用,可以证明适配是没问题的,其他的第三方sdk参考类似的步骤

image.png

11.总结:

经过上面的修改后,项目也能正常运行。各功能都可以正常使用,16kb未适配的提示没有了,大家根据自己的项目进行具体修改和适配.

  • 由于我们项目很简单只有这个库有so,所以需要修改的地方不是很多,如果有其他第三方sdk需要适配,除了及时更新版本外联系sdk提供者或者官网。
  • 升级Gradle插件版本
  • 验证所有原生so的对齐
  • 处理第三方sdkso对齐
  • 在测试环境充分验证各种机型和设备,最后使用脚本做自动化批量和稳定性测试

12.补充说明:

在最近的留言中发现有小伙伴说mmkv2.2.0以上未适配armv7,而且打包成aab后仍然还有提示16kb未适配。

  • 因为前面是写例子着急所以没有严格测试aab,这个ai应用暂时没有发布到Google play,我忽略了此问题.
  • 最近我查看了mmkv最新的版本2.2.4编译后发现还是有问题,
  • 而且官网有有一个有issues挂着,说是回退到1.3.14,但是我试了发现没用,
  • 因为我项目最初使用的sp,最快最省的解决方式就是干掉mmkv,修改起来也不麻烦,
  • 不仅解决了问题,apk大小也少了几m,所以大家根据自己的项目情况进行修改适配.

官网参考地址如下: github.com/Tencent/MMK…

适配好的截图如下:

12.1 aab格式包 9b7459198bd1b5202f505257c52c51ca.png

12.2 apk格式包

image.png 12.3 其他的第三方sdk尽量参考,联系作者或者官网更新适配,要不然这个是一个大问题,很多第三方sdk都没有适配16kb,只能慢慢来排查了,目前没有好的方法把第三方一下就改好,太蛋疼了......

13 关于mmkv适配16kb终极版:

13.1 把mmkv版本降级到1.3.14

image.png

13.2 添加配置

packaging  {
    jniLibs {
        useLegacyPackaging = true
    }
}

image.png

13.3 打aab包验证:

image.png

13.4 打apk包验证:

去掉上面的配置

image.png

image.png

13.5 模拟器验证apk:

可以看到app正常运行,没有报错,此方案是可行的 image.png

13.6 小结:

可以看到此方法是有效果的,需要自己修改配置和验证,不过我没有在项目中验证登录注册这些逻辑,应该没有啥问题,也不影响之前的,也算是一种比较好的方案,路漫漫其修远兮,吾将上下而求索!感兴趣的可以自己实践.