React Native 0.76 升级后 APK 体积增大的原因及优化方案

在将 React Native 从 0.71 升级到 0.76 后,打包体积从 40 多 MB 增加到了 80 MB。经过一系列排查和优化,最终找到了解决方案,并将优化过程整理如下。

1. React Native 0.76 体积增大的可能原因

(1) 新架构默认启用

React Native 0.76 默认启用了 New Architecture(新架构),包括:

  • JSI(JavaScript Interface)

  • Fabric(新的 UI 渲染系统)

  • Turbo Modules(优化原生模块交互)

  • Codegen(自动代码生成)

  • Hermes(默认 JavaScript 引擎)

新架构的引入可能导致原生代码增加,从而导致包体积变大

(2) 旧架构导致 UI 渲染异常

gradle.properties 文件中,尝试将:

newArchEnabled=true  # 新架构启用

修改为:

newArchEnabled=false  # 禁用新架构

打包后 APK 体积恢复到 40 多 MB,但运行时 部分 UI 渲染异常,说明某些 UI 组件依赖了新架构。

(3) 缺少 Proguard 和资源压缩

android/app/build.gradlerelease 配置中,默认没有启用 Proguard(代码混淆)资源压缩(shrinkResources),导致 APK 体积增大。

release {
    signingConfig signingConfigs.release
    minifyEnabled enableProguardInReleaseBuilds // 代码混淆
    shrinkResources true // 资源压缩
    proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}

minifyEnabledshrinkResources 设置为 true 后,包体积减少约 6 MB,但效果不明显。

(4) 依赖库升级与精简

升级了以下 第三方依赖库

  • @react-navigation/bottom-tabs

  • @react-navigation/native

  • @react-navigation/native-stack

  • react-native-safe-area-context

  • react-native-screens

并删除了 不必要的 @react-navigation/stack,但打包后的体积变化不大。

2. 发现 android:extractNativeLibs 影响 APK 体积

在进一步分析后发现,iOS 的体积没有明显变化,只有 Android 体积增加,说明可能与 Android 配置相关。

AndroidManifest.xml 文件中,添加以下配置:

<application
    android:extractNativeLibs="true"
>

然后重新打包,APK 体积瞬间从 80 MB 降回 40 多 MB,并且所有功能正常运行。

3. android:extractNativeLibs 的作用

(1) 该属性的含义

android:extractNativeLibs 决定了 APK 安装时 是否解压 lib 目录下的 .so 文件

选项APK 体积加载速度适用场景
true(解压 .so 文件)较小稍慢适用于 Google Play更广泛的设备兼容性
false(不解压 .so 文件)较大更快适用于 企业内部 APK 直接安装

(2) React Native 0.76 默认值变更

在 React Native 0.76 之前,android:extractNativeLibs 默认是 true,而 0.76 改为了 false,导致:

  • .so 文件以 未压缩 形式存放在 APK 内部,导致 APK 体积变大

  • 启动时 直接从 APK 读取 .so,加快加载速度。

但由于 Google Play 更倾向于优化 APK 体积,所以如果你要发布到 Google Play,建议使用 android:extractNativeLibs="true"

4. 结论与优化方案

(1) 主要原因

  1. React Native 0.76 启用了新架构,导致原生代码和依赖增多,影响 APK 体积。

  2. android:extractNativeLibs 默认为 false,使 .so 文件未压缩存储,导致 APK 变大。

  3. 未启用代码混淆和资源压缩,导致额外的资源占用。

(2) 解决方案

启用 android:extractNativeLibs="true"(推荐):

<application
    android:extractNativeLibs="true"
>

开启代码混淆和资源压缩(减少 6M 左右):

release {
    minifyEnabled true
    shrinkResources true
}

尽量精简不必要的第三方依赖

(3) 是否要关闭新架构?

  • 如果你的 UI 组件在 newArchEnabled=false 时有问题,建议继续使用 新架构

  • 如果你希望减少包大小,并愿意做适配工作,可以尝试禁用新架构

5. 总结

在 React Native 0.76 升级后,Android APK 体积变大的核心原因主要是 新架构的启用android:extractNativeLibs 默认为 false

最终,通过 手动开启 android:extractNativeLibs="true",成功将 APK 体积从 80 MB 降到 40 多 MB,并确保了所有功能正常运行。

如果你的应用需要发布到 Google Play,建议保持 android:extractNativeLibs="true",同时开启 Proguard 和资源压缩,优化 APK 体积 🎯。

### 如何调试 React Native 0.76 最新版 #### 使用 Chrome DevTools 调试 JavaScript 代码 对于基于 JavaScript 的逻辑,在 React Native 中可以通过连接到 Chrome 浏览器来利用其强大的开发者工具进行断点设置、变量查看以及性能分析等功能。当应用启动时,摇晃设备或模拟器并选择 "Debug JS Remotely" 来打开远程调试模式[^1]。 #### 启用 Hermes 引擎后的特殊注意事项 如果启用了 Hermes,则需要注意一些特定于该引擎的行为差异。例如,默认情况下,Hermes 支持更高效的字节码缓存机制,这可能会影响某些类型的错误报告方式。为了更好地理解这些变化,建议在不带 Hermes 和带有 Hermes 的环境中分别测试应用程序,并通过命令 `npx react-native run-android --variant release` 或者针对 iOS 平台的相应指令执行发布构建以观察不同之处[^3]。 #### 利用 Flipper 进行多方面诊断 Flipper 是 Facebook 推出的一个桌面级的应用程序开发辅助平台,它提供了丰富的插件用于监控网络请求、数据库操作、图形渲染等多个层面的状态信息。安装完成后可以在本地计算机上运行并与正在调试的目标移动应用建立通信链接,从而实现更加深入细致的问题排查工作。对于 React Native 0.76 版本而言,确保已正确配置好环境以便能够顺利加载必要的 SDK 组件[^2]。 ```bash npm install @react-native-community/flipper-plugin-fresco ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wen's

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值