概要
iOS13で、UIWebViewがついに廃止されるということで、Cordova6.4.2のアプリに手を入れないといけなくなりました。
諸々の事情により、新規でCordova環境を構築し、旧版の魔改造分をマージすることにしたのですが、Android環境構築にハマりましたので備忘録として残しておきます。
環境
- macOS High Sierra
- Xcode 10.1
- Android Studio 3.4.2
- Gradle 5.1.1
この記事で一番大事なこと
JDK8を使おう!
Cordovaインストール
nodebrew入れて、cordovaインストールしましょう。
$ curl -L git.io/nodebrew | perl - setup
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
$ source ~/.bash_profile
$ nodebrew install-binary stable
$ nodebrew ls
v12.6.0
$ nodebrew use v12.6.0
$ node -v
v12.6.0
$ npm -v
6.9.0
$ npm install -g cordova
$ cordova -v
9.0.0 (cordova-lib@9.0.1)
Android StudioでSDKツールのダウンロード
Android Studioで仮想デバイスの作成
JDK8のインストール
JDK12でやってる限り、下記のようなエラーが延々と解消しません。
Android platform:
ERROR: android: Command failed with exit code 1 Error output:
エラー: メイン・クラスjava.se.eeが見つからなかったかロードできませんでした
これは、おそらく、java.se.eeが完全に廃止されたということのようです。
JDK9では、DEFAULT_JVM_OPTSに、
-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
を追加すれば大丈夫のようですが、JDK12ではこれでも駄目でした。
(JDK8でやる場合は、このオプションをつけると逆にエラーになってハマります。JDK8の場合はつけないようにしましょう。)
【参考】
Java 9 で deprecated になったモジュールによる例外発生の問題にちゃんと対処したい
JDK8のインストールですが、OracleのJDK8はライセンス改定されましたので、OpenJDKを使用します。
下記よりDL可能です。(OpenJDK8は2023年6月までサポート。)
https://adoptopenjdk.net/archive.html
PATH設定(Gradle、SDK、JAVA_HOME)
Gradle、SDK、JAVA_HOMEのPATH設定が必要です。
$ vi ~/.bash_profile
export PATH=$PATH:"/Applications/Android Studio.app/Contents/gradle/gradle-5.1.1/bin"
export PATH=${PATH}:/Development/android-sdk/platform-tools:/Development/android-sdk/tools
export ANDROID_SDK_ROOT="$HOME/Library/Android/sdk"
export PATH="$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/tools:$PATH"
export PATH="$PATH:$ANDROID_SDK_ROOT/tools"
export PATH="$PATH:$ANDROID_SDK_ROOT/platform-tools"
export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v "1.8"`
PATH=${JAVA_HOME}/bin:${PATH}
反映
$ source ~/.bash_profile
Gradleの実行権限
chmod +x "/Applications/Android Studio.app/Contents/gradle/gradle-5.1.1/bin/gradle"
Cordovaプロジェクトの作成と起動
準備が完了しましたのでプロジェクトを作成します。
$ cordova create sample-app
$ cd sample-app/
$ cordova platform add ios android
targetエミュレータの指定
$ cordova run android --list
Available android devices:
Available android virtual devices:
Nexus_5_API_22
$ cordova emulate android --target="Nexus_5_API_22"
環境の確認
$ cordova info
cordova infoでエラーがなければ、問題なくエミュレータ起動できるはずです。
- Android
$ cordova run android
- iOS
$ cordova run ios
まとめ
JDK8を使おう!