Visual Studio Android 模拟器无法完全启动

20

我在Visual Studio 2015中创建了一个空的Cordova应用程序,并使用Visual Studio Android模拟器(先使用Lollipop,然后是Kitkat)开始调试。XDE启动并显示 正在启动操作系统...,它会保持这样一段时间,直到显示

模拟器无法连接到设备操作系统;设备未响应连接请求。某些功能可能已被禁用。

关闭对话框后,它就一直停留在那里,直到我杀掉模拟器。杀死模拟器会触发Visual Studio的错误。

无法启动仿真设备'VS Emulator Lollipop Phone'。

当我打开Hyper-V时,我可以看到虚拟机在列表中,状态为正在运行。连接后,我可以看到如下控制台屏幕

screen

10个回答

29

我知道这个问题已经存在一段时间了,但我刚找到了一个新的解决方案,适用于那些仍然遇到此问题的人...

我在API v21和22上遇到了同样的问题(卡在“OS正在启动”)。 API v23镜像会开始运行,但无法进行调试 - 应用程序启动后立即崩溃。

以下步骤可以解决此问题:

  • 关闭模拟器
  • 打开Hyper-V管理器
  • 进入Android映像的设置
  • 展开“处理器”配置节点
  • 进入“兼容性”节点
  • 选中“迁移到具有不同处理器版本的物理计算机”选项

显然,这与更新的处理器架构与Android映像不兼容有关,或者类似于这样的东西 - 只要它能正常工作就行了 :)


这正是我的问题。API 21和22的图像可以启动,但VS无法将应用程序部署到它上面。打开该选项后,一切都运作得非常好。谢谢! - Ionian316
谢谢!这是这个页面上唯一在我的Surface Pro 4(i7 6650U)上有效的解决方案。 - Nande
这也解决了我在API 21、22和23设备上的问题。21&22无法通过“操作系统正在启动”阶段,而在23上,当我按下“关于手机”以尝试打开开发人员设置时,设置应用程序会崩溃。如果其他人也遇到了这个问题并且正在进行React Native开发,您还需要运行adb reverse tcp:8081 tcp:8081 - FLGMwt
这个解决方案对我也起作用了!直接出现了。我的建议是编辑你的答案,包括一两个屏幕截图,因为我唯一遇到的困难是找到确切的位置来勾选那个复选框。 - user3810900

20
我遇到了相同的问题。我尝试删除xdesku.xml中的GuestDisplayProvider =“VsEmulator.OpenGLGuestDisplay”,以禁用OpenGL,如其他答案所建议的。
起初,虚拟机会启动(您可以从Hyper-V管理器连接到它),但模拟器窗口本身无法连接到该机器(停留在“操作系统正在启动”上,然后在很长一段时间后失败,并显示以下消息:“模拟器无法连接到设备操作系统:无法自动检测到客户系统IP地址。某些功能可能已被禁用。”)
这个答案 https://dev59.com/fVwZ5IYBdhLWcg3wTOzr#31698124 和那个答案 https://dev59.com/umYs5IYBdhLWcg3wFP94#14402740 帮助我解决了连通性问题,并且我能够在模拟器窗口内显示虚拟机。
但是,在删除我的配置文件并重新启动多次之后,模拟器才能正常工作(缩放问题,没有主页、返回按钮等),直到我重新添加了“VsEmulator.OpenGLGuestDisplay”行。
总之,如果您在启用了Hyper-V的计算机上遇到了同样的问题,您可能想尝试以下步骤:
  1. 理想情况下,卸载任何其他虚拟化软件,如VMWare、Virtual Box和VPN客户端,如Cisco VPN(如果您无法这样做,请在第13步时保持警惕)
  2. 重启
  3. 在“Visual Studio模拟器 for Android”对话框中,删除所有已安装的设备配置文件
  4. 删除所有Hyper-V虚拟交换机-转到Hyper-V>虚拟交换机管理器>删除所有虚拟交换机
  5. 运行XdeCleanup.exe(通常位于“C:\ Program Files(x86)\ Microsoft XDE \ 10.0.10240.0”中)
  6. 还要删除“控制面板>网络和Internet>网络连接”中留下的任何额外虚拟网络适配器(在执行上述步骤后,通常只剩下物理适配器)
  7. 确保在所有网络适配器上禁用网络共享(右键单击,属性,共享,取消选中“允许其他网络用户通过此计算机的Internet连接进行连接”)
  8. 如果您曾经在xdesku.xml中删除过GuestDisplayProvider="VsEmulator.OpenGLGuestDisplay"行(通常位于“C:\ Program Files(x86)\ Microsoft XDE \ 10.0.10240.0 \ SKUs \ Android”中),现在是恢复它的好时机。
  9. 重启
  10. 您可能希望尝试修复模拟器:转到“程序和功能> Microsoft Visual Studio模拟器 for Android>更改”,然后单击“修复”(尽管我必须说这对我总是失败)
  11. 重启
  12. 打开Visual Studio模拟器 for Android,并安装并运行其中一个配置文件(例如:7'' KitKat(4.4)XHDPI平板电脑--类似于Asus Google Nexus 7)
  13. 它可能已经工作了,但如果没有,您应该确保您的网络适配器正确设置。停止模拟器,然后转到控制面板>网络和Internet>网络连接,右键单击vEthernet适配器,然后属性,确保您只有以下框在Networking列表中选中(如其他虚拟化或网络软件和驱动程序的干扰所述):Microsoft Networks客户端,QoS Packet Scheduler,Microsoft Networks文件和打印机共享,Microsoft LLDP Protocol Driver,Link-Layer Topology Discovery Mapper I / O Driver,Link-Layer Topology Discovery Responder,Internet Protocol Version 6(TCP / IPv6),Internet Protocol Version 4(TCP / IPv4)
  14. 重启
  15. 尝试在“Visual Studio模拟器 for Android”中再次启动模拟器
  16. 如果仍然无法工作,请尝试删除并重新创建配置文件,并进行大量重新启动...

