ADB启动服务并监听所有接口的问题解决指南

5次阅读
没有评论

问题描述

adb start-server and listen on all interfaces 是一个常见需求,在Android 4.3 SDK中添加了 -a 选项,期望能通过 adb -a start-server 命令让后台进程绑定到所有网络接口。然而,该命令并未按预期工作。在Windows上需要如下命令启动:

adb -P 5037 -a fork-server server

这从Linux获取了正确的参数设置。

解决方案

方案1:使用 -nodaemon 打开端口

当前实现存在 Bug,adb-a 标志并没有传递给后台进程。唯一的解决方法是手动启动 server 使 adb 前台运行,并且监听所有接口:

adb -a nodaemon server

此命令可以使 adb 服务在前台运行并且绑定到所有网络接口,这种方式也是推荐的方式。即使 -H-P 参数只在客户端模式下有效(例如 adb forward 命令),这种方法依然有效。

方案2:通过重新编译 ADB

如果您希望永久性解决这个问题,可以尝试重新编译 adb :
1. 查看 此博客 中的详细说明或使用其中提供的预编译二进制文件。
通过这种方式可以实现 adb 监听所有网络接口而不仅限于 localhost

方案3:使用特定版本命令

直到目前(截止Adb 1.0.41),adb -a start-server 还没有使 adb 后台服务监听所有接口,在此情况下,需要手动启动服务并绑定到所有网络接口:

adb -P 5037 -a fork-server server

通过上述方案,可以解决 adb 在指定版本中未监听所有网络接口的问题。

总结

对于 ADB 没有正确执行 -a 选项导致不能绑定所有网络接口的问题,最直接的方法是在前台启动并使用合适的参数设置。如果需要长期的解决方案,则可以考虑重新编译 ADB 并采用博客中的方法或下载预编译二进制文件来实现这一功能。

希望上述方案能够帮助您成功部署 adb 服务到所有网络接口上。

正文完