React Native升级后APK启动报错:无法加载index.android.bundle
React Native 升级后APK启动报错:无法加载脚本
我通过React Native升级助手将项目从0.63.3版本升级到0.66.4版本,严格执行了所有操作步骤,但生成APK启动时出现以下报错:
01-27 19:12:46.364 9223 9895 E AndroidRuntime: java.lang.RuntimeException: Unable to load script. Make sure you're either running Metro (run 'npx react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release. 01-27 19:12:46.364 9223 9895 E AndroidRuntime: at com.facebook.react.bridge.CatalystInstanceImpl.jniLoadScriptFromAssets(Native Method) 01-27 19:12:46.364 9223 9895 E AndroidRuntime: at com.facebook.react.bridge.CatalystInstanceImpl.loadScriptFromAssets(CatalystInstanceImpl.java:2) 01-27 19:12:46.364 9223 9895 E AndroidRuntime: at com.facebook.react.bridge.JSBundleLoader$1.loadScript(JSBundleLoader.java:1) 01-27 19:12:46.364 9223 9895 E AndroidRuntime: at com.facebook.react.bridge.CatalystInstanceImpl.runJSBundle(CatalystInstanceImpl.java:3) 01-27 19:12:46.364 9223 9895 E AndroidRuntime: at com.facebook.react.o.s(ReactInstanceManager.java:39) 01-27 19:12:46.364 9223 9895 E AndroidRuntime: at com.facebook.react.o.c(ReactInstanceManager.java:1) 01-27 19:12:46.364 9223 9895 E AndroidRuntime: at com.facebook.react.o$f.run(ReactInstanceManager.java:12)
我的index.android.bundle已生成在正确路径,且尝试了以下方案均未解决:
- 执行打包命令:
mkdir android/app/src/main/assets react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res - 在Project build.gradle中配置:
project.ext.react= [ bundleInDebug: true, bundleInRelease: true ] - 在AndroidManifest.xml中配置:
android:usesCleartextTraffic="true" tools:ignore="GoogleAppIndexingWarning" - 在Project build.gradle中配置:
project.ext.react= [ entryFile: "index.js", bundleAssetName: "index.android.bundle", devDisabledInAppDev: true, devDisabledInRelease: true ] - 参考过相关Stack Overflow解决方案
可行解决办法
修正打包命令的入口文件参数
RN 0.60+版本默认入口文件为index.js,若你的项目已统一使用该入口,需修改打包命令的--entry-file参数,重新执行打包: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验证bundle是否正确打包进APK
解压生成的APK文件,检查assets目录下是否存在index.android.bundle且文件大小正常(非空)。若不存在,执行以下步骤:- 清理Android构建缓存:
./gradlew clean(Mac/Linux)或gradlew clean(Windows) - 重新执行打包命令后,构建Release APK:
./gradlew assembleRelease
- 清理Android构建缓存:
统一React Native构建配置
在项目根目录的build.gradle中保持配置与实际打包逻辑一致,推荐配置:project.ext.react = [ entryFile: "index.js", bundleAssetName: "index.android.bundle", bundleInRelease: true, bundleInDebug: false ]同时确认
android/app/build.gradle中存在apply from: "../../node_modules/react-native/react.gradle"语句,且位置在dependencies块之前。调整ProGuard配置(若启用)
若Release构建启用了ProGuard,需在android/app/proguard-rules.pro中添加React Native代码保护规则:-keep class com.facebook.react.** { *; } -keep class com.facebook.soloader.** { *; } -dontwarn com.facebook.react.**添加后重新构建APK。
重置assets目录
手动删除并重建assets目录,确保目录权限正常:rm -rf android/app/src/main/assets mkdir android/app/src/main/assets之后重新执行打包命令。
内容的提问来源于stack exchange,提问作者shweta
相关产品推荐
相关产品推荐

