React NativeでAndroidのリリースビルドだけ起動後にスプラッシュ画面で止まる
先日リリースした「通知くん」のAndroid版を開発しています。
そこで原因不明の問題が発生、なんとか解決出来たのでその方法など書いておきたいと思います。
あまり同じ症状の方も見なかったのでちゃんとドキュメントを読んでセットアップすれば発生しない問題なのかもしれません。
症状
buildTypesに「staging」を追加している状態で./gradlew assembleStaging
を実行して出来たステージング用のapkをインストールして確認しようとすると
最初のスプラッシュ画面が表示されたあと、うんともすんとも言わず止まってしまう。
他にも、./gradlew assembleRelease
で出来た本番用のapkでも同様。
また、yarn android --variant release
を実行して、シミュレーターで確認しても同様です。
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"
}
}
原因の調査
デバッグモードを有効にしてビルドすると、以下のメッセージが表示された。
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
が動いてなさそう。
通常、buildTypes.release
, buildTypes.staging
はデバッグモードがオフになっているのでdebuggable true
を付与している。
解決方法
android/app/build.gradle
のproject.ext.react
にbundle関係の設定を追加する。
project.ext.react = [
enableHermes: false,
// highlight-start
// 以下追加
bundleInDebug: false,
bundleInRelease: true,
bundleInStaging: true,
devDisabledInStaging: true,
// highlight-end
]
これで無事解決!