这里可能有一些多余的步骤,但我认为它涵盖了你应该尝试的所有内容(关键似乎是确保网络适配器设置正确)。如果我漏掉了某些步骤或者你认为某些步骤是无用的,请评论。


终于!我尝试了很多不同的“解决方案”,但这个是对我的有效的。我的问题是,当我直接从Hyper-V管理器(或者叫什么名字)启动时,Android虚拟机可以启动和工作,但VS模拟器却只给我“未知退出代码”。谢谢! - Dave81
你的解决方案对我起作用了。我注意到这是在我调整以太网适配器设置之后发生的,显然 Hyper-V 不喜欢改变网络设置。 - Ivan G.

6

在经过多次搜索后,我终于使它工作了。希望这可以帮到您。我在Visual Studio 2015针对Android模拟器的MSDN文章评论中找到了它。

如果您禁用OpenGL,则新图像可能会起作用。方法是前往Program Files(或Program Files x86,如果您使用的是64位机器)\ Microsoft XDE \ 10.0.0.0 \ SKUs \ Android \ xdesku.xml并删除此行:GuestDisplayProvider =“VsEmulator.OpenGLGuestDisplay”。但是,如果不开启OpenGL,您将无法利用许多新功能。


4
我刚试着做了一些,有一定的成功。XDE 窗口显示“正在启动操作系统”,而且已经持续很长时间了。当我在 Hyper-V 中打开并连接到正在运行的虚拟机时,它意识到已经成功启动并且我可以与其交互。我认为现在的问题是让 XDE 能够识别它。 - ritcoder
我正在使用NativeBoot。只有硬盘被虚拟化了。我双启动进入Windows 10。 - ritcoder
很抱歉我以前没有使用过那个设置。希望它能在发布候选版中得到解决。 - Niall Cunningham
@GyumFox 已经注意到了。我会检查一下的。我很快就会格式化机器,转移到Win10,看看是否存在相同的问题。 - ritcoder
@ritcoder 此外,经过多次尝试,我在不删除GuestDisplayProvider = "VsEmulator.OpenGLGuestDisplay"这行代码的情况下,在我的Hyper-V虚拟机上成功运行了它。(虽然一开始它并没有工作:我仍然遇到了相同的错误。但在多次重启后,它突然就可以正常工作了,原因不明)。我将发布一个新答案。 - Gyum Fox
显示剩余5条评论

1
在我的系统上,我重新启用了被禁用的vEthernet(内部以太网端口Windows Phone模拟器内部开关),然后它又恢复工作了。我不需要重新启动。

是的,那就是我的解决方案!谢谢Bart,作为一名老网络工程师,没能自己找到这个问题有点尴尬 ;) 直到我看到这篇文章之前,我甚至没有查看过网络设置。是的,由于上周安装了虚拟机,它被禁用了。 - JimiSweden

