【问题标题】:How to set up ADB for remote machine development and local device deployment如何为远程机器开发和本地设备部署设置 ADB
【发布时间】:2012-10-28 00:33:16
【问题描述】:

我的场景是这样的:我在家远程工作并通过 Windows 远程桌面登录到我的工作机器。我在工作计算机上使用 Eclipse 作为 Android 应用程序的开发环境。

使用 ADB,我希望能够将应用程序从我的工作计算机部署到我家庭网络上的设备上,以应对模拟器无法正确执行应用程序的情况。

我发现这篇文章讨论了一个非常相似的场景,除了部署到在本地 PC 上运行的模拟器,而不是部署到本地设备:

http://www.41post.com/5003/programming/android-adb-remote-emulator-access

我正在尝试采取相同的步骤,但要弄清楚如何在我的家庭 WiFi 网络上定位本地设备并连接到本地家用 PC,而不是本地模拟器。

现在,我已将远程 PC 设置为尝试连接到端口 5585 上的公共路由器 IP - 但在我的路由器中,我应该将其转发到哪个 IP/端口以连接到本地设备?

在使用模拟器的示例中,它们转发到运行模拟器的本地 PC 地址和端口 5555,并且 adb 未在本地 PC 上运行。我已将路由器配置为转发到我的设备 IP,设备在 WiFi 上,以及设备连接的本地 PC IP。

但是,在这两种情况下,当我在远程 PC 上尝试 adb connect <routerIP>:5585 时,都会出现错误 unable to connect to <routerIP>:5585:5585。尝试转发/收听其他端口时,我得到相同的响应。我在路由器日志中没有收到任何安全错误,所以看来端口转发正在工作。

问题:

  • 在本地网络上配置端口转发以使用远程 adb 实例连接到本地设备时,我应该转发到哪个本地 IP/端口号?
  • 我应该以设备绑定的本地 PC IP 还是本地设备 IP 为目标?
  • 如果我以本地设备 IP 为目标,我应该转发到哪个端口号?
  • 我需要在本地 PC 上运行 adb 吗?

【问题讨论】:

  • 您为什么不将 apk 复制到本地计算机并从那里部署它?
  • 仅供参考,根据我在这里看到的内容,似乎 adb connect 应该以实际 Android 设备的 IP 为目标:stackoverflow.com/questions/2604727/…
  • @AbdullahJibaly 在本地复制 APK 是一种选择,但在迭代开发过程中并不是一个非常有效的选择。我更喜欢直接使用 ADB,这样可以减少编译和应用程序出现在设备上之间的许多步骤。
  • @AbdullahJibaly 您列出的帖子中没有经过批准的答案,所以我不知道该怎么做。此外,这些响应似乎也需要 root - 我想在库存设备上执行此操作。当我尝试“adb tcpip 5555”进行重定向时,它只是挂在“重定向”消息处并且不会返回到提示符。

标签: android adb remote-debugging


【解决方案1】:

我也遇到过类似的情况。我在远程桌面上工作以进行开发,但我的 android 设备已连接到本地笔记本电脑。我希望能够在远程桌面上使用 eclipse 中的 adb 和 android 插件,并连接到连接到我的笔记本电脑的设备。在互联网上搜索并没有找到任何真正有用的东西后,我决定编写一个端口转发器来解决问题。你可以找到它here。我希望它对其他人也有帮助。

