Help us understand the problem. What is going on with this article?

Android StudioでJavaのversionで躓いたのでまとめる

はじめに

ここ数ヶ月、実務インターンをするようになってから、インターン先が変わるたびに環境構築をしているのですが、適当にやっているせいでJDKのバージョンが原因なエラーに幾度となく躓いてきました。

毎回調べて、

ああ...JDKのversionが原因か。で、どうするんだっけ。と調べるのが不毛なため備忘録として記事にしました。

この記事は自分のユースケースにおける対処法なため、他の方には当てはまらないかもしれませんが、随時updateしていければと思います。

躓いた具体的なユースケース

まず、

java -vesion

とターミナルで打つと、ご自身のJDKのバージョンがいくつか確認できるのでご参考までに。

How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

この時の自分のJDKは

java 12.0.2 2019-07-16

でした。

Java 9で「モジュール」の機能が追加された際に、標準ライブラリからいくつかのモジュールが非推奨となりました。

Java 9以降でJAXBを使用するには、外部JARが必要 #49

この機能追加により、 JAXB なるモジュールも非推奨となり、上記のエラーが出るようになったみたいです。Java 8以下では再現せず、Java 9以上の環境で再現するとのこと。

解決策

Java 9, 10であれば、実行時のオプションで

--add-modules java.xml.bind

を指定してあげれば一旦は凌げます。

毎回オプションを追加するのが面倒臭いとか、そもそもJava 10より上のJDK環境の場合は以下の強引な解決策を試してみてください。

強引な解決策

Android StudioのJDKを使用する

まず、知っておくべきことが

Android Studioは、Javaの実行環境そのものを提供してくれています。

そのため、Android Studioがapkを作る時に使っているJavaのPathのメモ の記事でも言及されているように、普段我々がGUIでAndroid StudioでRunした際には、 Android StudioのJava環境でapplication moduleをビルドし、apkを作成しています。

逆に、

Android Studioの下部のTerrminalや、MacやWindowsのアプリケーションとして開いているターミナルでは、OSの実行環境が使用されます。

したがって、GUIではちゃんとビルドできるのに、

./gradlew assemble

等のコマンドでビルドしようとすると失敗するのはそのせいです。

GUIでビルドができるなら、Android Studioの実行環境でTerminalも動かしてしまえば良いということで、

.bashrc.zshrc に環境変数のPathを通してあげればよさそうです。

export PATH=$PATH:/Applications/"Android Studio.app"/Contents/jre/jdk/Contents/Home/bin
export JAVA_HOME=/Applications/"Android Studio.app"/Contents/jre/jdk/Contents/Home

すると、Android Studioのバージョンにもよりますが、適切なJavaのバージョンでの実行環境でTerminalからも起動できるようになります。

ちなみにAndroid Studio 3.6-RC1では 1.8.0_212-release でした。

異なるversionのJDKをダウンロードする

異なるversionといえども上記のAndroid Studioの実行環境から、 1.8.0 系が良さそうです。Java 8ですね。

Oracle社HP からinstallします。

installの手順は沢山記事があるのでそちらを参考願います。

最近からサインインが必要になったためOracleのアカウントを作らないと行けなかったはずです。

また、表示名が Java SE Development Kit 8u241 みたいな形で、 8u*** となっているかもしれませんが、それが1.8.0 系です。

installができたら、自分がインストールしたJDKのバージョン一覧をみてみましょう。

/usr/libexec/java_home -V

確認できたら、そのJDK versionを環境変数に設定します。

export JAVA_HOME=`/usr/libexec/java_home -v {java_version}

{java_version} には先ほど確認したversionを入れましょう。

あとは無事設定できてるかを

java -version

で確認して、ちゃんと設定できていたらOKです。

参考文献

https://qiita.com/mas0061/items/2fe9333f045800d00b5c

https://qiita.com/kkkkan/items/f9595107a2a9153d1c60

https://github.com/acroquest/javabook-support/issues/49

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした