1001001

73。CTFのWrite-upや技術的な備忘録を書きとめたいです。

【Mac/Cordova】CordovaでAndroidアプリのビルドができない(jdk, gradle)

Mac環境で使っているCordovaでAndroidアプリをビルドしようとしたらエラーでできなかった時の対処.
「とりあえずiOSしか使わないしAndroid環境は適当にやっておこう」と当初サボっていたせいで色々忘れていたのが原因だったが取り急ぎメモ.

環境

今回,すごくエラーの解消に遠回りをしてしまい色々調べたので,まず最短と思われる対処方法をメモした後,余談として調べたことを書く.

CordovaError: Requirements check failed for JDK 1.8 or greater

Androidのビルドでエラー

iOSで作っていたアプリがAndroidで正常に動作するか確かめるためコマンドを実行.

% cordova platform add Android
% cordova run android
~~~
ANDROID_HOME=/Users/ユーザ/Library/Android/sdk
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
(node:11218) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): CordovaError: Requirements check failed for JDK 1.8 or greater
~~~

「あれ?見たことないエラー出てる」となった(promiseのwarningも出てるけどこれは僕のミス).「Windows環境でやってた時とバイト先で環境構築したMacでやってた時はこんなんでなかったぞ」と思いつつ見てみると,どうやらJDKのバージョンのせいらしい.

JDKに関するエラーの対処

よくよく考えたら,このMac環境でAndroidのビルドするの初めてであることに気づく.JAVA_HOMEとかいじった覚えがない.
デフォルトのjdk-9ではダメなようだったので,OracleのサイトからJDK 8u161をインストール.
その後以下を.zshrcに追記.

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home"

iterm2を再起動してもう一度ビルドを試みるも別のエラー

CordovaError: Could not find an installed version of Gradle either in Android Studio,...

gradle見つからない

以下のようなエラーが出た

% cordova run android
Android Studio project detected
ANDROID_HOME=/Users/haruka/Library/Android/sdk
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home # ちゃんと変わっている
~~~
(node:15240) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): CordovaError: Could not find an installed version of Gradle either in Android Studio,
or on your system to install the gradle wrapper. Please include gradle
in your path, or install Android Studio
~~~

gradleが見つからないと言われているようだ.

gradleに関するエラーの対処

ググってみるとgradleをインストールしようなどの記事が見つかるが,Android Studioにgradleありそうだったのでまたまたパスを追加

export PATH="/Applications/Android Studio.app/Contents/gradle/gradle-4.1/bin":"$PATH"

これでエラーがなくなりAndroidの実機で実行することができた.
Android環境の構築にはこれ以外にAndroidSDKへのパスの追加なども必要だが,
詳細は本記事下部にあるApache Cordovaの公式サイトを参考にするとわかりやすい.

まとめ

MacBook Pro購入直後,ウキウキして早くiOSのビルドがしたくて環境構築を適当にやったために出たエラーであった.
JDKの設定とGradleのパスをきちんと通せば解決できる問題だった.

余談

gradleの権限設定によるエラー

gradleの権限設定がおかしくてgradleが見つからないという場合があるらしい.対処としては以下のように権限を変更する.

chmod +x /gradleへのパス/gradle/gradle-4.1/bin/gradle

gradleのバージョンによるエラー

今回の件とは違うのだが,gradleのバージョンでビルドできない場合があるらしい.
owlsoft.xyz

CordovaのAndroid環境のセットアップ

公式を参照
cordova.apache.org