如何将在 WSL2 中运行的 Android Studio 与连接的设备或在主机上运行的 android 模拟器连接起来

Posted

技术标签:

【中文标题】如何将在 WSL2 中运行的 Android Studio 与连接的设备或在主机上运行的 android 模拟器连接起来【英文标题】:How to connect Android Studio running inside WSL2 with connected devices or android emulator running on host 【发布时间】:2020-09-20 12:44:01 【问题描述】:

我在 WSL 2 (Windows 10 2004) 的 Ubuntu 18.04 下运行 android Studio(当前版本为 3.6.1),现在支持 GUI。由于 WSL2 中的虚拟化不起作用,我需要继续在主机上运行我的模拟器,当然,用于调试我的 android 应用程序的连接设备会出现在主机上。

Android Studio 如何查看主机上出现的模拟器和设备?

【问题讨论】:

***.com/q/27245597/1778421 谢谢。这部分回答了我的问题。我设法让 adb 在 wsl2 中运行以连接到主机的 adb 服务器,但是 Android Studio 继续做自己的事情,仍然启动一个显然没有设备的本地 adb 服务器。您推荐的帖子中有一个与此相关的答案,但没有投票,我也无法使其工作。 @papadi 你是如何设法在 WSL 2 中运行 Android Studio 的。你能提供一些信息吗?? @AlexP。上面提供了解决方案。到目前为止我还没有找到更好的。不幸的是,这意味着您无法调试应用程序,只能使用 Studio 构建它,然后使用 adb 命令复制它。 我明白了。看看如何在 WSL2 上运行 GUI 应用程序。您将需要安装桌面外壳,在 wsl 上启用远程桌面服务,然后使用远程桌面连接到它。然后你就有了 Linux 桌面,你可以安装任何你想要的东西。 【参考方案1】:

连接设备是有办法的,但这必须一个一个来完成:

    在 windows 上:adb tcpip 5555 在 wsl2 上:adb connect [ip 设备]:5555

你应该在 android studio 中看到设备

【讨论】:

在网上爬了很多次之后,这个方案终于奏效了。尝试了相同的 adb 版本解决方案,但没有帮助。 连接超时:( 设备的ip是多少? 你可以得到设备的ip,从settings->connections->wi-fi【参考方案2】:

这是我必须做的based on this Medium post。

    在Windows上安装Android Studio(获取SDK,也可以通过其他方式安装SDK)。 将adb 添加到Windows 上的环境变量中。在文件资源管理器中,右键单击This PC,然后选择Advanced system settings,然后选择Environment Variables.系统变量下,查找Path,单击Edit,然后单击New。添加此路径:C:\Users\MYUSERNAME\AppData\Local\Android\Sdk\platform-tools。请务必更改 MYUSERNAME。 在 WSL2 中安装 Android SDK。在 Android Studio 的 SDK 管理器中,确保您已安装支持您的手机的 SDK(我的旧手机需要旧版 SDK)。 在 WSL2 中,将 adb 添加到您的 PATH。 您需要确保在 Windows 和 Linux 上使用相同版本的 adb,这就是我在两者上安装最新 Android Studio 的原因。就我而言,我将 alias adb='/home/MYUSERNAME/Android/Sdk/platform-tools/adb' 添加到我的.bashrc。 确保您的手机已通过 USB 连接到您的 PC,然后您已设置 USB 调试。 在 Windows 上的 Powershell 中,运行 adb devices。确保设备在那里。 在 Windows 上的 Powershell 中,运行 adb tcpip 5555。 在 WSL2 终端中,运行 adb devices。您将看不到任何设备,但这将启动 adb。 获取手机的 IP 地址。您可以从Settings -> About phone -> Status -> IP address 执行此操作。它可能类似于192.168.0.10n。 在 WSL2 终端中,运行 adb connect PHONE_ID:5555。 系统将提示您确认手机上的连接。这样做。 adb 可能会因为连接确认而失败。在 WSL2 终端中运行adb kill-server,然后运行adb connect PHONE_ID:5555。 如果 Android Studio 在 WSL2 中打开,请将其关闭,然后再次打开。

您的设备终于可以调试了!

【讨论】:

【参考方案3】:

基于 TCP 的 ADB 对我不起作用。在 WSL GitHub issue 中找到了这个可行的解决方法,并在此处添加了一些额外的细节:

(1) 在 WSL 中,将以下内容添加到~/.bashrc

export WSL_HOST_IP="$(tail -1 /etc/resolv.conf | cut -d' ' -f2)"
export ADB_SERVER_SOCKET=tcp:$WSL_HOST_IP:5037

(2) 添加 Windows 防火墙规则

打开 Windows Defender 防火墙并转到高级设置。 右键单击“入站规则”,然后单击“新建规则” 选择“端口”,然后选择特定 TCP 端口“5037”,然后选择“允许连接” 根据您的 Internet 连接的需要检查域、私有和公共(我只添加了域和私有) 根据您的喜好命名规则 添加防火墙条目后,右键单击它并转到属性 转到范围 -> 远程 IP 地址 -> 添加“172.16.0.0/12”(这是 WSL VM 子网)

(3) 启动 ADB Server(使用特定参数使其监听所有地址)

创建一个 VBS 脚本(例如"C:\Users\user\Documents\Development\wsl_adb_start.vbs")并将以下内容放入其中:
CreateObject("WScript.Shell").Run "adb.exe kill-server", 0, True
CreateObject("WScript.Shell").Run "adb.exe -a -P 5037 nodaemon server", 0, True
注意:这假设 adb 在您的路径上。如果没有,请添加完整路径(通常类似于 %USERPROFILE%\AppData\Local\Android\Sdk\platform-tools\adb.exe) 通过打开powershell并执行:WScript "C:\Users\shuba\Documents\Development\wsl_adb_start.vbs"来运行脚本。 (重新)-启动 WSL

VBS 脚本调用是每次启动时您必须执行的唯一步骤:您的 WSL 虚拟机将连接到您的主机 ADB 实例。之后,启动 WSL 并享受吧!

【讨论】:

以上是关于如何将在 WSL2 中运行的 Android Studio 与连接的设备或在主机上运行的 android 模拟器连接起来的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 127.0.0.1 从 Windows 主机访问在 WSL2 中运行的服务?

如何在 Windows 上运行多个 WSL2 实例?

如何检查我正在运行哪个版本的 WSL2?

Android自动化打包记录--Jenkins+Docker+WSL2

Android自动化打包记录--Jenkins+Docker+WSL2

如何从 Docker 容器内部访问在 WSL2 上运行的服务?