我想通过网络使用adb
连接到Android设备。我熟悉How can I connect to Android with ADB over TCP?和https://developer.android.com/guide/topics/usb/index.html,并遵循指南。具体来说,我做了以下事情:
# adb kill-server
# adb tcpip 5555
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting in TCP mode port: 5555
# adb connect 192.168.1.101:5555
unable to connect to 192.168.1.101:5555:5555
由于上一次错误,我也试过
# adb connect 192.168.1.101
unable to connect to 192.168.1.101:5555
我也尝试重启设备本身,但没有帮助。 有什么理由不起作用吗?
更新:为了消除疑虑,我确信这是我的设备内部IP地址。
答案 0 :(得分:0)
我的无根设备一直存在同样的问题。与普遍看法相反,adb tcpip <port>
似乎需要模拟器或调试版本或root权限;至少根据源代码。
主分支:https://github.com/android/platform_system_core/blob/master/adb/adb.c#L898查看should_drop_privileges
,这会阻止https://github.com/android/platform_system_core/blob/master/adb/adb.c#L966 adb_main
打开TCP / IP套接字连接。
在较旧的分支中,用于标识adbd
特权的逻辑位于adb_main
本身。请参阅:https://github.com/android/platform_system_core/blob/froyo-release/adb/adb.c#L860
因此,为了进一步证明adbd
不会进入TCP / IP模式(即使adb tcpip
没有出现错误),请查看以下内容:
adb shell getprop | grep 'ro.secure\|debuggable\|qemu'
,输出我的设备:
[ro.secure]: [1]
[ro.debuggable]: [0]
这不符合secure
中adbd
值{0}的条件,因为我没有运行模拟器(默认情况下需要TCP / IP),我'我没有运行Android的可调试版本,我不是root。
此外,如果您发出adb shell netstat
命令,您将看到没有人正在侦听端口5037或5555或您提供给tcpip
命令的任何其他内容,正如运行adbd
所期望的那样在TCP / IP模式下。
希望这有帮助,祝你好运!
答案 1 :(得分:0)
使用tcpip传输重启adbd的能力因设备而异。如果不确切知道你正在使用哪种设备,很难知道确切的原因。
我在运行4.2.1的Galaxy Nexus(takju)上测试了“adb tcpip 5555”并发现它可以工作。我还在其他几台设备上进行了测试,但这些设备都没有用。
我设法在Motorola Droid 3上使用root访问权限使用它。请注意,ro.secure = 1和ro.debuggable = 0。我只需手动将service.adb.tcp.port“设置为”5555“:
devbox:~/droid3$ adb shell shell@cdma_solana:/$ getprop | grep 'ro.secure\|debuggable\|qemu' [ro.secure]: [1] [ro.debuggable]: [0] shell@cdma_solana:/$ su -c 'setprop service.adb.tcp.port 5555' shell@cdma_solana:/$ exit devbox:~/droid3$ adb tcpip 5555 restarting in TCP mode port: 5555 devbox:~/droid3$ adb connect 172.16.0.14 connected to 172.16.0.14:5555 devbox:~/droid3$ adb -s 172.16.0.14:5555 shell shell@cdma_solana:/$
虽然我在运行“adb tcpip”时指定了5555,但设备会忽略它。看来这个特定的设备没有必要的访问权限来设置没有root的“service.adb.tcp.port”属性。
同样,你可以回到USB:
shell@cdma_solana:/$ getprop | grep adb [persist.service.adb.enable]: [1] [ro.sys.atvc_allow_all_adb]: [0] [persist.adb.tcp.port]: [] [init.svc.adbd]: [running] [service.adb.tcp.port]: [5555] shell@cdma_solana:/$ su -c 'setprop service.adb.tcp.port ""' shell@cdma_solana:/$ exit devbox:~/droid3$ adb -s 172.16.0.14:5555 usb restarting in USB mode devbox:~/droid3$ adb shell shell@cdma_solana:/$
这可能对其他设备无效的原因各不相同。
在我测试过的Galaxy Nexus上,shell用户可以设置“service.adb.tcp.port”属性。目前还不清楚为什么这次会有所不同。
有趣的是,如果启用TCPIP,droid3似乎不会继续侦听USB。但是,Galaxy Nexus会。
希望这会有所帮助..
答案 2 :(得分:0)
我也遇到了与你的TCPIP设置相同的情况,但是adb connet失败了。我终于发现这是我的网络问题,ping也在那个scenairo下失败了。 在我运行ping之后,adb connect也可以正常工作。所以,我的建议是检查你的网络环境。
答案 3 :(得分:0)
您好,我知道这是一个老问题,但我遇到了同样的问题。我不确定你的情况是一样的,但问题是我通过USB扩展连接我的Android设备,只要我将Android设备直接连接到我工作的MAC中的USB端口。
只是为了澄清尝试将Android设备直接连接到计算机或尝试切换USB端口。