当前位置: 首页 > news >正文

【Flutter 问题系列第 86 篇】解决 Google Play 提示应用必须支持 16 KB 内存页面大小问题的方案

这是【Flutter 问题系列第 86 篇】,如果觉得有用的话,欢迎关注专栏。

博文当前所用 Flutter SDK:3.24.5、Dart SDK:3.5.4

文章目录

      • 一:Google Play 新规
      • 二:问题描述
      • 三:验证当前应用是否支持 16 KB 内存页面的方式
        • 3-1:Android Studio 的 Analyze APK
        • 3-2:Google Play Console 政策状态通知
        • 3-3:Google Play Console 的 App Bundle Explorer
      • 四:本人项目不支持的 so 库的特殊说明
      • 五:如何修改
      • 六:如何验证
      • 七:如何确认设备是运行在 16 KB 环境下

一:Google Play 新规

谷歌计划自 2025年11月1日起,在应用商店实施新规,要求基于 Android 15 或更高版本的新应用需要更新支持 16 KB 页面大小。此项措施可提升应用启动速度、电池续航等多方面性能。不含原生代码的应用通常无需调整,含原生库或代码的应用需升级或重新编译以确保兼容性。16 KB 页面大小能减少系统工作量并优化资源分配,改善设备整体性能。

● 特别注意:
只有内核为 16 KB 的 arm64 目标才支持 16 KB 页面。

● 什么是页面大小

页面大小是 OS 管理内存的精细程度。如今,大多数 CPU 都支持 4 KB 页面大小,因此 Android OS 和应用一直以来都是针对 4 KB 页面大小进行构建和优化的。ARM CPU 支持更大的 16 KB 页面大小,从 Android 15 开始,AOSP 也支持构建具有 16 KB 页面大小的 Android。此选项会使用额外的内存,但可以提高系统性能。


Google Play Console 上也收到了通知,如下截图所示
在这里插入图片描述
重点内容已经用红色部分框选。

二:问题描述

简单来说就是 2025年11月1 日之前,如果你的应用不支持 16 KB 的内存页面,就不能在 Google Play 上继续更新应用了。

当然,也给出了解决方法,请点击 支持 16 KB 设备 跳转到官方文档。

不过,如果因种种情况无法及时使应用支持 16 KB 内存页面,谷歌也给出了延期解决的时间到 2026年5月31日。首次通知可能是 2025年5月8日 发出的,算上延期的时间,差不多给了一年的时间来适配。

为了适配,我们不得不考虑以下问题:

  • 如何知道自己的应用是否支持 16 KB 的内存页面?
  • 如果自己的应用不支持,如何修改成支持的?
  • 如何验证修改后是否成功支持?

下面就围绕着这三个问题,逐一说明。

三:验证当前应用是否支持 16 KB 内存页面的方式

提供三种方式验证

3-1:Android Studio 的 Analyze APK

在 Android Studio 依次点击 Build > Analyze APK,然后选择你要验证的 apk 文件(你也可以直接拖动 apk 文件到 Android Studio),分析后的部分截图如下所示

在这里插入图片描述

可以看到结论是当前 apk 文件不支持,也给出了哪些 so 不支持。

3-2:Google Play Console 政策状态通知

在政策状态的问题详情中,谷歌给出了当前应用是否支持的提示,如下图所示

在这里插入图片描述

3-3:Google Play Console 的 App Bundle Explorer

在 Google Play Console 上,点击当前 App Bundle 包查看详情,如下图所示

在这里插入图片描述

滑动到详情页下面的「内存页面大小」处,可以看到当前应用不支持 16 KB,也指出了哪些库不支持。根据名称可以在项目中全局搜索看是哪里引用了这些 so 库,不过你可能也搜索不到结果,就只能一个一个的找了。

四:本人项目不支持的 so 库的特殊说明

以当前我的应用不支持 16 KB 的 so 库 libbbhelper.so 和 libpl_droidsonroids_gif 为例,这里我做个 特殊说明

说明一:
libbbhelper.so 库是我全局搜索出来的,查出是 Flutter 中的插件 pdf_render_plus 引用了此库。

