React NativeでAndroidのリリースビルドだけ起動後にスプラッシュ画面で止まる

先日リリースした「通知くん」 のAndroid版を開発しています。

そこで原因不明の問題が発生、なんとか解決出来たのでその方法など書いておきたいと思います。

あまり同じ症状の方も見なかったのでちゃんとドキュメントを読んでセットアップすれば発生しない問題なのかもしれません。

症状

buildTypesに「staging」を追加している状態で ./gradlew assembleStaging を実行して出来たステージング用のapkをインストールして確認しようとすると
最初のスプラッシュ画面が表示されたあと、うんともすんとも言わず止まってしまう。1

buildTypesの設定

以下のような設定をしています。

buildTypes {
debug {
applicationIdSuffix '.debug'
signingConfig signingConfigs.debug
}
staging {
initWith release
matchingFallbacks = ['release']
applicationIdSuffix '.staging'
signingConfig signingConfigs.release
}
release {
signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}

原因の調査

デバッグモードを有効にしてビルドすると、以下のメッセージが表示された。2

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.

Metro serverは開発時にしか使わないので関係ない。ってことで怪しいのは「that your bundle 'index.android.bundle' is packaged correctly for release」の方。

どうやら react-native bundle が動いてなさそう。

解決方法

android/app/build.gradle project.ext.react にbundle関係の設定を追加する。

project.ext.react = [
enableHermes: false,
// 以下追加
bundleInDebug: false,
bundleInRelease: true,
bundleInStaging: true,
devDisabledInStaging: true,
]

これで無事解決!

参考

https://qiita.com/IzumiSy/items/b72243115751d47c5862


  1. 他にも、 ./gradlew assembleRelease で出来た本番用のapkでも同様。
    また、 yarn android --variant release を実行して、シミュレーターで確認しても同様です。
  2. 通常、buildTypes.release, stagingはデバッグモードがオフになっているので debuggable true を付与する

deg84

フリーランスでWeb系のエンジニアとスクラムマスターをやっています。

© 2020 deg84