Как заставить Flutter работать на WSL2 с помощью эмулятора хоста? - PullRequest
3 голосов
/ 12 июля 2020

Эта проблема была головной болью, поэтому я хотел sh поделиться своим решением. Он начинает установку требований для Android SDK (без установки Android Studio), Dart и Flutter и завершает запуск приложения Flutter на хосте Windows.

========= =========

на WSL2

==================

$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:        20.04
Codename:       focal
Установка Dart $ sudo apt-get update && sudo apt-get upgrade $ sudo apt-get install apt-transport-https $ sudo sh -c 'wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' $ sudo sh -c 'wget -qO- https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list' $ sudo apt-get update $ sudo apt-get install dart $ echo "export PATH=\"/usr/lib/dart/bin:$PATH\"" >> ~/.bashrc $ source ~/.barshrc $ dart --version Dart VM version: 2.8.4 (stable) (Unknown timestamp) on "linux_x64"

=== >>> Примечание : Dart SDK связан с Flutter

Установка Android SDK

Получить Инструменты командной строки только для Android (Linux).

$ sudo apt install -y lib32z1 default-jdk git unzip zip
$ cd ~/Downloads
$ unzip commandlinetools-linux-6609375_latest.zip
$ rm commandlinetools-linux-6609375_latest.zip
$ mkdir -p Android/cmdline-tools
$ mv tools/ Android/cmdline-tools/
$ mv Android/ ~/Programs/

Добавьте следующее строк в .bashrc файл:

# Android
export ANDROID_SDK_ROOT=$HOME/Programs/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

Продолжить установку

$ cd ~
$ source .bashrc
$ sdkmanager --version
    4.0.1
$ sdkmanager --list
$ sdkmanager --install "system-images;android-29;google_apis;x86" "platform-tools" "platforms;android-29" "build-tools;29.0.3"
$ sdkmanager --install "cmdline-tools;latest"
$ sdkmanager --update
$ sdkmanager --list | sed -e '/^$/q'
$ sdkmanager --licenses

Принять все лицензии.

Установка Flutter

$ cd ~/Downloads
$ wget https://storage.googleapis.com/flutter_infra/releases/stable/linux/flutter_linux_1.17.5-stable.tar.xz
$ cd ~/Programs
$ tar xf ~/Downloads/flutter_linux_1.17.5-stable.tar.xz
$ cd ~
$ echo "export PATH=$HOME/Programs/flutter/bin:$PATH" >> .bashrc
$ source .bashrc
$ flutter --version
Flutter 1.17.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 8af6b2f038 (11 days ago) • 2020-06-30 12:53:55 -0700
Engine • revision ee76268252
Tools • Dart 2.8.4
$ flutter config --android-sdk $ANDROID_SDK_ROOT

Создание эмулятор

$ cd ~
$ curl -s "https://get.sdkman.io" | bash
$ source .sdkman/bin/sdkman-init.sh
$ sdk v
    SDKMAN 5.8.3+506
$ sdk install gradle 6.5.1
$ gradle -v
$ avdmanager list
$ echo "no" | avdmanager --verbose create avd --force --name "generic_10" --package "system-images;android-29;google_apis;x86" --tag "google_apis" --abi "x86"

Добавить / изменить эти строки в ~/.android/avd/generic_10.avd/config.ini файле:

skin.name=1080x1920
hw.lcd.density=480
hw.keyboard=yes

Проверить созданный эмулятор:

$ emulator -list-avds

====== ============

на Windows 10

==================

> Get-ComputerInfo -Property "WindowsProductName"
Windows 10 Pro
> Get-ComputerInfo -Property "WindowsVersion"
2004
> Get-ComputerInfo -Property "OsBuildNumber"
19041
> Get-ComputerInfo -Property "OsArchitecture"
64-bit
> Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias Ethernet|findstr IPAddress
IPAddress         : 192.168.0.29

Установка Android SDK

Получить Инструменты командной строки * 106 2 * только для Android (Windows).

Действия, которые необходимо выполнить, в основном те же, что и в Установка Android SDK в разделе WSL2 , вы можете прочитать эту страницу для справки, если есть сомнения.

Создание эмулятора

Чтобы установить Gradle в Windows, следуйте инструкциям в этой странице . Остальные шаги такие же, как в разделе Создание эмулятора на WSL2 , где ~ указывает вашу домашнюю папку в Windows.

Подготовка хоста к прослушиванию

Вы можете использовать любой порт с инструментами adb и emulator, но это проще, если они управляют им самостоятельно, используя свои порты по умолчанию. Для инструмента adb его порт по умолчанию - 5037. * Сервис 1091 * использует этот порт (в моем случае), поэтому мне пришлось остановить его .

Откройте терминал и проверьте статус порта 5037:

> netstat -aon|findstr 5037

Выполните следующие команды:

> adb kill-server
> adb -a -P 5037 nodaemon server

Откройте другой терминал (не закрывайте предыдущий) и запустите:

> emulator -avd generic_10

Откройте другой терминал (не закрывайте предыдущие) и запустите:

> adb devices
List of devices attached
emulator-5554   device

==================

на WSL2

==================

Работа с хостом adb

$ echo "export ADB_SERVER_SOCKET=tcp:192.168.0.29:5037" >> ~/.bashrc
$ source ~/.bashrc
$ adb devices
List of devices attached
emulator-5554   device

Запуск нашего приложения Flutter

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.17.5, on Linux, locale C.UTF-8)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[!] Android Studio (not installed)
[✓] Connected device (1 available)

! Doctor found issues in 1 category.
$ flutter create hello_world
$ cd hello_world
$ flutter run   

==================

Наблюдения

=========== =======

  • Сборка / запуск приложения в первый раз занимает немного больше времени
  • VSCode (удаленный) может обнаружить это подключенное устройство, но не может развернуть правильно эмулятор, поэтому лучше запускать приложение на терминале
  • Вы не можете использовать функции « горячая перезагрузка » с приложением flutter, потому что процесс развертывания / запуска nev ER завершается, однако пакет был установлен и запущен в вашем эмуляторе, но для любых изменений в исходном коде вам необходимо повторно запустить приложение.
  • Эта операция потребляет слишком много памяти (~ 90%). Есть обходной путь , который нужно уважать. Моя конфигурация:

.

[wsl2]    
memory=4GB # Limits VM memory in WSL 2 to 4 GB
swap=0

====================

Страницы проконсультировался

====================

...