问题描述
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 服务到所有网络接口上。
正文完