wsl2安卓开发环境搭建

本文最后更新于:2024年5月7日 下午

本篇内容主要涉及:

  1. windows安装wsl2以及wsl2安装Arch
  2. Arch搭建node/conda/java/flutter/c++等开发环境
  3. Android Studio使用连接windows的手机设备

wsl2安装

为什么是wsl2

nvidia对linux的相关驱动已经越来越完善,越来越多的人使用linux/mac系统作为日常开发环境——而windows相较unix系系统,本身的快捷键、命令行等相关支持并不完善,所幸经过几年的完善,wsl2已经发展的比较完善了,而使用wsl2的优点在于:存在于wsl2的整个环境都可以打包,迁移方便,可以轻松管理开发环境。在我看来,这是wsl2最大的优点,尽管wsl2目前的gui程序还存在一些问题,但作为个人开发者,wsl2已经可以满足大多数开发场景了——你不需要像使用纯linux一下配置驱动、配置各种应用程序(尽管有些程序确实比windows下相应的程序好)

安装wsl2

可以参考:wsl2+archlinux+kde+tigerVNC图形化配置: 漫长的折腾以后完成了wsl2下archlinux的安装和kde桌面的图形化显示。以此记录。 (gitee.com)

在微软商店中,直接搜索wsl安装即可获得wsl1,这个时候,我们以管理员模式打开powershell,输入:

1
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

重启wsl,再次输入:

1
2
3
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
wsl --set-default-version 2

即可设置为wsl2.

这个时候,在微软商店中安装arch即可。注意,我们不需要为wsl2配置图形化界面,只需要安装好中文即可。按照我的体验,不建议使用vnc作为图形界面,不如直接终端启动wsl2的图形化程序。

wsl的迁移与基础配置

由于Arch上要装许多开发环境,占用空间越来越大,建议将wsl迁移到其他盘,可以参考WSL的安装和位置迁移 - 知乎 (zhihu.com)

首先powershell中关停wsl:

1
wsl --shutdown

之后导出:

1
wsl --export Arch D:/export.tar

最后注销原来的虚拟机器卸载并导入:

1
2
wsl --unregister Arch
wsl --import Arch D:\export\ D:\export.tar --version 2

配置代理

首先假设你的host机器能够科学上网,且在127.0.0.1:7890开了端口。那么我们在wsl2里面需要做的就是把流量引导到windows中,而我们就需要获取windows的ip:

1
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')

之后,可以通过命令设置https_proxy以及http_proxy的值,注意引号中的内容需要根据自己使用的协议选择http或者socks5

1
2
export https_proxy="http://${hostip}:7890";
export http_proxy="http://${hostip}:7890";

参考 代理上网,可以在.bashrc/.zshrc中添加 :

1
2
3
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
alias setss='export all_proxy="socks5://${hostip}:7890";'
alias unsetss='unset all_proxy'

这个时候,尽管我们可以通过setss让终端科学上网,但无法让wsl2的其他程序上网,这里可以使用proxychains4,配置后即可通过proxychains4 program来让程序也科学上网。

Arch开发环境搭建

建议先使用pacman安装yay,之后使用yay安装其他软件即可:

1
2
3
4
5
6
7
8
9
10
11
12
# 初始化
## 设置root密码
passwd
pacman-key --init
pacman-key --populate
pacman -S archlinuxcn-keyring

# 更新
pacman -Syyu

# 安装基本软件
pacman -S base base-devel git curl wget zsh yay neofetch net-tools dnsutils inetutils

Android Studio相关配置

首先,在wsl2中使用gui程序,有时是会直接卡死的,因此要做好心理准备😃

安装的android studio的话,非常简单,官网下载包就行,执行文件在./AndroidStudio/bin下的studio.sh。我的做法是将该路径添加到/etc/profile的path环境变量中,这些source /etc/profile后就可以在任意路径执行studio.sh了。

Android Studio的使用和windows/mac基本一致,不在详述。

关于安卓代码调试,在我的环境中,Android Studio不支持创建虚拟设备,因此只能选择物理真机调试,此时需要做一个网络端口转发才能让wsl2的android studio连接到物理机。

首先,windows安装adb并将其添加到环境变量中,将手机连接后,在powershell中执行

1
adb devices

可以看到连接windows的设备。

此时,在wsl2的arch中安装adb,执行:

1
adb devices

这个时候应该看不到手机(该终端未执行setss时)

而为了让wsl2能够看到手机,我们需要主机的ip,由于在前述中,我们设置了hostip用于保存windows的ip,因此此时我们可以通过执行:

1
2
setss
adb devices

来看到手机,或者通过修改proxychains4的配置文件,执行:

1
proxychains4 adb devices

来看到手机。而要想让Android Studio在device manager中看到手机,只需要执行:

1
proxychians4 studio.sh

即可。注意,这里不推荐手动填写配置AS的代理设置,通过proxychains4更加方便。

这里可能会出现问题,由于使用了proxychains4做代理,笔者在开发flutter项目时,发现尽管通过proxychains4启动Android Studio可以使其识别设备,在编译运行安卓时却会由于代理混乱导致无法编译成功,报错类似:

1
A new daemon was started but could not be connected to: pid=DaemonInfo{pid=4632, address=[85bbb456-d4ea-4e7e-9e29-5b7f8dc768e8 port:35581, addresses:[/127.0.0.1]], state=Busy, lastBusy=1687741775718, context=DefaultDaemonContext[uid=dcfbca72-8331-4ca2-a9b9-8c64eabd7832,javaHome=/home/heelerdeer/Desktop/android-studio/jbr,daemonRegistryDir=...

调试和开发

关于如何在wsl2调试开发安卓,我目前的解决办法是在外部的powershell终端使用代理启动AS,这样在调试时可以直接使用AS的logcat查看日志。编译程序时则在外部终端手动执行命令编译成apk文件(不使用代理),然后使用adb安装到手机上(使用代理运行adb)。

这时候在使用代理开启adb,安装apk,并使用代理开启android studio(使其可以扫描到手机),打开其logcat,输入对应的安装包包名,即可看到手机上app的运行日志:

参考

wsl2+archlinux+kde+tigerVNC图形化配置: 漫长的折腾以后完成了wsl2下archlinux的安装和kde桌面的图形化显示。以此记录。 (gitee.com)

代理上网

WSL的安装和位置迁移 - 知乎 (zhihu.com)

WSL2+ArchLinux环境配置 - lentikr - 博客园 (cnblogs.com)

声明

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2899caoptmo0k


本文作者: Heeler-Deer
本文链接: https://heeler-deer.top/posts/57407/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!