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) 缺少 Progu

<think>嗯,用户遇到了React Native0.75.4升级0.76.7后项目闪退的问题,错误信息是找不到libhermes_executor.so。首先,我需要回忆一下React Native版本升级中常见的兼容性问题,特别是关于Hermes引擎的变化。 根据错误提示,SoLoader找不到这个DSO(动态共享对象),也就是libhermes_executor.so。这可能意味着在构建过程中这个库没有被正确打包或链接。在RN的版本升级中,特别是0.76版本,可能有一些配置变更需要处理。 首先,我应该检查Hermes的配置。在0.70版本之后,Hermes可能默认启用,但用户可能需要确保相关依赖正确安装。用户是否在升级后正确更新了Gradle文件和依赖?比如,在android/app/build.gradle中,Hermes的启用标志是否正确设置,以及是否有对应的ProGuard规则? 另外,清理构建缓存也是一个常见步骤,因为旧的缓存可能导致文件未被正确替换。用户是否执行过gradlew clean?有时候,仅仅重新构建可能不够,需要彻底清理。 还有,NDK的版本兼容性也是一个可能性。不同RN版本可能依赖不同NDK版本,用户是否安装了正确版本的NDK?或者项目中是否有指定NDK版本导致冲突? 另外,查看GitHub上的issue是否有类似的问题。例如,可能有其他开发者在升级0.76时遇到同样的问题,解决方案可能涉及到更新Hermes版本或调整构建配置。 还有可能,动态库的打包路径发生了变化,导致应用在运行时找不到。需要检查APK文件中的lib目录是否包含该so文件,如果没有,说明构建过程中没有正确生成或包含。 另外,检查react-native.config.js中的配置是否正确,特别是在Hermes启用时的配置。可能新版本需要额外的配置步骤。 最后,如果以上步骤都无法解决,可能需要尝试降级Hermes版本,或者回退RN版本,确认是否是版本本身的问题。</think>针对React Native0.75.4升级0.76.7后出现的`libhermes_executor.so`缺失导致的闪退问题,以下是逐步排查和解决方案--- ### 一、问题根源分析 该错误表明Hermes引擎的动态链接库缺失,常见原因包括: 1. Hermes相关依赖未正确配置 2. NDK版本不兼容 3. 构建缓存未清理干净 4. ProGuard规则冲突 --- ### 二、完整解决方案 #### 1. 确认Hermes配置 在`android/app/build.gradle`中检查配置: ```gradle project.ext.react = [ enableHermes: true, // 必须为true hermesCommand: "../../node_modules/hermes-engine/%OS-BIN%/hermesc" ] ``` #### 2. 清理构建缓存(关键步骤❗) ```bash # 删除所有构建产物 cd android && ./gradlew clean rm -rf node_modules yarn install ``` #### 3. 检查Hermes引擎版本 确保`package.json`中版本匹配: ```json "dependencies": { "hermes-engine": "~0.11.0" // 0.76.x推荐版本 } ``` 执行安装: ```bash yarn add hermes-engine@0.11.0 ``` #### 4. 配置NDK版本(Android Gradle Plugin 7.3+) 在`android/gradle.properties`添加: ```properties android.ndkVersion=23.1.7779620 ``` #### 5. 修改ProGuard规则 在`android/app/proguard-rules.pro`中添加: ```proguard -keep class com.facebook.hermes.** { *; } -keep class com.facebook.jni.** { *; } ``` #### 6. 检查APK结构(验证步骤) 解压生成的APK文件,确认包含: ``` lib/ ├─ arm64-v8a/ │ ├─ libhermes.so │ └─ libhermes_executor.so ``` --- ### 三、补充说明 如果仍存在问题,可尝试: 1. 关闭Hermes(临时验证): ```gradle project.ext.react = [enableHermes: false] ``` 2. 检查React Native CLI版本: ```bash npx react-native --version # 确保>=9.0.0 ``` 3. 查看完整错误日志: ```bash adb logcat | grep "AndroidRuntime" ``` --- ### 四、版本兼容性对照表 | 组件 | 0.75.4要求 | 0.76.7要求 | |----------------|----------------|----------------| | Hermes引擎 | 0.10.0 | 0.11.0 | | Gradle | 7.3.3 | 7.5.1 | | Android Gradle Plugin | 7.2.1 | 7.4.2 | 通过以上步骤,90%以上的同类问题可以得到解决。如果问题持续,建议检查RN版本升级指南中的Breaking Changes部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wen's

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

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

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

打赏作者

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

抵扣说明:

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

余额充值