本篇内容主要涉及:
nvidia对linux的相关驱动已经越来越完善,越来越多的人使用linux/mac系统作为日常开发环境——而windows相较unix系系统,本身的快捷键、命令行等相关支持并不完善,所幸经过几年的完善,wsl2已经发展的比较完善了,而使用wsl2的优点在于:存在于wsl2的整个环境都可以打包,迁移方便,可以轻松管理开发环境。在我看来,这是wsl2最大的优点,尽管wsl2目前的gui程序还存在一些问题,但作为个人开发者,wsl2已经可以满足大多数开发场景了——你不需要像使用纯linux一下配置驱动、配置各种应用程序(尽管有些程序确实比windows下相应的程序好)
可以参考:wsl2+archlinux+kde+tigerVNC图形化配置: 漫长的折腾以后完成了wsl2下archlinux的安装和kde桌面的图形化显示。以此记录。 (gitee.com)
在微软商店中,直接搜索wsl安装即可获得wsl1,这个时候,我们以管理员模式打开powershell,输入:
1 | Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux |
---|
重启wsl,再次输入:
123 | dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartdism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartwsl --set-default-version 2 |
---|
即可设置为wsl2.
这个时候,在微软商店中安装arch即可。注意,我们不需要为wsl2配置图形化界面,只需要安装好中文即可。按照我的体验,不建议使用vnc作为图形界面,不如直接终端启动wsl2的图形化程序。
由于Arch上要装许多开发环境,占用空间越来越大,建议将wsl迁移到其他盘,可以参考WSL的安装和位置迁移 - 知乎 (zhihu.com)
首先powershell中关停wsl:
1 | wsl --shutdown |
---|
之后导出:
1 | wsl --export Arch D:/export.tar |
---|
最后注销原来的虚拟机器卸载并导入:
12 | wsl --unregister Archwsl --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
12 | export https_proxy="http://${hostip}:7890";export http_proxy="http://${hostip}:7890"; |
---|
参考 代理上网,可以在.bashrc/.zshrc中添加 :
123 | 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来让程序也科学上网。
建议先使用pacman安装yay,之后使用yay安装其他软件即可:
123456789101112 | # 初始化## 设置root密码passwdpacman-key --initpacman-key --populatepacman -S archlinuxcn-keyring # 更新pacman -Syyu # 安装基本软件pacman -S base base-devel git curl wget zsh yay neofetch net-tools dnsutils inetutils |
---|
首先,在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,因此此时我们可以通过执行:
12 | setssadb 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=... |
---|
目前我的解决方案是,不开代理启动studio.sh,编译生成apk,在另一个终端开启代理,使用adb install test.apk
解决。
关于如何在wsl2调试安卓,我目前的解决办法与上文刚好相反。首先,手动在命令行编译成安卓apk(不使用代理),然后使用adb安装到手机上(使用代理运行adb),在android studio的logcat查看运行的日志(使用代理打开android studio)。即在windows下打开一个arch终端,手动编译成apk,
这时候在使用代理开启adb,安装apk,并使用代理开启android studio(使其可以扫描到手机),打开其logcat,输入对应的安装包包名,即可看到手机上app的运行日志