Google Play でリリースしている React Native の Android アプリのみ、起動直後にクラッシュするという不具合が発生したのでその対処法についてです。
振り返ってみると、React Native の Android アプリでだけ、API との通信に失敗したり、Mapbox の地図が表示されなかったりしますね…。
iOS は割とすんなり動くのに、何故 Android だけがこんなに問題児なのか…。
参考にさせていただいた記事はこちらから。
ReactNativeでAndroidのリリースビルドだけが落ちる – Qiita
https://qiita.com/IzumiSy/items/b72243115751d47c5862
2018年の記事ですが、問題ありませんでした。
発生していたエラーは下記のとおりです。
java.lang.RuntimeException: at com.facebook.react.bridge.CatalystInstanceImpl.jniLoadScriptFromAssets (Native Method) at com.facebook.react.bridge.CatalystInstanceImpl.loadScriptFromAssets (CatalystInstanceImpl.java:232) at com.facebook.react.bridge.JSBundleLoader$1.loadScript (JSBundleLoader.java:29) at com.facebook.react.bridge.CatalystInstanceImpl.runJSBundle (CatalystInstanceImpl.java:261) at com.facebook.react.ReactInstanceManager.createReactContext (ReactInstanceManager.java:1350) at com.facebook.react.ReactInstanceManager.access$1100 (ReactInstanceManager.java:135) at com.facebook.react.ReactInstanceManager$5.run (ReactInstanceManager.java:1053) at java.lang.Thread.run (Thread.java:923)
Google Play に送られてきていたクラッシュレポートです。
上記の記事によると「React Native の Android リリースビルドの際に JavaScript 側のバンドルが走らず、ランタイムに読み込み対象のバンドルアセットが見つからないためアプリがクラッシュする」とのことでした。
…よく分からん!
とにかく、リリース用ビルドが失敗しているということでしょうか…?
で、対処方法としては、/android/app/build.gradle
に下記の 2行を追加すればいいとのことでした。
project.ext.react = [ bundleInDebug: false, // この行を追加 bundleInRelease: true, // この行を追加 ...... ]
上記を追加後、下記コマンドを実行してリリース用 APK ファイルを作成します。
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 cd android gradlew --stop gradlew clean gradlew assembleRelease -x bundleReleaseJsAndAssets
作成した APK ファイルを Android 端末に転送し、そのファイルからアプリをインストールして実行したところ、今度はクラッシュすることなく起動しました!
以上、React Native の Android のリリースビルドのみ起動直後にクラッシュする不具合を修正する方法についてでした。
ご参考になれば幸いです。