Android studio 如何将WSL2内部运行的Android Studio与主机上运行的已连接设备或Android emulator连接起来

Android studio 如何将WSL2内部运行的Android Studio与主机上运行的已连接设备或Android emulator连接起来,android-studio,android-emulator,adb,windows-subsystem-for-linux,wsl-2,Android Studio,Android Emulator,Adb,Windows Subsystem For Linux,Wsl 2,我正在WSL2(Windows102004)中运行Ubuntu18.04下的Android Studio(目前版本为3.6.1),它现在支持GUI。由于WSL2内部的虚拟化不起作用,我需要继续在主机上运行模拟器,当然,用于调试android应用程序的连接设备也会出现在主机上 Android Studio如何查看主机上出现的仿真器和设备?对于连接的设备,有一种方法,但必须逐个完成: 在windows上:adb tcpip 5555 在wsl2上:adb连接[ip设备]:5555 在android

我正在WSL2(Windows102004)中运行Ubuntu18.04下的Android Studio(目前版本为3.6.1),它现在支持GUI。由于WSL2内部的虚拟化不起作用,我需要继续在主机上运行模拟器,当然,用于调试android应用程序的连接设备也会出现在主机上


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

对于连接的设备,有一种方法,但必须逐个完成:

  • 在windows上:adb tcpip 5555
  • 在wsl2上:adb连接[ip设备]:5555
  • 在android studio中,如果您看到该设备

    ,以下是我必须做的事情

  • 在Windows上安装Android Studio(要获得SDK,也可以通过另一种方式安装SDK)
  • adb
    添加到Windows上的环境变量中。在文件资源管理器中,右键单击
    这台电脑
    ,然后选择
    高级系统设置
    ,然后选择
    环境变量。
    系统变量下,查找
    路径
    ,单击
    编辑
    ,然后单击
    新建
    。添加此路径:
    C:\Users\MYUSERNAME\AppData\Local\Android\Sdk\platform tools
    。确保更改我的用户名
  • 在WSL2中安装Android Studio。在Android Studio的SDK管理器中,确保安装了支持手机的SDK(我有一部旧手机,需要旧SDK)
  • 在WSL2中,将
    adb
    添加到路径中您需要确保在Windows和Linux上使用相同版本的
    adb
    ,这就是为什么我在这两个平台上都安装了最新的Android Studio。
    在我的例子中,我将
    别名adb='/home/MYUSERNAME/Android/Sdk/platform tools/adb'
    添加到了我的
    .bashrc
  • 确保您的手机通过USB连接到PC,然后设置USB调试
  • 在Windows上的Powershell中,运行
    adb设备
    。确保设备在那里
  • 在Windows上的Powershell中,运行
    adb tcpip 5555
  • 在WSL2终端中,运行
    adb设备
    。您还看不到任何设备,但这将启动
    adb
  • 获取您手机的IP地址。您可以通过
    设置
    ->
    关于手机的
    ->
    状态
    ->
    IP地址
    。它可能类似于
    192.168.0.10n
  • 在WSL2终端中,运行adb connect PHONE_ID:5555
  • 系统将提示您确认手机上的连接。那样做
  • adb
    可能会因为连接确认而失败。在WSL2终端中运行
    adb kill server
    ,然后运行
    adb connect PHONE\u ID:5555
  • 如果Android Studio在WSL2中打开,请关闭它,然后再次打开它

  • 最后,您的设备可以调试了

    TCP上的ADB对我不起作用。在一个有效的解决方案中找到了这项工作,在此处添加了一些额外的细节:

    (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虚拟机子网)
    (3)启动ADB服务器(使用特定参数使其侦听所有地址)

    • 创建VBS脚本(例如
      “C:\Users\user\Documents\Development\wsl\u adb\u 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\u adb\u start.vbs”
    • (重新)-启动WSL

    VBS脚本调用是每次启动必须执行的唯一步骤:WSL VM将连接到主机ADB实例。在此之后,启动WSL并享受它

    谢谢。这部分回答了我的问题。我设法让adb在wsl2内部运行,以连接到主机的adb服务器,但是Android Studio一直在做自己的事情,仍然启动本地adb服务器,显然没有设备。在你推荐的帖子中有一个与此相关的答案,但没有投票权,我也不能让它工作。@papadi你是如何在WSL2内部运行Android Studio的。你能提供一些信息吗?@AlexP。提供了上述解决方案。到目前为止,我还没有找到更好的。不幸的是,这意味着您无法调试应用程序,只能使用Studio构建它,然后使用adb命令复制它。我明白了。看看如何在WSL2上运行GUI应用程序。您需要安装桌面shell,在wsl上启用远程桌面服务,然后使用远程桌面连接到它。然后你就有了Linux桌面,你可以安装任何你想要的东西。在网上进行了大量的爬网之后,这个解决方案终于奏效了。尝试了相同的adb版本解决方案,但没有帮助。我正在获取连接超时:(设备的ip是多少?您可以通过设置->连接->wi-fiThanks获取设备的ip,此解决方案适合我。