React Native Android签名Release版APK安装后打开闪退问题求助
问题本质
你遇到的闪退是Release包内缺失index.android.bundle文件导致的,调整Gradle版本后,React Native 自带的自动打包JS bundle的构建脚本和新版Android Gradle Plugin(AGP)的资源路径规则不兼容,构建时没有自动生成并把bundle打包进APK的assets目录。
解决方案
- 手动验证可行性
先执行你提供的bundle命令:
执行完成后检查react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/android/app/src/main/assets/目录下是否存在大小正常的index.android.bundle文件,确认存在后手动打Release包安装测试,如果此时不再闪退,可确认是自动构建流程的问题。- 手动验证可行性
- 调整RN构建配置
打开android/app/build.gradle文件,修改react配置段,指定bundle输出路径匹配新版AGP规则:
同时确认文件末尾存在以下代码,且未被注释,确保RN构建脚本正常生效:project.ext.react = [ // 保留你原有配置,比如hermes开关 enableHermes: false, // 新增以下2行配置 jsBundleDirRelease: "$projectDir/src/main/assets/", resourcesDirRelease: "$projectDir/src/main/res/" ]apply from: "../../node_modules/react-native/react.gradle"- 调整RN构建配置
- 适配AppCenter构建流程
因为你使用Microsoft AppCenter构建,需新增预构建脚本保证每次构建都能生成正确的bundle: - 在项目根目录新建
appcenter-pre-build.sh文件 - 写入以下内容:
#!/usr/bin/env bash mkdir -p android/app/src/main/assets rm -rf android/app/src/main/assets/index.android.bundle android/app/src/main/res/drawable-* android/app/src/main/res/raw react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/- 将该文件提交到代码仓库,AppCenter构建时会自动执行该脚本。
- 适配AppCenter构建流程
- 版本兼容降级(可选)
如果上述配置修改后问题仍存在,可将AGP和Gradle降级到RN官方推荐的兼容版本:
根目录build.gradle修改AGP版本:
classpath("com.android.tools.build:gradle:4.0.2")gradle-wrapper.properties修改Gradle版本:distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip- 版本兼容降级(可选)
内容的提问来源于stack exchange,提问作者Pasan Induwara
相关产品推荐
相关产品推荐