1
我也遇到了这个问题,不仅限于安卓模拟器,而是所有的Windows手机模拟器都有这个问题。
以下是我解决这个问题的方法。

在此之后,我能够从“Visual Studio Emulators for Android”中运行模拟器。


1
我按照 @Gyum Fox 的步骤进行了尝试,但对我来说仍然没有用。
当 Visual Studio Emulator for Android 创建第一个模拟器实例时,还会创建几个虚拟网络交换机。对于笔记本电脑,通常会创建三个 vEthernet 实例:一个用于有线局域网,一个用于 Wi-Fi,另一个用于客户机到主机的内部虚拟交换机。
在我的情况下,有线局域网的 vEthernet 已成功创建,然后 Visual Studio Emulator for Android 进程就会挂起。这可以从 Hyper-V Manager 和 Virtual Switch Manager 操作中观察到。
使用 Virtual Switch Manager,我成功地创建了缺失的 Wi-Fi 虚拟交换机,具体步骤如下。最终它起作用了。请继续阅读。
  1. 虚拟交换机列表下,选择新建虚拟网络交换机…
  2. 要创建哪种类型的虚拟交换机?下,选择外部
  3. 外部网络:下拉菜单中,选择Wi-Fi适配器。
  4. 点击创建虚拟交换机按钮。
  5. 名称:更改为与您的Wi-Fi适配器的名称相匹配。
  6. 点击应用按钮。

但是,在我点击应用之后,一个失败消息表明Wi-Fi适配器已经桥接了。嗯。

我开始运行查看网络连接控制面板小程序,发现Wi-Fi适配器没有显示它已经桥接了。(当存在网络桥接时,状态列会附加桥接一词。)我怀疑某些灰尘般的数字位于注册表中潜伏着。

这是我解决问题的方法。

  1. 右键单击 Wi-Fi 设备。
  2. 选择添加到桥接
  3. 再次右键单击 Wi-Fi 设备。
  4. 选择从桥接中删除

现在,返回到为 Wi-Fi 网络创建虚拟交换机的步骤。这些步骤现在应该会成功完成。

现在,您可以继续创建您想要的 Android 模拟器了。

最后一点...如果您没有看到任何虚拟交换机被创建,我怀疑可能是有线 LAN 出了问题。在这种情况下,我建议尝试对有线 LAN 适配器进行添加和删除桥接的操作,以查看是否能解决问题。

现在,我认为只对网络适配器执行添加和删除桥接的操作就足够了。对我来说,创建虚拟交换机证明了问题得到了解决。您的情况可能不同 ;-)


1

我发现我的问题与Windows防火墙以及公司应用于所有PC的某些企业策略有关。一旦停止了Windows防火墙服务,它就可以正常工作。


0

尽管Gyum Fox提供的见解为我尝试其他方法提供了线索,但我正在添加单独的回答。

[注意:我上次能够使用模拟器是在约3周前,当时我禁用了无线网络并在我的开发笔记本电脑上使用有线连接。我交换机的空间不足,因此重新启用了无线网络作为唯一的连接选项。这可能完全是巧合,但请继续阅读,我会让各位自行决定。]

在按照Gyum的步骤进行后未成功,我决定关闭无线网络,然后尝试启动模拟器。

意想不到的是...它毫无问题地工作了!8-}

一旦我运行了模拟器,我重新启用了无线网络,模拟器便可以捕获到连接。

我不是网络专家,所以我甚至不会尝试理解。这是一个小小的麻烦,但是嘿...如果它起作用就好了!!! ;-}


0
在我的电脑上,我可以启动模拟器,但在尝试部署和调试时出现了OpenGL错误。我意识到我的问题是在安装Docker后开始的。我决定试一试关闭Docker并禁用vEthernet(DockerNAT)网络连接。这解决了我的问题。现在,每当我需要使用Andoird模拟器时,我必须关闭Docker。然后,在完成调试后,我会启用/重新启动Docker。

0

我遇到这个问题的原因之一是我没有在默认位置安装Android SDK。所以我不得不按照这些说明来调试我的应用程序:https://msdn.microsoft.com/en-us/library/mt228282.aspx#ADB

我必须创建名为“Android SDK Tools”的文件夹,并将密钥“Path”和值添加到我的SDK中,而在我的情况下它是“E:\ Android \ Android_SDK”。


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