WindowsでFlutterのFVMを使う

#課題

WindowsでFlutterを使っていて、SDKの違うバージョンをインストールする必要がでてきた。

# 方針

検索してみると、こちらの``FVM``がよさそうなので導入する。
ただし、MAC系の情報ばかりなので、こちらに記載していく。

結構、四苦八苦してしまいました。

https://github.com/leoafarias/fvm


# インストール

インストールの方法は2種類。
DartのSDKがインストールされていて、そちら経由で入れるか単独で入れるか？という感じ。

https://fvm.app/docs/getting_started/installation

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/69d7aaba-2f58-b92e-6d43-7363a2206f8a.png)

すでに開発をされている場合は、dartのsdkがインストール済みなので、１の方法でインストールする。私もインストール済みなので、こちらで進めます。

## dart SDK 経由でインストールする

```powershell
E:\dev>dart pub global activate fvm
Package fvm is currently active at version 1.3.7.
Resolving dependencies...
+ args 1.6.0 (2.1.1 available)
+ charcode 1.1.3 (1.3.1 available)
+ checked_yaml 1.0.4 (2.0.1 available)
+ cli_dialog 0.4.0 (0.5.0 available)
+ cli_util 0.2.0 (0.3.3 available)
+ collection 1.14.13 (1.15.0 available)
+ console 3.1.0 (4.1.0 available)
+ dart_console 0.6.2 (1.0.0 available)
+ date_format 1.0.9 (2.0.2 available)
+ ffi 0.1.3 (1.1.2 available)
+ freezed_annotation 0.12.0 (0.14.2 available)
+ functional_data 0.3.0 (1.0.0 available)
+ fvm 1.3.7 (2.2.2 available)
+ http 0.12.2 (0.13.3 available)
+ http_parser 3.1.4 (4.0.0 available)
+ io 0.3.5 (1.0.3 available)
+ json2yaml 1.0.1+1 (2.0.0 available)
+ json_annotation 3.1.1 (4.0.1 available)
+ meta 1.2.4 (1.7.0 available)
+ path 1.7.0 (1.8.0 available)
+ pedantic 1.9.2 (1.11.1 available)
+ plain_optional 0.1.3 (1.0.0 available)
+ pretty_json 1.1.0 (2.0.0 available)
+ process_run 0.11.2+8 (0.12.1+1 available)
+ pub_api_client 1.0.9 (2.0.5 available)
+ pub_semver 1.4.4 (2.0.0 available)
+ pubspec_parse 0.1.8 (1.0.0 available)
+ pubspec_yaml 2.0.1+1
+ source_span 1.7.0 (1.8.1 available)
+ string_scanner 1.0.5 (1.1.0 available)
+ sum_types 0.2.1+2 (0.3.0 available)
+ synchronized 2.2.0+2 (3.0.0 available)
+ term_glyph 1.1.0 (1.2.0 available)
+ typed_data 1.2.0 (1.3.0 available)
+ vector_math 2.0.8 (2.1.0 available)
+ version 1.3.1 (2.0.0 available)
+ win32 1.7.4+1 (2.2.5 available)
+ yaml 2.2.1 (3.1.0 available)
Precompiling executables...
Precompiled fvm:main.
Installed executable fvm.
Warning: Pub installs executables into C:\Users\xxxx\AppData\Local\Pub\Cache\bin, which is not on your path.
You can fix that by adding that directory to your system's "Path" environment variable.
A web search for "configure windows path" will show you how.
Activated fvm 1.3.7.

```

最後の3行に、``warning``ででていますが、自分で環境変数に追加する必要があります。

左下のWindowsのマークでマウスを右クリックして、``コンテキストメニュー``が表示されるので、``システム``を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/9c42e40c-766b-09bb-8fc7-3433724791a1.png)

以下の画面が表示されますので、``システムの詳細設定``をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/3ab74d56-05b0-a12b-5ce0-1851ac12723a.png)

``システムのプロパティ``が表示されるので、``環境変数``をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/c548ff42-5cfe-86b9-738c-3153d5e6c8af.png)


システム環境変数の``path``をクリックして、その下の``編集``をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/27b8f2df-52f1-4f7b-2fa7-fc8fb2355f27.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/55a63cdb-3d10-89bb-f83b-5a4d5febae23.png)

以下のように追記します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/7ec6a692-629a-09cd-c650-6435ac28a845.png)

これでパスを通して、``cmd``を起動してバージョン情報が表示されるか確認します。

