在Ryzen处理器上同时运行WSL2和Android Studio

9
我想在WSL2中运行我的API,并使用Android模拟器运行我的应用程序,以便测试该API。当我启用Hyper-V时,WSL2正常工作。然后,我尝试使用Android Studio的模拟器,但它卡住了,永远无法启动模拟器。
现在,如果我完全停用Hyper-V(在Windows功能屏幕和通过bcdedit /set hypervisorlaunchtype off命令),模拟器可以完美地启动,但当然现在WSL2就无法工作了...
我查看了很多相关主题,例如:如何在WSL2中使用zsh运行Windows上的Android模拟器?使用直接在Windows中运行的模拟器在WSL中运行React Native这个教程。目前为止没有成功。
如上所述,我正在使用Ryzen处理器。

1
提醒一下,AMD处理器上的嵌套虚拟化支持(我们需要这个功能才能正常工作)目前只在Windows Insider/Preview中可用。预计将在今年晚些时候的Windows 10更新(以及Windows 11)中提供。 - NotTheDr01ds
有趣!谢谢 - Jeremy Belolo
1
@NotTheDr01ds,嵌套虚拟化如何帮助解决这个问题?你是指在WSL内运行AVD吗?你有确认链接吗? - otocon
1
@NotTheDr01ds下面的答案是我的,它不使用嵌套虚拟化 :)(或者我不知道)。嵌套虚拟化是指在另一个VM内运行VM。微软文章在这里:https://techcommunity.microsoft.com/t5/virtualization/amd-nested-virtualization-support/ba-p/1434841和这里https://techcommunity.microsoft.com/t5/virtualization/windows-insider-preview-nested-virtualization/ba-p/382256。这更像是有关VirtualBox的故事,他们必须与Hyper-V集成,https://www.how2shout.com/how-to/use-virtualbox-and-hyper-v-together-on-windows-10.html。 - otocon
1
@otocon 抱歉,你是正确的 - 重新阅读你的答案并查看 Android-x86 项目后,很明显你只是运行了一个不使用嵌套虚拟化的 Hyper-V VM,因为该镜像内部没有运行任何 VM - 我之前认为提供“仿真”功能的是一个 VM,但实际上不是。此外,谷歌使用 WHPX 的方法似乎也没有使用嵌套虚拟化。 - NotTheDr01ds
显示剩余2条评论
3个回答

2
我能够找到解决方法。我正在运行Windows 11 Pro,更新21H2,操作系统版本为22000.51,使用AMD处理器。
以下是Google文档,介绍如何为AMD处理器设置模拟器。需要禁用Hyper-V和WHPX,但这与运行WSL2不兼容。
我的设置如下:
- 在Windows下运行Android Studio和IntelliJ。 - 在Ubuntu(WSL2)下运行Docker、数据库和其他服务。
我所做的事情:
1. 启用Hyper-V和WHPX。
2. 在Hyper-V管理器中添加新的Android虚拟机,就像这样
3. 查找Android虚拟机的IP地址(我通过查看运行中的Android Wi-Fi选项来实现),并使用adb connect <ip goes here>:5555
4. 如果连接正确,则应在Android Studio中显示。
我尝试从Ubuntu连接到Android,但它不能直接工作。可以通过一些WSL2 >主机重定向来实现,但我目前不需要它,并且没有进一步研究它。
最后一个困扰我的问题是默认的Android虚拟机分辨率(在水平方向上看起来像平板电脑)。可以按照这样的方式进行调整。
我们可能需要等待Google推出使用与WSL2相同仿真类型的模拟器。
不起作用/缺少的功能(或我不知道如何做):
- 无法动态更改屏幕方向。 - 在输入时,软件键盘不显示(当您需要使用它测试UI时会有问题)。 - Hyper-V中没有GPU加速(由于安全原因,Microsoft禁用了它,但似乎有一种方法可以启用它,我没有尝试过,默认性能对我的需求已足够)。

非常有趣!我会尝试一下。我更喜欢能够使用Android Studio的模拟器,但既然不可能,这可能是目前最好的选择了。谢谢,我会更新它的运行情况。 - Jeremy Belolo
我没能找到解决方法的一件事是打开远程开发者工具。尝试使用命令工具(d)打开应用程序菜单,使用模拟器本身的键盘快捷键,使用adb命令adb shell input keyevent 82 - 没有反应,无法打开菜单,因此无法切换远程调试。 - Jeremy Belolo

0

所以,有人在问题跟踪器上给出了一个很好的答案!

https://issuetracker.google.com/issues/202188690#comment18

基本上,正如他所说的那样,这是由于WHPX API集成中的XSAVE禁用代码引起的--target/i386/whpx-all.c--注释掉这行似乎可以使其工作https://android.googlesource.com/platform/external/qemu/+/refs/heads/emu-master-dev/target/i386/whpx-all.c#1768

在问题跟踪器中,另一个用户已经发布了已编译的exe文件,如果有人需要的话。对我来说,它修复了一切,模拟器现在完美地正常工作。


这个在Windows 10上能用吗? - Arst
是的,它是为 Windows 10 设计的。自从我升级到 Windows 11 后,我甚至不需要它-一切都按照我的意愿正常工作。 - Jeremy Belolo
在原始帖子中,第65条回复说:回复第64条,在官方模拟器发布的修复程序仅适用于Windows 11。因此,我认为它不适用于Windows 11... - Arst

0

只需在Windows中添加这些额外功能,您就可以在wsl2中运行模拟器,记得将dev/kvm的所有权更改为您的用户。

在此输入图像描述


虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。- 来自审查 - Bö macht Blau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接