滅茶苦茶ハマったので、備忘録としてまとめ。
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 アプリのリリース用ビルドを実行する方法でした。
解決まで数時間かかってしまったので、是非同じことにお悩みの方の参考になればと思います…!