当前位置: 首页 > 知识库问答 >
问题:

如何使Flutter工作在WSL2使用主机的模拟器?

祁景山
2023-03-14

这个问题令人头痛,所以我想分享我的解决方案。它开始安装Android SDK(不安装Android Studio)、Dart和FLATTER的要求,并最终在Windows主机上运行FLATTER应用程序。

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

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

$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:        20.04
Codename:       focal
$ 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"

===

仅获取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

接受所有许可证。

$ 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

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

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

> 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(Windows)的命令行工具。

下面的步骤基本上与在WSL2上安装Android SDK一节中的步骤相同,如果您有任何疑问,可以阅读此页面以供参考。

要在Windows中安装Gradle,请按照此页中的说明操作。其余的步骤与在WSL2上创建模拟器部分相同,其中~指出Windows中的主文件夹。

您可以将任何端口与adbemulator工具一起使用,但如果它们使用默认端口自行管理,则更简单。对于adb工具,其默认端口为5037<代码>IP助手服务使用该端口(在我的情况下),所以我不得不停止它。

打开终端并检查端口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

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

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

$ echo "export ADB_SERVER_SOCKET=tcp:192.168.0.29:5037" >> ~/.bashrc
$ source ~/.bashrc
$ adb devices
List of devices attached
emulator-5554   device
$ 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应用程序中使用"热重载"功能,因为部署/运行的过程永远不会结束,但是包确实在你的模拟器中安装和运行,但是对于源代码的任何更改,你需要重新运行应用程序。
  • 此操作消耗太多内存(~90%)。有一个变通方法需要尊重。我的配置是:

...

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

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

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

  • https://flutter.dev/docs/get-started/install/linux
  • 与WSL 2一起颤动
  • Android命令行工具sdkManager总是显示:警告:无法创建设置
  • 如何在Ubuntu上安装没有Android Studio的Flutter
  • 使用AVDMANAGER和SDKMANAGER安装和创建模拟器
  • 在WSL2中构建反应本地应用
  • 使用WSL2在Windows 10上的Android模拟器
  • 用VSCode和WSL2开发Flutter
  • 使用ADB与WSL2
  • 亚行
  • Android调试桥(adb)
  • 如何通过TCPIP连接使用adb?
  • 在WSL中运行React Native,模拟器直接在Windows中运行
  • 如何在连接到远程系统的设备上部署和执行应用程序?
  • 静态编程语言在Java安装中找不到所需的JDK工具
  • Android Studio安装不带sdkManager

共有2个答案

欧浩淼
2023-03-14

如果你和我一样,你在亚行的工作中遇到了很多问题。您需要确保windows主机和linux映像都具有相同版本的adb。遵循本指南https://www.androidexplained.com/install-adb-fastboot/#update帮助我在windows上更新adb。

相洛华
2023-03-14

您不能在Flatter应用程序中使用“热重新加载”功能,因为部署/运行过程永远不会结束

事实上,你可以!只需使用adb connect连接到设备

https://dnmc.in/2021/01/25/setting-up-flutter-natively-with-wsl2-vs-code-hot-reload/

 类似资料:
  • 我正在本地计算机上编写一个php应用程序,并想测试SSL是否正常工作。请耐心等待,因为这是我第一次使用SSL。 到目前为止,这就是我所做的: Created a SSL Certificate. I followed the first part of this this tutorial to create the certificate. I imported the file into ch

  • 我已经在Drive:/SOFTWARES/wamp文件夹上安装了wamp服务器。 但是在这里,我有一个问题。 只有localhost向我显示wamp索引页。 如果我输入网址,设置为虚拟主机,要么1。当我不使用互联网时,它们显示“无法连接”。2.他们通过网络重定向到一些网址。 我在wamp安装后采取的步骤: 1) 联合国对httpd中的vhost配置行进行了评论。配置文件 3) 在windows的主

  • 问题内容: SSH进入Minikube VM的用户名/密码/密钥是什么? 问题答案: 您可以为此使用Minikube二进制文件。

  • 问题内容: 我正在一起运行Nodejs和Apache。 node-http-proxy正在侦听端口80,然后将请求转发到Apache(:9000)或Express(:8000)。 我在Apache上的虚拟主机如下所示: 我的问题是,在Express / Nodejs端具有虚拟主机功能的“正确”方法是什么?我希望不必像下面建议的那样将每个Nodejs应用程序放在其自己的端口上: https://gi

  • 问题内容: 我有MockRestServiceServer来模拟服务中的restTemplete。但是它总是失败。它显示错误为。任何人都可以让我知道我在哪里做错了。 服务本身将如下所示: 问题答案: 首先,您的类会在每个请求上创建一个RestTemplate的新实例。我不能足够强调这种不良做法。创建一个类型为RestTemplate的bean并将其注入到您的bean中(它很可能已经创建- 取决于您

  • 它从不完全加载,最后总是说等待300秒才能加载。我尝试过不同的方法来修复它,但都不管用。如何让它真正加载?