はじめに
Javaのバージョンを上げることになった経緯
package_info_plusのバージョンを上げると、下記のようなエラーが出ました。
Execution failed for task ':package_info_plus:compileDebugJavaWithJavac'. > エラー: 17は無効なソース・リリースです
調べたところ、下記のIssueがヒットし、どうやら、package_info_plusの6.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/xxxx/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だと、bash
かzsh
というシェルを使っています。
シェルとはコンピューターを操作するためのプログラムです。
bash
とzsh
の違いについては、zsh
はbash
の高機能版という位置付けのようです。
シェルについて、イメージを掴むには下記の記事が参考になりました。
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
コマンドを実行し中身を見ると以下のようなファイルになります。
続いて、faisofhasghafeafafdsa.txt
に、link.txt
というリンクを作成します。
ln -s faisofhasghafeafafdsa.txt link.txt
cat
コマンドを実行し中身を見ると以下のようなファイルになり、faisofhasghafeafafdsa.txt
が参照されていることがわかります。
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.txt
とlink.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
(理由はわかってないです)