标签: 16kb memory page

  • 解决 React Native + Expo 面对 Google Play 的 16KB memory page 问题

    解决 React Native + Expo 面对 Google Play 的 16KB memory page 问题

    最近开始尝试开发 App,倒不是什么复杂的大项目,只是把朋友网站上的功能移植到移动端。技术栈仍然是 React Native + Expo,不过以前只做过 iOS,这次连 Android 一起做。

    那么自然的,这次就要踩 React Native Android 的坑。以后会分享所有相关的知识体验和坑,今天先分享最近两天花了不少时间解决的 Google Play 16KB memory page 问题。

    我们的应用提交到 Google Play 后,原本一切正常,前两天突然收到 Google 的政策通知:

    为确保您的应用能在最新版 Android 上正常运行,Google Play 要求以 Android 15 及更高版本为目标平台的应用支持 16 KB 内存页面大小。

    自 2026年5月30日起,如果您的应用更新不支持 16 KB 内存页面大小,您将无法发布相应更新。

    您的最新正式版应用不支持 16 KB 内存页面大小。

    嗯,必须承认,看到这个问题我一头雾水。不过好在我也不需要把它理解透彻,只要知道该怎么改就好。可惜的是,Gemini 对这个问题没什么了解,我只好去阅读 Google 的文档,得到的结论是:

    我需要修改 /android/app/build.gradle 其中的配置 useLegacyPackaging 将其改成 true

    android {
        packagingOptions {
            jniLibs {
                useLegacyPackaging true
            }
        }

    不过我使用的是最新版 expo prebuild 生成的 Android 项目,所以这个配置本身依赖 app.json 的配置,那么理论上,我只需要添加下面这行:

    {
      "expo": {
        "android": {
          "useLegacyPackaging": true
        }
      }
    }

    于是我改好配置重新打包上传,结果还是不行。认真阅读 app bundle 详细信息,发现错误位于 base/lib/arm64-v8a/librnskia.sobase/lib/x86_64/librnskia.so ,很明显,这是 @shopify/react-native-skia 包,也就是我们的绘图依赖。

    因为我的项目里用到 Expo,所以我一般用 Expo 安装依赖,安装的版本也由 Expo 决定。目前版本的 Expo 要求的 @shopify/react-native-skia 版本是 v2.0.0-next.4,在 GitHub issues 里搜索一下,发现这个版本果然不支持 16KB Memory page,而修复的版本是 v2.0.6。

    按照我的习惯,有新不用旧。于是直接升级到 2.2.9,然后应用就挂了……于是降级到 v2.0.7(2.0 版本的最高版本),测试没问题。打包上传,终于解决了 16KB 警告。

    简单总结一下:

    1. 不同平台有不同要求,不过大多可能和 RN 无关,通过项目配置就能解决
    2. React Native 由于跨平台,跨运行时,依赖之间的关系很复杂,不能乱升级,尽量控制小版本,只升补丁版本