- 投稿日:2020-01-23T21:26:33+09:00
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
- 投稿日:2020-01-23T15:48:41+09:00
Wifi経由でadbコマンドを実行しよう(2.Linux編)
はじめに
ずっとWindowsからAndroidアプリのテストをしていたので意識していませんでしたが、
Linuxからでもadbコマンドを実行することができるようです。使用ツール
- Linux環境
- teraterm
- Linux用のAndroid SDK
- WinSCP
手順
- Android端末の開発者モードをONにしてUSBデバッグを可能にする。
- PC、Android端末ともにWifiに接続。
- Linux環境にAndroid SDKをインストール。
- sdkmanagerコマンドでパッケージをインストール。
- adb接続。
- adbコマンドを実行。
- adbを切断。
ほとんど、Wifi経由でadbコマンドを実行しよう(1.Windows編)と
やることは変わりませんが、
3. Linux環境にAndroid SDKをインストール。、
4. sdkmanagerコマンドでパッケージをインストール。、
5. adb接続。にWindowsと違いがありますので、そこだけ説明します。3. Linux環境にAndroid SDKをインストール。
Android SDKのインストール手順
- Android SDKを入手
- Linuxの適当なパスに1で入手したAndroid SDKを移動
- パスを通す。
1. Android SDKを入手
ここにアクセスしてAndroid SDKをダウンロードします。
アクセスしたらDOWNLOAD OPTIONSをクリック。
Command line tools onlyよりLinux用のファイルを選択してダウンロードしてください。
2. Linuxの適当なパスに1で入手したAndroid SDKを移動
1で入手したSDKをAndroid SDKのzipファイルを解凍するとtoolsというフォルダが出てきますので、
WinSCPを使用して、Linuxの好きな場所に移動しましょう。
私は/opt/android-sdk
に移動しました。3. パスを通す。
.bashrcの末尾に1行追加します。
.bashrcをviで開いて
vi ~/.bashrc一行追加して
export PATH=${PATH}:/fssdb/android-sdk/tools:/fssdb/android-sdk/platform-tools内容を反映。
source ~/.bashrc4. sdkmanagerコマンドでパッケージをインストール。
下記を実行します。
/opt/android-sdk/tools/bin/sdkmanager "platforms;android-26" /opt/android-sdk/tools/bin/sdkmanager "build-tools;26.0.1"ちょっと前まで上記までやってればadbも使えたのですが、
いまはadbを実行するために下記も実行してください。/opt/android-sdk/tools/android update sdk /opt/android-sdk/tools/bin/sdkmanager platform-tools5. adb接続。
ほとんどWindowsと同じなのですが、1点だけ違いがあります。
Linuxでは、:5555
部分が省略不可です。adb connect 123.456.789.012:5555ちなみに
違う方法で接続してadbコマンドを実行していた場合、
例えばWindowsから有線でadbを事項していた場合、
一旦許可を取り消さないと新たな端末(今回設定したLinuxとか)からadbコマンドが実行できませんので注意。関連ページ
Wifi経由でadbコマンドを実行しよう(1.Windows編)
Wifi経由でadbコマンドを実行しよう(2.Linux編)参考サイト
adb の使い方(Linux 編)
Ubuntu 16.04にAndroid SDKをインストール
How To Fix ADB Device Unauthorized Message On Android