【React Native】Androidのリリース用ビルドを実行する

滅茶苦茶ハマったので、備忘録としてまとめ。
React Native で Android アプリのリリース用ビルドを行う方法です。

公式サイトにも手順が載っており、私はこちらを参考に行いました。

Publishing to Google Play Store · React Native
https://reactnative.dev/docs/signed-apk-android

 

ではまず、アップロードキーの生成から行っていきます。
コマンドプロンプトから keytool コマンドを実行するのですが、まずコマンドプロンプトを管理者として実行してください。
コマンドプロンプトが起動したら、下記のディレクトリまで移動します。

C:\Program Files\Java\jdkx.x.x_x\bin

なお、jdkx.x.x_x は環境によって異なり、私の PC では、jdk1.8.0_121 でした。

上記のディレクトリまで移動できたら、下記のコマンドを実行します。

keytool -genkeypair -v -keystore [キーストアファイル名.keystore] -alias [エイリアス名] -keyalg RSA -keysize 2048 -validity 10000

キーストアファイル名.keystore」と「エイリアス名」には任意のテキストを指定してください。
生成できたファイルは、プロジェクトの android/app に追加します。

上記が完了したら、プロジェクトの android/gradle.properties を開き、下記を追加します。

MYAPP_UPLOAD_STORE_FILE=[キーストアファイル名.keystore]
MYAPP_UPLOAD_KEY_ALIAS=[エイリアス名]
MYAPP_UPLOAD_STORE_PASSWORD=[パスワード]
MYAPP_UPLOAD_KEY_PASSWORD=[パスワード]

次に android/app/build.gradle を開き、下記を追加します。

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
                storeFile file(MYAPP_UPLOAD_STORE_FILE)
                storePassword MYAPP_UPLOAD_STORE_PASSWORD
                keyAlias MYAPP_UPLOAD_KEY_ALIAS
                keyPassword MYAPP_UPLOAD_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

上記が完了したら、プロジェクトディレクトリ下の android ディレクトリまで移動し、下記のコマンドを実行します。

gradlew bundleRelease

このコマンドが完了すれば、android/app/build/outputs/bundle/release/app.aab が生成され、そのファイルを Google Play にアップロードしてアプリが公開できるとのことでした。

が、私の環境では、上のコマンドを実行したところ、Nodist のパスが通っていないというエラーが発生しました…!
そこで、Nodist を再インストールしてみたのですが、解決せず…。

色々キーワードを変えて検索してみたところ、下記の記事がヒットしました。

javascript – React-Native assembleRelease fails for task ‘:app:bundleReleaseJsAndAssets’ – Stack Overflow
https://stackoverflow.com/questions/49513047/react-native-assemblerelease-fails-for-task-appbundlereleasejsandassets

上記の記事によると、gradlew bundleRelease を実行する前に、下記を実行すればいいとのことでした。

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/

gradlew clean

gradlew --stop

正直半信半疑でしたが、上記を実行してから、再度 gradlew bundleRelease を実行したところ、何事もなかったかのようにビルドに成功しました。
余りにすんなり通ったので、思わず 3度見くらいしましたね。
どれが決め手となったかは分からないのですが、無事に成功してよかったです…!

ただ、生成されたファイルは .aab ではなく .apk でした。
…まあ、アップロードは問題なくできるので特に支障はないのですが…できれば .aab を生成して欲しかった…。
こちらは今後調査していきたいと思います!

なお、上記以外にも一度 node_modules を削除してから npm install を実行したり、npm-cache clean --force を実行したりしたので、もしかしたらこのあたりも実行してみるといいかもしれません。

 

以上、React Native で Android アプリのリリース用ビルドを実行する方法でした。
解決まで数時間かかってしまったので、是非同じことにお悩みの方の参考になればと思います…!

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG