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

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

先日リリースした「通知くん」の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.gradleproject.ext.reactにbundle関係の設定を追加する。

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

これで無事解決!

参考

ReactNativeでAndroidのリリースビルドだけが落ちる - Qiita
概要具体的にはlogcatで覗ける以下のエラーの対処法について。04-28 19:51:21.349 22127-22151/? E/AndroidRuntime: FATAL EXCEPTIO…