纯React Native与Expo bare工作流构建App包体积存在巨大差异咨询
体积差异原因说明
首先可以排除是React Native 0.63.4版本本身的特性导致的体积更小——0.63到0.66的版本迭代并没有引入会导致10MB级体积增加的改动,差异全部来自Expo bare工作流的内置构建优化,以及纯RN项目可能未手动开启的优化配置,具体原因如下:
- ABI架构过滤规则差异:Expo bare工作流eject后的默认配置只会针对移动端常用的arm架构(armeabi-v7a、arm64-v8a)生成对应ABI的so库,不会打包x86、x86_64两类仅模拟器用到的架构文件。而纯React Native 0.66初始化项目的默认构建配置通常会打包全四类ABI的so库,多余的x86系列so库会直接让config.arm64_v8a.apk增加7-10MB的体积。你可以查看两个项目
android/app/build.gradle中ndk.abiFilters的配置项验证这点。 - 代码&资源压缩配置差异:Expo bare的构建模板默认开启了
minifyEnabled true、shrinkResources true开关,同时内置了适配React Native生态的ProGuard混淆规则,会自动移除未使用的原生代码、调试符号、冗余资源文件。很多纯RN项目初始化后默认保留了开发环境配置,生产构建时如果没手动开启这两个压缩开关,会保留大量无用内容,直接导致体积膨胀。 - Hermes引擎配置差异:如果你的Expo bare项目默认开启了Hermes引擎,而纯RN 0.66项目未开启的话,Hermes预编译的字节码体积远小于传统JS bundle+V8引擎so库的体积,这部分也会带来3-5MB的体积差。你可以对比两个项目中
enableHermes的配置项确认。 - 原生依赖裁剪差异:Expo bare工作流会自动裁剪未被你项目引入的Expo可选原生模块,而纯RN项目如果未手动清理默认引入的测试依赖、未使用的核心原生模块,也会增加打包体积。
排查方法
你可以把两个项目的Android构建配置做对齐,设置相同的ABI过滤规则、压缩开关、Hermes开关后再重新构建对比,就能定位到具体是哪项配置带来的体积差。
内容的提问来源于stack exchange,提问作者John Stuart
相关产品推荐
相关产品推荐

