少し長くなりますが、お付き合いください。
経緯
ElectronとCordovaを用いて、HTML/CSS/JavaScriptによるマルチプラットフォームなアプリの開発をしたく、環境構築を行っています。
Windows、macOS、iOS向けにテストアプリを作ることができましたが、Android向けを用意する段で躓きました。
起きた問題
JDKのバージョンが古いらしい
Cordovaにてテストアプリを作成後に、iOSの実機テストまで行えました。
Androidのエミュレータでの動作確認 → 実機テストを行いたく、Cordovaにてplatform追加後にcordova run android
してみたところ、エラー発生で上手く動きません。
CordovaError: Requirements check failed for JDK 1.8 or greater
現環境のJDK(Java Development Kit)のバージョンが古いようです。
環境
- macOS Sierra 10.12.6 / iMac (Retina 5K, 27-inch, Late 2015)
- node.js 10.0.0
- nodebrew 8.9.4
- npm 6.0.1
調査
JDKのバージョンを調べる。
下記のサイトを参考に、まずはJDKのバージョンを調べてみます。
「Java 6 [Apple版]」のアンインストール
http://www.keyton-co.jp/blog/article/Java6forMacUninstall
macOSのJDKのインストール・更新方法
https://qiita.com/takayamag/items/1469c59370df348240f8
ターミナルで下記を実行します。
$ java -version
java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
最新版になっています。
さらに下記を実行します。
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
10.0.1, x86_64: "Java SE 10.0.1" /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
1.8.0_172, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
1.6.0_65-b14-468, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
JVMが複数存在しています。
恐らく、JDKのバージョン管理が必要と思われます。
JDKバージョン管理については、下記のような良記事があります。
【2018年版】macでAndroid開発環境を構築するための4つのこと
めんどくさ・・・・・・
(´・ω・`)
じゃなくて、結構たいへんそうです。
前提
先日アップした記事「Node 10.0.0でgulpクラッシュ」のものとはマシンが異なります。
CGや動画制作、デザイン制作用のiMacですが、環境共有のためにこのマシンでも試行錯誤しています。
Adobe CS6のアプリ群を使用するためにJava 6をインストールしていました。
解決
上記の様にJVMが複数存在しているため、管理がなかなか難しそうです。
追々管理ができるようにしていきますが、一旦Javaをすべてアンインストールして、当初の目的を果たします。
Javaの削除
Java 6 [Apple版]をアンインストール
上記サイトを参考にアンインストールします。
$ sudo pkgutil --forget com.apple.pkg.JavaForMacOSX107
$ sudo rm -rf /Library/Java/JavaVirtualMachines/1.6.0.jdk/
$ ls -ld /Library/Java/JavaVirtualMachines/1.6.0.jdk
ls: /Library/Java/JavaVirtualMachines/1.6.0.jdk: No such file or directory
と返ってくれば削除成功です。
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
10.0.1, x86_64: "Java SE 10.0.1" /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
1.8.0_172, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
Java8をアンインストール
$ sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/
$ ls -ld /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/
ls: /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/: No such file or directory
と返ってくれば削除成功です。
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
10.0.1, x86_64: "Java SE 10.0.1" /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
Java10をアンインストール
$ sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/
$ ls -ld /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/
ls: /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/: No such file or directory
と返ってくれば削除成功です。
$ /usr/libexec/java_home -V
Unable to find any JVMs matching version "(null)".
Matching Java Virtual Machines (0):
Default Java Virtual Machines (0):
No Java runtime present, try --request to install.
補足
下記をそれぞれ実行して、ブラウザ、環境設定に絡むパッケージ情報を削除します。
$ sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
$ sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane
$ sudo rm -fr ~/Library/Application\ Support/Java
結果
cordova run android
を実行したところ、
CordovaError: Failed to find 'JAVA_HOME' environment variable. Try setting it manually.
とのエラーに変わりました。
「Javaが無いですよ」ということですので、Javaのインストールから構築開始です。
Javaの再インストール
Java6は一旦保留します。
(※Adobe CS6でのみ使用していることと、直近でCS6アプリ群を使用する予定が無いため)
Java8のインストール
brew cask install java8
を実行します。
Cordovaにて
cordova run android
を実行した結果です。
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
Gradle(ビルドツール)が入っていないと・・・
Javaのバージョン問題は解決できましたので、引き続きAndroid開発環境の構築を進めます。
・・・なかなか厄介です。
まとめ
アプリ開発をしない限りは、あまりJavaを意識することはありませんでしたが、改めて掘り下げてみると、マシンの中身が思いの外グチャッとしていました。
見た目上はスッキリしているようでも、あれやこれやと入れたり出したりしているからです。
今回のように根本的に削除して、0から構築し直すという手順は、これからも整理方々キチンと身に付けていかないといけません。
長くなりましたが、最後までお読みいただきありがとうございました。