[Flutter翻译]Flutter与WSL 2

2,929 阅读5分钟

原文地址:itnext.io/flutter-wit…

原文作者:medium.com/@tonymauro

发布时间:2020年1月1日-4分钟阅读

成功就像一个聚会。

在假期里,我有时间看了看我的开发环境,决定是时候跳到使用WSL2了。 WSL2确实给我带来了性能上的提升,但我在用flutter做前端开发时遇到了一个问题(我想也会影响到react native),所以我想我会帮助其他想做这个跳跃的人。

环境设置

由于有很多关于不同作品的文章,我不打算花时间重复细节,只是给大家介绍一下我的开发环境。

  • Windows 10专业版
  • WSL 2 (Ubuntu 19.04)
  • VS代码 (1.41.1)
  • Android Studio (3.5.3)

Visual Studio Code远程WSL

我的大部分开发工作都是使用Visual Studio Code进行的,所以当我发现这个扩展可以访问远程WSL时,我非常兴奋。如果你想使用WSL 2并获得文件系统的性能提升,这绝对是必须的。

marketplace.visualstudio.com/items?itemN…

安卓SDK

我想让所有的东西都运行在WSL 2容器里面,所以我在Ubuntu里面安装了Android SDK。它也被设置在我的Windows端,但我的目标是尽可能不使用它。

下面是我对它的设置。一旦你把这个设置好了,你会想把导出的文件移到你的.bash_profile里。

cd ~
sudo apt-get install unzip zip
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux-4333796.zip -d Android
rm sdk-tools-linux-4333796.zip
sudo apt-get install -y lib32z1 openjdk-8-jdk
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
printf "\n\nexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\nexport PATH=\$PATH:\$JAVA_HOME/bin" >> ~/.bashrc
cd Android/tools/bin
./sdkmanager --install "platform-tools" "platforms;android-26" "build-tools;26.0.3"
export ANDROID_HOME=~/Android
export PATH=$ANDROID_HOME/tools:$PATH
export PATH=$ANDROID_HOME/tools/bin:$PATH
export PATH=$ANDROID_HOME/platform-tools:$PATH
printf "\n\nexport ANDROID_HOME=~/Android\nexport PATH=\$PATH:\$ANDROID_HOME/tools\nexport PATH=\$PATH:\$ANDROID_HOME/platform-tools" >> ~/.bashrc
sdkmanager --update
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install gradle 5.5.1
gradle -v

Flutter

我需要的最后一件事是让flutter linux设置去。只是使用标准的linux flutter安装就好了,让我去。

flutter.dev/docs/get-st…

安装完成后一定要运行flutter doctor,看看是否有问题。我必须修正SDK的位置并接受一些许可,但不需要安装Android Studio。

另外确保你启动VS Code并使用远程WSL扩展连接到你的环境。一旦你连接了,你就需要安装flutter扩展以及任何其他你喜欢运行的扩展,似乎远程WSL扩展在ubuntu环境中单独设置vs代码。

安卓模拟器

到此为止,一切都很顺利。我能够有一个工作的flutter环境,但被卡住了,无法将我的应用程序编译到模拟器或设备。我发现了2个解决方案,一个是如果你确定使用真正的设备,另一个是如果你想使用模拟器。

ADB TCPIP

如果你正在使用真实的设备进行测试,这是一个非常有用的设置方式。它可以让你告诉设备,客户端连接到它将通过TCP而不是USB。要设置这个功能,你只需要将你要测试的设备连接到Windows上。在你的Windows cmd提示符中,确保你有设备连接,使用的是

adb device

如果你看到了你想要连接的设备,那么就跟着用

adb tcpip 5555

这样做将使设备准备好通过wifi接收adb命令。在WSL方面,你将发出命令

adb connect <ip of phone>:5555

如果你得到一个成功的连接,你就可以开始了。你可以通过查看VSCode来验证这一点,并注意到它现在在右下角的状态栏中显示了一个设备。

仿真器的ADB

所以我想提醒一下,尽管我有了工作,但在模拟器上构建的速度非常慢,但我想添加我的发现,以防有人能让它运行得更好。

这个设置基本上是让Ubuntu adb连接到运行在windows主机上的adb服务器。这可以工作,但正如我所说的非常慢。

在windows主机上,你需要让adb监控一个端口来接收连接。

adb -a -P 5037 nodaemon server

一旦在Ubuntu方面完成了这些工作,你需要添加一个新的环境变量来设置adb连接到远程服务器而不是本地服务器。

export ADB_SERVER_SOCKET=tcp:192.168.1.97:5037
adb kill-server

只要做到这一点,你就应该能够运行adb设备,并看到那些托管在windows端的设置。 有一点要注意,你只能通过CLI运行flutter应用,而不能使用VSCode调试选项。这与用于调试的天文台URL有关。

结束语

WSL 2中的开发设置相当不错,它的速度很快,使用起来也很方便,但是就像我说的那样,使用模拟器的adb设置非常慢,可能需要30分钟才能成功传输到模拟器。它可能需要30分钟才能成功的将一个build传送到模拟器。我的希望是,当其他人尝试设置时,我们找到一个更好的方法来设置这个连接,使它成为一个更无缝的过程。理想情况下,WSL 2能够直接连接到设备,但我相信这是一个更长远的梦想。


通过www.DeepL.com/Translator (免费版)翻译