MacでCordova開発環境の構築〜2019年版〜

# 概要
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ツールのダウンロード

<img width="922" alt="スクリーンショット 2019-07-18 15.05.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293270/65f8aa82-88b4-0b14-62b7-f8efcfbdcfb1.png">
<img width="919" alt="スクリーンショット 2019-07-18 15.06.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293270/fde8884c-b92c-8a6a-257e-39844f8fe687.png">

# Android Studioで仮想デバイスの作成
<img width="767" alt="スクリーンショット 2019-07-18 15.05.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293270/42263aa6-0a3d-21cd-5502-a10af6aacaf5.png">

# 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 になったモジュールによる例外発生の問題にちゃんと対処したい](https://k11i.biz/blog/2018/06/26/maven-artifacts-for-java9-deprecated-modules/)

JDK8のインストールですが、OracleのJDK8はライセンス改定されましたので、OpenJDKを使用します。
下記よりDL可能です。（OpenJDK8は2023年6月までサポート。）
[https://adoptopenjdk.net/archive.html](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を使おう！**