说明二:
libpl_droidsonroids_gif.so 库通过全局搜索没有查到有引用的地方,我把自己 pubspec.yaml 文件中的依赖的插件有哪些,告诉 Ai 这些插件中可能是哪个引入了此库,根据 Ai 推荐的结果,依次注释掉 pubspec.yaml 文件中的依赖,并解决依赖丢失后的相关报错,重新打包 apk 文件,然后执行 3-1 的方式查看是否还会提示应用不支持 16 KB。

依次排除了 lottie: 3.2.0、cached_network_image: 3.4.1、extended_image: 9.1.0,最终在注释掉第 4 个插件 crisp_chat: 2.2.5 的时候,提示不支持的情况消失。去 crisp_chat 插件中查看更新日志,发现插件在 51天前发布的 2.4.1 版本已经修复了此问题,如下截图所示

在这里插入图片描述
更新 crisp_chat 到最新版本后,运行项目时,又提示

BUILD FAILED in 47s
Running Gradle task ‘assembleRelease’… 47.2s
Your project requires a newer version of the Kotlin Gradle plugin. Find the latest version on https://kotlinlang.org/docs/releases.html#release-details, then update the version number of the plugin with id “org.jetbrains.kotlin.android” in the plugins block of /Users/app/Documents/Company/flutter_projects/xxx_app/android/settings.gradle.
Alternatively (if your project was created before Flutter 3.19), update /Users/app/Documents/Company/flutter_projects/xxx_app/android/build.gradle ext.kotlin_version = ‘latest-version’

根据提示,是我本地的 Kotlin 版本太低了,然后我又把 android/settings.gradle/plugins 中的 Kotlin 版本升级了一下

  • 修改前:id “org.jetbrains.kotlin.android” version “1.8.22” apply false
  • 修改后:id “org.jetbrains.kotlin.android” version “2.2.20” apply false

第四条这里做了解释说明的原因是,自己并不太懂 Android 原生,我只是提供了一下解决问题的思路和过程,能帮到你了最好,原生大佬有更好的方式也可以在评论区不吝赐教。

五:如何修改

整理 官方文档 可得出,如需构建支持 16 KB 设备的 Android 应用,则至少需要具备两个要素:

  1. AGP(Android Gradle Plugin)版本 8.5.1 或更高版本
  2. Android NDK r28 及更高版本

当然,谷歌也给出了项目不满足升级条件时如何短暂过度的解决方案,官方文档中有详细说明,这里不再赘述。

● 如何查看项目的 AGP 版本

在 Android Studio 中,单独运行 android 项目,依次点击 File > Project Structure > Project,如下图所示

在这里插入图片描述

可以看到,我本地目前使用的 AGP 版本是 8.12.2。

● 如何查看项目的 NDK 版本

依次点击 android > app > build.gradle > android

在这里插入图片描述

可以看到,旧 NDK 版本是 27.0.12077973,新 NDK 版本是 29.0.14206865。

● 如何升级 NDK 版本

打开设置页面,按下图所示找到 SDK Tools,

在这里插入图片描述

如果你的 NDK 版本也不高,左侧红色箭头所指之处此时应该显示的是一个横杠,右侧红色方框应该提示要升级的 NDK 版本号(如我的 29.0.14206865),因为我已经安装过了,所以这里显示了 Installed,自己点击安装即可。

这两项解决了,并不意味着你的应用就支持 16 KB 内存页面了,还需要通过 3-1 的方式查出是否仍然存在不支持 16 KB 的 so 库,如果没有则目前可以先认为你的应用支持了,如果有则对应的库也需要编译并设置为支持 16 KB 的内存页面才行。

因为我的 libbbhelper.so 库是插件 pdf_render_plus 引用的,但 pdf_render_plus 插件无法满足 Ui 的自定义需求所以我把它下载到本地放在 plugins 文件夹中使用,解决方案是在插件的 android/CMakeLists.txt 中追加了下面的代码

set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -Wl,-z,max-page-size=16384”)

重新打包成 apk 文件用 3-1 方式验证后,libbbhelper.so 不支持 16 KB 的提示消失。另外一个 libpl_droidsonroids_gif.so 库在 crisp_chat 升级到 2.4.1 后问题也消失。至此,两个不支持 16 KB 的 so 库都已经支持了。

