ReactNativeのandroid releaseが動かない

ReactNativeでinitしただけのアプリのandroid releaseが動かないときの対処方法です。react: 16.8.3, react-native: 0.59.8 です。

1. ターミナルで、Task 'installRelease' not found in project が表示された場合

$ react-native run-android --variant=release info Starting JS server... info Building and installing the app on the device (cd android && ./gradlew app:installRelease)... FAILURE: Build failed with an exception. * What went wrong: Task 'installRelease' not found in project ':app'. Some candidates are: 'uninstallRelease'.

release apkができているか確認してください。本来は、app-release.apk があるはずです。

# app-release.apkがない! $ ls ./android/app/build/output/release/ output.json

release apkがない場合は、android/app/build.gradle に署名キーの設定が不足しています。とりあえず、debug用の設定を記述しましょう。

// android/app/build.gradle signingConfigs { release { keyAlias "androiddebugkey" keyPassword "android" storeFile file('~/.android/debug.keystore') storePassword "android" } } buildTypes { release { 〜省略 signingConfig signingConfigs.release } }

2. エミュレータ画面で「問題が発生したため、(アプリ名)を終了しました」と表示された場合

ターミナルの表示では、BUILD SUCCESSFULと表示されました。

しかし、エミュレータ画面(または実機の画面)は白くなった直後、アラートボックスで「問題が発生したため(アプリ名)を終了しました」と表示されて、終了してしまいました。

$ react-native run-android --variant=release 〜省略〜 BUILD SUCCESSFUL in 39s

念のため、release apkができていることを確認しておきましょう。

$ find . -name "*.apk" ./android/app/build/outputs/apk/release/app-release.apk

android/build.gradleを見てください。gradleプラグインバージョンは、3.3.1でしょうか?3.4.1でしょうか?

// android/build.gradlw buildscript { 〜省略 dependencies { classpath 'com.android.tools.build:gradle:3.4.1'

react-native init直後は、3.3.1です。android stuidoで開いたとき、gradleをupdateしますかと聞かれて、Updateしたので、3.4.1になっていました。

そんなことは忘れていて、動くプロジェクトと、動かないプロジェクトをdiffして、ようやく判明しました。

対応方法1:3.3.1に戻す

3.4.1 の部分を 3.3.1 に編集してください。次にターミナルで、中間ファイルを削除してから、releaseビルドしてください。

$ cd android $ ./gradlew clean $ cd .. $ react-native run-android --variant=release

対応方法2:3.4.1のまま、手動でbundleする

次の記事によると、原因は、jsがbundleされないため。自力でbundleするとよい、とのことです。

findしてみると、index.android.bundleがありませんでした。

# できていない場合 $ find . -name index.android.bundle (何も表示されない# 正常の場合 $ find . -name index.android.bundle ./android/app/build/intermediates/merged_assets/release/mergeReleaseAssets/out/index.android.bundle ./android/app/build/intermediates/assets/release/index.android.bundle ./android/app/build/generated/assets/react/release/index.android.bundle

次のような、releaseビルド用のシェルスクリプト run-android-release.shを作ってください。実行すると、releasaeビルドが動きました。

#!/bin/bash # 必要に応じて、releaseの署名キー情報 . setenv.sh cd android ./gradlew assembleRelease cd .. mkdir -p android/app/src/main/assets 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/ react-native run-android --variant=release
$ chmod +x run-android-release.sh $ cd android/; ./gradlew clean; cd .. $ ./run-android-release.sh

※ application_idをcom.xxxxからclick.xxxxに編集したので、これも疑いましたが、これは原因ではありませんした。

タイトルとURLをコピーしました