expo新版本(54+)的Android打包apk尺寸和splits控制法
问题
之前为了控制expo打包apk文件的尺寸问题,采用了在原生android代码中改写配置文件的方法,加入splits项,实现各平台apk分离,以大幅减少总体生成体积。 这个方法我还做了B站视频。 这种方法虽说有效,但挺不优雅的,而且很麻烦。每次新项目建立都要手写一遍,一旦prebuild就废了,又要补充。 expo SDK54+后,我发现这个方法失效了,原因似乎在于新版本eas build不再直接读取android目录的配置,而是类似sandbox机制,每次自动生成所需资源和配置,然后打包。 expo官方至今并未给出对splits这样的直接支持。 其实想想呢原因很简单,除中国以外的安卓市场,目前都基于Google Play的标准,直接用aab即可,EAS只要支持生成aab文件,后续的分发等靠Goolge Play等平台优雅的分配即可,版本和体积控制等方面都是非常高效方便优雅的。 如果你的项目只是面向海外,不考虑国内小米华为OPPO等平台,那么后续的内容就不必看了。 否则,我们仍然需要一个更好的打包apk的办法,下面就介绍。
思路
咨询了ChatGPT,它居然很不靠谱地推荐用bundletool这个工具包,官网说“bundletool 可将 app bundle 转换为部署到设备的各种 APK。”,这是个天坑,除非参数中带有--mode=universal,打出来的apks文件是无法直接安装的,但这个模式下没法分离平台,体积和直接eas打包apk一样大,毫无意义。
然后我们又问了Claude-Opus-4.5,不愧是开发顶流,给出更好的答案,其有效性和优雅程度超过了expo旧版本时的我们的老方法。
希望你在读下去前可以看看我之前的B站视频,原理其实是一样的。