deg84's blog

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

#React Native

#Android

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

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

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

症状

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

buildTypesの設定

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

android/app/build.gradle

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.gradleproject.ext.reactにbundle関係の設定を追加する。

android/app/build.gradle

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

これで無事解決!

参考

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

Footnotes

  1. 他にも、./gradlew assembleReleaseで出来た本番用のapkでも同様。
    また、yarn android --variant releaseを実行して、シミュレーターで確認しても同様です。

  2. 通常、buildTypes.release, stagingはデバッグモードがオフになっているのでdebuggable trueを付与する

deg84

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

© 2020 deg84