在使用React Native(0.68.2)的yarn工作区单体库中,Android发布版本崩溃。
在使用React Native(0.68.2)的yarn工作区单体库中,Android发布版本崩溃。
我正在使用使用Yarn Workspaces和Typescript创建的monorepo,其中包含一个React Native(0.68.2)项目(mobile文件夹)和一个common文件夹,其中包含要在项目之间共享的公共文件。在这里,mobile项目依赖于common文件,并且我已经按照这个文档进行了配置。
从Android开始,应用在调试模式下运行良好。当我创建发布版本时,apk成功生成。但是在安装应用并打开时,它会立即崩溃。观察错误,看起来似乎存在bundle的问题。我尝试手动运行bundle命令进行打包,并尝试生成apk,但仍然出现相同的错误。
LogCat中的错误:
2022-06-03 22:36:28.457 5699-5723/? E/AndroidRuntime: FATAL EXCEPTION: create_react_context Process: com.myapp.mobile, PID: 5699 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. at com.facebook.react.bridge.CatalystInstanceImpl.jniLoadScriptFromAssets(Native Method) at com.facebook.react.bridge.CatalystInstanceImpl.loadScriptFromAssets(CatalystInstanceImpl.java:248) at com.facebook.react.bridge.JSBundleLoader$1.loadScript(JSBundleLoader.java:29) at com.facebook.react.bridge.CatalystInstanceImpl.runJSBundle(CatalystInstanceImpl.java:277) at com.facebook.react.ReactInstanceManager.createReactContext(ReactInstanceManager.java:1422) at com.facebook.react.ReactInstanceManager.access$1200(ReactInstanceManager.java:138) at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:1111) at java.lang.Thread.run(Thread.java:923)
有什么建议吗?
问题出现的原因是打包的bundle放置在错误的路径上。解决方法是将bundle正确地放置在android\app\src\main\assets\index.android.bundle
路径下,可以使用以下命令来正确执行:
npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android\app\src\main\assets\index.android.bundle
如果你是在Windows系统上,将路径更改为android/app/src/main/assets/index.android.bundle
(适用于Linux或MacOS),将完整的命令行复制到这里:
npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle
我也遇到了同样的问题,我的发布apk成功创建,但只能在我的设备上运行,其他设备无法运行,问题出在哪里?
当在Android上运行React Native时,它会在android\app\src\main\assets\index.android.bundle
路径中查找bundle。如果将bundle放置在其他位置,就会出现上述错误。