Android - adb tcpip错误

时间:2012-06-17 21:20:02

标签: android adb

我想通过网络使用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地址。

4 个答案:

答案 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]

这不符合secureadbd值{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会。

希望这会有所帮助..

PS。另见:How can I connect to Android with ADB over TCP?

答案 2 :(得分:0)

我也遇到了与你的TCPIP设置相同的情况,但是adb connet失败了。我终于发现这是我的网络问题,ping也在那个scenairo下失败了。 在我运行ping之后,adb connect也可以正常工作。所以,我的建议是检查你的网络环境。

答案 3 :(得分:0)

您好,我知道这是一个老问题,但我遇到了同样的问题。我不确定你的情况是一样的,但问题是我通过USB扩展连接我的Android设备,只要我将Android设备直接连接到我工作的MAC中的USB端口。

只是为了澄清尝试将Android设备直接连接到计算机或尝试切换USB端口。