Open4
WSL2上にFlutter開発専用の環境を構築する
環境
windows
Windows 11 Home 10.0.22000
wsl2
Distributor ID: Ubuntu
Description: Ubuntu 20.04
Release: 20.04
Codename: focal
前準備
後々Snapを利用してFlutter SDKをインストールするのだが、場合によっては環境自体が壊れることがあるので先にSnapを正常に動かせるようにしておく
bash
sudo apt-get update && sudo apt-get install -yqq daemonize dbus-user-session fontconfig
sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
exec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME
snap version
この際apt
を使うと、/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
と怒られるので以下の方法で対処しておく
- /etc/wsl.confに以下を追記
wsl.conf
[automount]
ldconfig = false
- 以下を叩く
bash
sudo mkdir /usr/lib/wsl/lib2
sudo ln -s /usr/lib/wsl/lib/* /usr/lib/wsl/lib2
sudo sed -i -e 's|^/usr/lib/wsl/lib|/usr/lib/wsl/lib2|' /etc/ld.so.conf.d/ld.wsl.conf
手順
-
https://cloud-images.ubuntu.com/focal/current/ から
focal-server-cloudimg-amd64-wsl.rootfs.tar.gz
をWindows上の好きな箇所にダウンロード - powershellを開いて以下のようにimportする
powershell
wsl --import flutter-dev <wsl環境を作成する場所> <rootfsファイル> --version 2
- 仮想環境起動
powershell
wsl -d flutter-env
- ユーザー作成
bash
useradd -m -s $(which bash) <username>
passwd <username>
usermod -G sudo <username>
cat << EOF > /etc/wsl.conf
[user]
default=<username>
EOF
- 一旦WSLから抜けて再起動
bash
exit
powershell
wsl -t flutter-env
wsl -d flutter-env
WSLからエミュレーターを取り扱いたいのでAndroid SDKを導入する
- CommandLineToolsのダウンロード
https://developer.android.com/studio#command-tools からWindows上にダウンロード - AndroidSDKのインストールに必要な最低限のツールを入れる
bash
sudo apt install -y lib32z1 default-jdk git unzip zip
- AndroidSDKを入れる
bash
cd $(mktemp -d)
unzip <ダウンロードしたCommandLintTools>
mkdir -p ~/sdk/android/cmdline-tools
mv cmdline-tools tools
mv tools ~/sdk/android/cmdline-tools
-
.bashrc
に以下を追記
.bashrc
# Android
export ANDROID_SDK_ROOT=$HOME/sdk/android
export PATH=$ANDROID_SDK_ROOT/cmdline-tools/tools:$PATH
export PATH=$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$PATH
export PATH=$ANDROID_SDK_ROOT/cmdline-tools/tools/lib:$PATH
export PATH=$ANDROID_SDK_ROOT/platform-tools:$PATH
export PATH=$ANDROID_SDK_ROOT/emulator:$PATH
# Java
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
- sdkmanagerからSDKをインストール
bash
cd ~
source .bashrc
sdkmanager --version
# 2021/01現在は6になる
sdkmanager --list
# 2021/01現在では32まで使えるが31を選択する
# build-toolsはhttps://developer.android.com/studio/releases/build-tools?hl=ja参照
sdkmanager --install "system-images;android-31;google_apis;x86_64" "platform-tools" "platforms;android-31" "build-tools;30.0.2"
sdkmanager --install "cmdline-tools;latest"
sdkmanager --update
sdkmanager --list | sed -e '/^$/q'
# ライセンス規約をいろいろ問われるので答える
sdkmanager --licenses
- 何故かplatform-toolsが重複しているので後から入ったほうを採用する
bash
rm -rf ./sdk/android/platform-tools
mv ./sdk/android/platform-tools-2/ ./sdk/android/platform-tools/
Flutter SDKを入れる
bash
sudo snap install flutter --classic
flutter --version # 初回のインストールが走る
flutter config --android-sdk $ANDROID_SDK_ROOT
ここでsnapがエラーを吐く時は、再度前述のとおりsnapdを起動させると良い
エミュレーターを入れる
bash
cd ~
curl -s "https://get.sdkman.io" | bash
source .sdkman/bin/sdkman-init.sh
sdk v # 5.13.1
sdk install gradle 7.3.3
gradle -v
echo "no" | avdmanager --verbose create avd --force --name "generic_11" --package "system-images;android-31;google_apis;x86_64" --tag "google_apis" --abi "x86_64"
~/.android/avd/generic_11.avd/config.ini
の以下の項目を変更
config.ini
skin.name=1080x1920
hw.lcd.density=480
hw.keyboard=yes
エミュレーターが作成されていることを確認する
bash
emulator -list-avds