六:如何验证

问题解决完后,通过第三条 3-3 的方式,打一个新的 aab 包上传到 Google Play Console 并查看详情,如下图所示

在这里插入图片描述

可以看到,「内存页面大小」处提示已经「支持 16 KB」,不过谷歌在其下方也提示了

如果您的应用使用了我们无法检测到的库,或者您的代码假定设备使用了特定的页面大小,那么您可能仍会遇到错误,了解详情

所以最好有一种方式可以模拟 16 KB 内存页面大小的环境来验证应用是否支持。谷歌 官方文档 中也给出了思路,这里我使用基于 16 KB 的 Android 16 系统映像设置 Android 模拟器来验证,如下图所示

在这里插入图片描述

模拟器建好后,运行项目,如果你的应用不支持 16 KB 内存页面,应用启动时会出现下图所示情况

在这里插入图片描述

如果你的应用支持 16 KB 内存页面,则不会出现此情况。

七:如何确认设备是运行在 16 KB 环境下

在终端通过如下命令来确认

adb shell getconf PAGE_SIZE

如果输出 16384,则说明当前运行在 16 KB 环境下。如输出 4096,则说明是在 4 KB 环境。

如果当前你有多个设备在线,则可以先通过 adb devices 命令列出当前在线的设备名称,然后使用下面命令查看

adb -s xxx shell getconf PAGE_SIZE

如下图所示

在这里插入图片描述

其中 xxx 是你自己的设备名称,如我的是 emulator-5554。

至此,关于解决 Google Play 提示应用必须支持 16 KB 内存页面大小问题的方案便说到这里。

你的问题得到解决了吗?欢迎在评论区留言。

赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。


结束语

Google 的 Flutter 越来越火,截止 2025年10月23日 GitHub 标星已达 173K,Flutter 毅然是一种趋势,所以作为前端开发者,没有理由不趁早去学习。

无论你是 Flutter 新手还是已经入门了,不妨先点个关注,后续我会将 Flutter 中的常用组件(含有源码分析、组件的用法及注意事项)以及可能遇到的问题写到 CSDN 博客中,希望自己学习的同时,也可以帮助更多的人。
http://www.dtcms.com/a/521376.html

相关文章:

  • 南京网站设计建设公司电话添加网站描述
  • 网站建设具体步骤应该怎么做ps怎么制作网页
  • 此网站无法提供安全连接 建设银行seo在线优化排名
  • 网站 架构 设计企业做营销网站
  • 网站建设用途网页制作教程视频 网盘
  • 网站建设学习视频中国50大电商排名
  • 虚幻引擎5 GAS开发俯视角RPG游戏 P06-14 属性菜单 - 文本值行
  • 【浏览器】前端页面禁用浏览器复制的方案
  • 外国人做的汉子网站网站建设合同应注意
  • 怎样把录的视频做一下传到网站四川省住房建设厅官网
  • 网站手机端排名怎么做学校学不到网站建设
  • windows 安装 Redis
  • 阿里云网站建设方案书一定要嘛更换wordpress库
  • h5游戏免费下载:疯狂猜水果
  • 网页制作素材网站网站快速备案通道
  • Spring Boot JMX与Jolokia监控实战
  • 安康做企业网站的百度推广有哪些推广方式
  • 利用模板如何制作网站做的网站 v2ex
  • wordpress主题教程seo 优化顾问
  • 给网站怎么做tag标签如何用手机做音乐网站
  • 博客类网站源码番禺建设局网站首页
  • a5创业网站建设微信小程序如何生成二维码
  • 【Linux入门】常用工具:yum、vim
  • 专注网站建设公司名称大全免费取名
  • 如何将MIB库文件转换为ZABBIX xml模板
  • 音频调试技巧分享:mediametrics::LogItem相关日志如何查看?
  • 手淘网站建设需求分析做qq链接的网站
  • 进口倾角传感器选择与优质厂家推荐双轴倾角传感器在物联网应用中的核心价值
  • 环保厅网站建设的必要性做盗版电影网站违法吗
  • 做网站的公司 经营范围主页设计