```powershell
fvm --version

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/77c29cfc-ecb1-baa9-7266-e33d3024200b.png)


とすると画面が閉じちゃいます（汗）

原因を追求する時間も惜しいので、立ち戻って、2のスタンドアロンインストールを行います。

## スタンドアロン インストール

スタンドアロンインストールを見ていくと、図中１の``windows``の場合に目が惹かれます。
流れにのって、図中２のコマンドを入力してみますがうまくいきません。

英語が苦手でグレーで見えづらく書かれていて視界に入らないようにしていましたが、こちらは、``他のパッケージマネージャを使う場合``の方法です。

なので、``choco``というパッケージマネージャを使わないと使えません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/11d5e845-3242-d32e-2c0a-366c080dfa85.png)

図中３のGithubからダウンロードします。

https://github.com/leoafarias/fvm/releases


現在は、fvm 2.2.2が最新バージョンです。私はWindows10の64ビットなので、図中の赤矢印のバージョンをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/80780407-b8b0-422f-15cf-d17bc81a4294.png)

私はダウンロードして自分でインストールするソフトは、``c:\tools\xxx``としてインストールる方針にしています。
Cドライブがいっぱいに近いので、今回は空き容量が多い``e:\tools\fvm``にZIP展開しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/c5b8073f-2ad3-22cb-de94-2240487fea2f.png)


cmdを起動して、バージョン確認をしてみます。さきほどのように画面が閉じるということなく、バージョンが表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/c966b112-ef8b-f6df-9aed-baa554c48954.png)

すぐに使えるように、さきほどのシステム環境変数の設定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/4d855f17-7ffb-00d9-a118-b88e7d64dbf4.png)


これでどこからでも呼び出せるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/502672bf-c6c5-0330-02c1-8b367abccdad.png)


## dart pub でインストールしたfvmの削除

Android Studioで``fvm``を実行すると、画面が閉じてしまいます。
dartでインストールしたバージョンが悪さをしているようです。

このためdartでインストールしたバージョンを削除します。

```powershell
dart pub global deactivate fvm

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/4e0fad91-739b-916b-8339-9aff40c112e9.png)


これでスタンドアロンでインストールしたバージョンを参照するようになりました。

# Flutterをインストールする

現在の開発に使っているFlutterのバージョンを確認する

```powershell
flutter --version
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/719d61f0-663f-a4af-8fb2-f5c5c26f5c16.png)


``1.22.5``を使っているのでこちらをインストールする。


```powershell
E:\dev>fvm install 1.22.5
Flutter "1.22.5" is not installed.

Installing version: 1.22.5...
Cloning into 'C:\Users\xxxx\fvm\versions\1.22.5'...
remote: Enumerating objects: 325753, done.
remote: Counting objects: 100% (148/148), done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 325753 (delta 68), reused 120 (delta 56), pack-reused 325605
Receiving objects: 100% (325753/325753), 153.77 MiB | 6.79 MiB/s, done.
Resolving deltas: 100% (252558/252558), done.
Updating files: 100% (5159/5159), done.
Updating files: 100% (3781/3781), done.
HEAD is now at 7891006299 Stable 1.22.5 cherrypicks - engine revert (#72079)

Could not install 1.22.5

Please run command with  --verbose if you want more information

```

失敗しました。
「詳細情報を表示させて原因を特定してね」ってことなので、詳細表示をしてみます。

```powershell
E:\dev>fvm install 1.22.5 --verbose
[     0.023s] FileSystemException: Cannot open file, path = 'C:\Users\xxx\fvm\.settings' (OS Error: 指定されたファイルが見つかりません。
, errno = 2)
[     0.037s] FileSystemException: Cannot open file, path = 'C:\Users\xxx\fvm\.settings' (OS Error: 指定されたファイルが見つかりません。
, errno = 2)
[     0.038s] FileSystemException: Cannot open file, path = 'C:\Users\xxx\fvm\.settings' (OS Error: 指定されたファイルが見つかりません。
, errno = 2)
[     0.041s] Version: 1.22.5 - already installed.
[     0.085s] FileSystemException: Cannot open file, path = 'C:\Users\xxx\fvm\.settings' (OS Error: 指定されたファイルが見つかりません。
, errno = 2)
[     0.091s] FileSystemException: Cannot create link to target 'C:\Users\xxx\fvm\versions\2.2.3', path = 'E:\dev\.fvm\flutter_sdk' (OS Error: クライアントは要求された特権を保有していません。
, errno = 1314)
[     0.092s] Usage Exception: Seems you don't have the required permissions on C:\Users\xxx\fvm On Windows FVM requires to run as an administrator or turn on developer mode: https://bit.ly/3vxRr2M

Could not install 1.22.5

Please run command with  --verbose if you want more information

```

Qiitaの仕様上、横スクロールをしないと見れないですが、抜粋すると以下になります。
リンクを貼るのは管理者権限なので、管理者権限のコマンドラインで実行します。

Windowsのあるあるですね。

> Usage Exception: Seems you don't have the required permissions on C:\Users\xxx\fvm On Windows FVM requires to run as an administrator or turn on developer mode: https://bit.ly/3vxRr2M

管理者権限で実行すると、きちんとリンクが貼れました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/1f6a135e-b20f-f1c2-8f1d-193fca259561.png)


ただし、Android Studioで、FlutterのSDKを設定しようとすると、指定ができません。

シンボリックリンクは、CドライブからEドライブにドライブをまたげないので、ドライブを揃えてみます。

こんな感じでSDKのキャッシュの保存先を変更します。

```powershell
E:\dev>fvm config --cache-path "E:\dev\flutter\versions"
Settings saved.


E:\dev>fvm config

FVM Settings:
Located at C:\Users\xxx\fvm\.settings

cachePath: E:\dev\flutter\versions
skipSetup: false
gitCache: false

```

シンボリックリンクも確かに貼れました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/3c7082c0-6daa-1dac-fb15-bc00de310a87.png)


こちらの設定をして Android StudioのFlutterのSDKを指定するのですが、ソースコード直下の``.fvm/flutter_sdk``を指定することができません。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/f6b41333-f079-3b9b-1837-dcca3ad8472e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/e643b48f-15c1-3b4c-34f4-7c7f2a59378c.png)



結局、キャッシュフォルダを直接指定に変更しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/ee037b44-7414-14fd-524f-a322a53371d6.png)