【讨论】:

  • 谢谢,我试试看。
  • 非常好!我在远程桌面的机器上使用 Eclipse Juno 完成了这项工作,并将设备(Samsung Galaxy S3)插入我的本地机器。我能够通过 DDMS 从远程桌面机器上的设备查看 Logcat 输出,从命令行执行 adb 命令,并部署应用程序。非常流畅,比尝试在机器之间随机播放 APK 好得多。仅供参考 - 我在两个命令行控制台中都收到大量“套接字关闭”错误,并且在 Eclipse 控制台中“已建立的连接被主机中的软件中止”。但是,它仍然有效。
  • 项目已移至 bitbucket。您可以在以下位置找到它:bitbucket.org/chabernac/adbportforward/wiki/Home
  • @GuyChauliac,太棒了!工作非常顺利。但是有些系统无法开始充当客户端,他们可以成功ping服务器,可以充当服务器,但是当我为客户端触发命令时,它在“Android ADB客户端启动:true”之后卡住了,即使当服务器处于就绪状态。 :(
  • 我在 Linux VM inside 中编写代码,因此我无法在来宾操作系统上运行 HAXM 仿真器,但通过此解决方法,我可以部署到在 Linux VM 上运行的 HAXM 仿真器主持人!谢谢!
【解决方案2】:

从 Android 4.3 开始,您可以:

  1. adb 服务器监听所有接口。你有两个选择:
    • 制作gListen=1并重新编译adb(我已经为你在Linux-x64机器上编译并放上here
    • 使用-a参数启动adb服务器:adb -a -P 5037 fork-server server&
  2. 在远程机器上使用adb 并带有额外参数,例如adb -H <remote_host> shell

【讨论】:

  • 感谢您的替代方法!澄清一下 - 这是否要求 Android 设备为 4.3 或更高版本?或者这是否需要 Android 4.3 发布的 SDK 工具?
  • 我刚刚对其进行了测试,它在 2.3 Gingerbread 设备上运行良好。
  • 这可行,但是将文件推送到模拟器非常慢(例如,adb install 非常慢)。这不是网络或 SSH 问题,因为 rsync 工作正常。有什么建议吗?
  • 有人可以提供一个示例,说明如何使用选项 2 使其工作吗?
  • 优秀的答案,正是我正在寻找的。结尾的“&”可以删除。
【解决方案3】:

远程主机 + 本地设备测试的另一种设置。这对于许多在家使用笔记本电脑工作的人来说非常有用,连接到他们仍在办公室的开发主机。请注意,我假设 devhost/laptop 都运行 Unix,但其他操作系统将能够在命令提示符/shell 上运行命令。

# Kill old adb server.
devhost$ adb kill-server 

# Activate adb server on client
laptop$ adb start-server

# Start ssh tunnel. Hide/minimize this window not to close it by accident
laptop$ ssh -XC -R 5037:localhost:5037 <your devhost machine>

# Should work by now with the local device connected to the laptop
devhost$ adb logcat 

【讨论】:

  • 这是迄今为止最好的解决方案
  • 在我的例子中,当使用 QT Creator 时,它还尝试使用端口 5039,一旦应用程序被部署(它确实),移动设备会一直等待端口 8100 上的调试器,想法?
  • 太棒了。确认这也适用于 windows wsl
【解决方案4】:

你可以通过端口转发来解决这个问题。

  • 从 Chrome 应用商店下载 Secure Shell 应用
  • 连接到您的机器(逐步设置)
  • 在此连接中,禁用 adb 服务器:adb kill-server
  • 创建新的端口转发连接(与常规连接相同,但将 SSH Arguments 字段设置为:-N -R 5037:localhost:5037)
  • 在您的笔记本电脑上,打开一个终端并启用 adb 服务器:adb start-server

【讨论】:

  • 非常有用的说明。但请注意,仅当本地和远程机器上的 adb 版本相同时才有效
【解决方案5】:

我的情况需要使用位于不同网络上的 VM,但我 rmd 进入(Azure VM)。 VM 和我的本地笔记本电脑都在运行 Windows 10。首先,我必须在我的本地计算机上安装 USB Redirector RDP Edition(成本 80 美元,但可能有免费的替代品),然后在 VM 上安装 Google Android USB 驱动程序和虚拟机上的Universal Adb Driver。我现在可以在 VM 上的 Android Studio 中加载 一个 Android Studio 应用项目,在我的笔记本电脑上连接一个 Android 设备,并在设备上调试该应用。

【讨论】:

    【解决方案6】:

    可能有一个更简单的解决方案,提供设备,本地和远程机器属于同一个网络。 假设您的设备在网络上具有特定 IP,并且假设您决定使用首选 PORT:那么,您可以执行以下步骤。

    请在插入设备的机器上运行:

    adb devices
    
    adb tcpip <PORT>
    

    PORT 的例子是 5555。

    在远程计算机上,您需要停用“发现 USB 设备”、“发现网络目标”和“端口转发”,然后运行:

    adb connect IP:PORT
    

    *IP是你的安卓设备IP(不是第一台机器IP),可以从adb shell ip -f inet addr获取

    你已经准备好在远程机器上调试了。

    【讨论】:

    • 它与 rdp 连接,但我如何查看设备列表? adb devices什么都不显示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2011-03-25
    • 2021-12-27
    • 2015-07-16
    • 2017-10-26
    相关资源
    最近更新 更多