12
8

【Flutter】Javaのバージョンを上げるのにハマった

Posted at

はじめに

Javaのバージョンを上げることになった経緯

package_info_plusのバージョンを上げると、下記のようなエラーが出ました。

Execution failed for task ':package_info_plus:compileDebugJavaWithJavac'. > エラー: 17は無効なソース・リリースです

調べたところ、下記のIssueがヒットし、どうやら、package_info_plus6.0.0以降では、Javaのバージョン17が必要みたいです。
https://github.com/fluttercommunity/plus_plugins/issues/2809

パッケージのCHANGELOGにも書いてありました。

そこでJavaのバージョンを上げたのですが、ビルドが通らず、flutter doctor -vで確認したところ、Javaのバージョンが11を参照しているみたいでした。

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/utsunomiya/Library/Android/sdk
    • Platform android-34, build-tools 33.0.0
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
    • All Android licenses accepted.

したがって、Flutterで使用するJavaのバージョンを上げる必要があるみたいで、下記の記事を参考にし、実行してみたのですが、解決できず。

Flutterで使用するJavaについて

flutter configで、Flutterの設定ができるようですが、そのオプションにAndroid SDKのパスや、Javaのパスを指定するところがありました。

option 内容
--android-sdk The Android SDK directory.
--android-studio-dir The Android Studio installation directory.If unset, flutter will search for valid installations at well-known locations.
--jdk-dir The Java Development Kit (JDK) installation directory.
If unset, flutter will search for one in the following order:
1) the JDK bundled with the latest installation of Android Studio,
2) the JDK found at the directory found in the JAVA_HOME environment variable, and
3) the directory containing the java binary found in the user's path.

--jdk-dirの説明では、AndroidStudio → JAVA_HOME → PATHの順番でJavaのパスを確認するみたいでした。

おそらく、何もしてなければ、AndroidStudioのJavaを使用していると思うので、AndroidStudioのJavaのバージョンを上げれば、Flutterで使用するJavaのバージョンも上がります。
プロジェクトによっては、Javaのバージョンを上げるとビルドできなくなる場合もあると思うので、Javaのバージョン管理をどうすればいいかについては、別途調べたいなと思っています。

冒頭に書いた私がはまったポイントで、
Javaのバージョンを上げたのに、flutter doctor -vで確認しても、Javaのバージョンが上がらなかったのは
上記の参照の順番で、AndroidStudioのJavaが参照されていたことでした。

ただ、他の記事を見ていると、Homebrewを使用して、指定のJavaのバージョンをインストールして使用する手順が書いてあったので、AndroidStudioのJavaを使わない方法もあるみたいです。

解決方法

私の場合は、AndroidStudioをアップデートすると、同梱されているJavaのバージョンも上がり、ビルドできるようになりました。

おまけ

パスを通すについて

Javaをインストールするときに、.zshrcというファイルでパスを通す必要があります。
今まで、パスを通すのに、よく理解しないまま使っていたので、理解するために調べました。
bashの方は、.bashrcとなります。

bashとzshについて

Macだと、bashzshというシェルを使っています。
シェルとはコンピューターを操作するためのプログラムです。
bashzshの違いについては、zshbashの高機能版という位置付けのようです。
シェルについて、イメージを掴むには下記の記事が参考になりました。

Macのユーザーで、どちらを使っているのか?を確認するには、以下のコマンドをターミナルなどで、実行すると確認できます。

echo $SHELL

.bashrcと.zshrcについて

rcは、「Run Command」の略のようで、zshを実行するためのコマンドという意味みたいです。
上記だと、個人的には少しわかりにくかったのですが、zshを実行するときの設定ファイルみたいな意味合いだと理解しています。
下記の記事がすごく参考になりました。

.zshrcで、export PATH=$PATH:通したいパスを書いておくと、書いておいたPATHが通った状態でzshを実行できるということになります。

PATHとは

PATHとは、実行ファイルの場所という意味合いで理解しています。
なので、PATHを通すというのは、実行ファイルの場所を登録することという認識です。
PATHを.zshrcに登録しておかないと、コマンドを実行しても、実行ファイルの場所がわからないためエラーになります。
逆にいうと、実行ファイルをそのまま実行するなら、PATHは必要ないということでもあります。

例えば、フォルダの中身を調べるのに、lsというコマンドがありますが、lsという実行ファイルは/binフォルダの中にあります。

試しに以下のコマンドを実行すると、lsというファイルがあるはずです。

ls /bin

/binは、デフォルトでPATHに登録されているみたいです。
PATHの一覧は、以下で確認できます。

echo $PATH | sed -e 's/:/\n/g'

/binが登録されているおかげで、lsだけでlsコマンドが使えるということになります。
しかし、lsの場所は、/bin/lsであることがわかったので、フルパスを指定して以下の形でも実行できます

/bin/ls

実行結果は、lsと同じです。

詳しく知りたい方は、以下の記事がわかりやすくおすすめです。

シンボリックリンク

Flutterで使うJavaのバージョンを上げる際に調べた記事中でシンボリックリンクを作成するという手順がありました。
シンボリックリンクとは?という状態になったので、調べました。

概要

シンボリックリンクとは、簡単にいうと、ショートカット。フォルダやファイルパスの代わりになるものというイメージです。
実際に作り方を見ると、理解しやすいと思います。

作り方

作成コマンドは下記になります。

ln -s <リンク対象のパス> <作成するリンクのパス>

実際に使ってみたいと思います。
まず、テスト用のファイルとしてfaisofhasghafeafafdsa.txtを作成しました。

echo "link" >> faisofhasghafeafafdsa.txt

catコマンドを実行し中身を見ると以下のようなファイルになります。
image.png

続いて、faisofhasghafeafafdsa.txtに、link.txtというリンクを作成します。

ln -s faisofhasghafeafafdsa.txt link.txt

catコマンドを実行し中身を見ると以下のようなファイルになり、faisofhasghafeafafdsa.txtが参照されていることがわかります。
image.png

ls -lを実行すると以下のように出力され、リンクが作成されていることがわかります。

faisofhasghafeafafdsa.txt
link.txt -> faisofhasghafeafafdsa.txt

削除方法

削除はunlinkで削除できます。

相対パス
cd ~/work/link/
unlink link.txt
絶対パス
unlink ~/work/link/link.txt

シンボリックリンクの作成場所

シンボリックリンクを作成すると、対象のファイルと同階層にリンクが作成される。

cd ~/work/link
ln -s faisofhasghafeafafdsa.txt link.txt

上記のように作成した場合、faisofhasghafeafafdsa.txtlink.txtは同じフォルダ内(~/work/linkフォルダ)にある扱いとなる。

work/link
  ┝ a/faisofhasghafeafafdsa.txt
  └ dir

もし上記のようなフォルダ構成の場合、dirにリンクを作成することもできる

ln -s ~/work/link/a/faisofhasghafeafafdsa.txt dir/link.txt

別フォルダにリンクを作成する場合、参照するファイルは絶対パスにしておかないと参照できませんでした。

  • ~/work/link/a/faisofhasghafeafafdsa.txtはOK
  • a/faisofhasghafeafafdsa.txtはNG
    (理由はわかってないです)
12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8