默认编译出来的 React Native 的 Android APK 包体积巨大,有 70M 这么大。而我平时用原生开发的 Android App,即便加入了 N 多大图片,也才 20M 大小。
感觉还是有必要优化一下的,毕竟打包出来这么大体积的 APK,放出来给人下载,一是浪费存储空间,二是看起来也不专业,容易让人产生疑问,是不是塞了不必要的东西在 App 里面。
开发环境
- "expo": "~52.0.27",
- "react-native": "0.76.6",
使用 Android Studio 的 APK 分析工具
Android Studio 内置了一个分析工具,在菜单 build - analyze APK。来看一下,默认编译出来的 APK 分析结果:
可以看到占用最多的是 lib 这个目录,里面有四个文件夹:
- armeabi-v7a
- arm64-v8a
- x86
- x86_64
大小都差不多,都是 16M 左右。每个目录代表一种 CPU 架构的库文件集合。
By default, the generated APK has the native code for both x86, x86_64, ARMv7a and ARM64-v8a CPU architectures. This makes it easier to share APKs that run on almost all Android devices. However, this has the downside that there will be some unused native code on any device, leading to unnecessarily bigger APKs.
参考:
https://reactnative.dev/docs/signed-apk-android#publishing-to-other-stores
会看到 GitHub 上好多项目的 release 版本中,也是区分了不同 CPU 架构的 APK 包。 这个可以大大减小安装的 APK 包体积。
每个目录包含哪些依赖文件
比较大的文件都给 react native 有关。
优化 APK 体积方案一:不同 CPU 架构打包成不同的 APK 文件
在 app build.gradle 配置文件中,在 defaultConfig 的平级加入:
splits {
abi {
reset()
enable true
universalApk false
//include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
include "arm64-v8a"
}
}
这里配置取消了 universalApk 的生成,即不再生成一个包含4种 CPU 架构的包。而是不同架构产生不同的 APK 文件。
例如,目前配置对应的 APK 文件名:app-arm64-v8a-release.apk
来看看优化后的包体积大小:
从 70M 降低到了 26M。我安装到了我的红米 K80 Android 机上,没有任何问题。
主流的 CPU 架构是什么
Most devices today are arm64-v8a, the really cheap devices are armeabi-v7a to save cost, and almost none are x86 or x86_64.
arm64 v8 是 arm 目前的主流架构,上一代架构是 armv7。arm v7没有64位模式,只有32位。而 x86 和 x86_64 几乎没有了,通常只用在 windows 上的模拟器上。
参考:
https://stackoverflow.com/questions/56824557/what-is-the-difference-between-armeabi-v7a-arm64-v8a-x86
阅读更多 👀
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式