通过App Center部署React-Native应用时Android正式版启动崩溃问题排查
从你提供的logcat日志来看,核心错误非常明确:
java.lang.RuntimeException: Unable to load script. Make sure you're either running a Metro server (run 'react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.
这说明App Center构建的APK没有包含正确打包好的JS bundle文件,而你本地执行gradlew assembleRelease没问题,大概率是App Center的构建流程和本地的配置/执行步骤不一致导致的,下面是几个最可能的原因和对应的排查方向:
App Center构建时未自动执行JS bundle打包任务
本地运行gradlew assembleRelease时,React Native的默认gradle脚本会自动触发bundleReleaseJsAndAssets任务,生成并打包JS bundle。但App Center的构建环境可能因为配置缺失,跳过了这个关键步骤。
解决方法:在App Center的Android构建前脚本中,手动添加bundle生成命令:# 如果assets目录不存在先创建 mkdir -p android/app/src/main/assets # 生成release版本的JS bundle和资源 npx 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/同时确保你的gradle脚本中,
assembleRelease任务依赖bundleReleaseJsAndAssets(默认是有的,但可以检查android/app/build.gradle确认)。App Center构建环境的依赖不匹配
如果App Center使用的Node.js版本、react-native-cli版本和你本地的不一致,可能会导致bundle生成失败(但构建日志可能没明显报错),最终APK里没有bundle文件。
解决方法:在构建前脚本中指定和本地一致的Node.js版本,比如:nvm install 14.18.0 nvm use 14.18.0 # 重新安装依赖 npm install执行完依赖安装后再手动执行上面的bundle生成命令。
bundle生成路径或入口文件配置错误
比如你的项目入口文件是index.android.js而不是默认的index.js,或者bundle输出路径和gradle期望的不一致,导致gradle找不到bundle文件,无法打包进APK。
解决方法:检查bundle命令中的--entry-file参数是否和项目实际入口一致,--bundle-output路径必须是android/app/src/main/assets/index.android.bundle,如果assets目录不存在一定要先创建。误选了Debug构建变体
App Center默认可能会选择Debug模式构建,而Debug模式下的React Native应用会尝试连接本地Metro服务器,不会打包本地bundle,这就会导致安装后启动崩溃(因为没有Metro服务器可以连接)。
解决方法:登录App Center,进入你的Android应用构建设置,确认构建的是Release变体,而不是Debug。APK打包时bundle文件被意外遗漏
可以做一个快速验证:下载App Center构建好的APK文件,用解压工具打开它,检查assets目录下是否存在index.android.bundle文件。如果不存在,说明前面的bundle生成步骤有问题;如果存在,那可能是加载路径或权限问题(这种情况比较少见,可以检查gradle中关于assets目录的配置)。
内容的提问来源于stack exchange,提问作者chenop

