【问题标题】:Using ADB locally on device (loopback) shows no devices在设备上本地使用 ADB(环回)显示没有设备
【发布时间】:2026-01-29 13:00:01
【问题描述】:

我正在尝试在 Android 设备本身上使用 ADB,因此没有任何主机。几天前它工作得很好,但它突然停止工作。据我所知,从那时起没有任何变化(例如,没有(未)安装应用程序)。我可以在终端模拟器中使用adb backup -f /sdcard/backup.ab <package-name>,它会开始备份那个包。当我现在尝试时,它返回adb: unable to connect for backup。使用adb devices 进行调查会返回一个空列表。以前我从不费心检查设备,我只是直接使用我的 adb 命令,因为一切正常。

这是在运行 Android 4.4.2、ADB 版本 1.0.31 的 HTC Desire 上。 在这款手机上使用我的电脑上的 ADB 运行良好,但这不是我想要的。

我的尝试

  • 我尝试在不同的设备上执行相同的操作(4.4.2 上的华硕 PadFone 2,4.4.2 上的三星 Galaxy Note GT-N7000,4.1.2 上的索尼 Xperia S。)但adb devices 返回一个空列出所有这些。我开始想知道为什么这首先对我的 HTC Desire 有效。
  • 搜索 Google 和 Stack Overflow,但大多数(如果不是全部)结果涉及驱动程序问题或涉及主机的任何其他问题。
  • adb kill-server + adb start-server 大约一百次,还有stop adbd + start adbd
  • 在“设置”中关闭和打开“USB 调试”,以及撤销对先前授权计算机的访问。 (但是,在工作的情况下,我从来没有收到任何 RSA 密钥验证提示。)
  • adb -a devices -> 空列表。
  • adb usb -> error: device not found.
  • 尝试在 TCP 模式下重新启动 adb(d) 不成功(即使在工作情况下这不是必需的)。 adb tcpip 5555 返回error: device not found
  • getprop 不返回名为 service.adb.tcp.port 的条目,setprop service.adb.tcp.port 5555 静默失败。 (之后使用getprop service.adb.tcp.port 进行检查不会返回任何结果。这不需要root 吗?)
  • adb connect localhost 返回unable to connect to localhost:5555
  • 当守护程序启动时,它在端口 5038 上启动(在我的 PC 上使用 ADB 时,它在 5037 上启动)。 adb connect localhost:5038 返回connected to localhost:5038。然而adb devices 仍然返回一个空列表,而adb backup 返回adb: unable to connect for backup。此外,adb shell 返回error: device not foundadb get-state 返回unknown。所以这里也没有成功。
  • 使用getprop dhcp.wlan0.ipaddress(返回192.168.1.xx)查找我的本地IP,然后adb connect 192.168.1.xx返回unable to connect to :5555adb connect 192.168.1.xx:5038 -> unable to connect to :5038。使用 ADBHOST=192.168.1.xx adb start-server 对这些结果没有影响。
  • AOSP 问题跟踪器上的this 线程是少数几个实际上有些相关的搜索结果之一。然而,它描述了一个问题,在使用setprop service.adb.tcp.port 5555 之后,adb devices 至少显示了一个设备,但是离线(即localhost:5555 offline)。在线程接近尾声时达到了一个解决方案,其中涉及更改 $HOME 目录以更改 RSA 密钥的保存位置,例如HOME=/sdcard。然后需要使用cat /sdcard/.android/adbkey.pub >> /data/misc/adb/adb_keys 将公钥附加到/data/misc/adb/adb_keys。但是,我认为这需要root?此外,在工作情况下,所有这些都不是必需的,所以我怀疑我的问题的解决方案是否可以在这个方向上找到。 This article,源自 AOSP 问题跟踪器的线程,没有提到附加公钥。然而,上述方法并不成功。
  • netstat 返回(等等):

    • Proto: tcp
    • Recv-Q: 0
    • Send-Q: 0
    • Local Address: 127.0.0.1:5038
    • Foreign Address: 0.0.0.0:*
    • State: LISTEN
  • ps 显示一个/sbin/adbd 进程以及一个adb 进程:

    • 用户:shell PID:92 PPID:1 VSIZE:3624 RSS:264 WCHAN:ffffffff PC:00000000 S NAME:/sbin/adbd
    • 用户:u0_a57 PID:9754 PPID:1 VSIZE:3016 RSS:988 WCHAN:ffffffff PC:4014f768 S NAME:adb
    • (从终端执行的命令以用户身份执行:u0_a57。)

我想差不多就是这样。

我正在寻找一种不需要 root 的解决方案,因为我之前使用它时不需要它。 我希望我的情况和问题很清楚。如果我的问题需要改进,请告诉我,因为这是我第一次在 Stack Overflow 上发帖。 希望有人可以帮助我。提前致谢!

【问题讨论】:

  • 您到底想达到什么目的?为了在没有 PC 的情况下创建备份文件,只需运行 /system/bin/bu backup <backup parameters>。这就是 adb backup 从 PC 启动时所做的事情。
  • @AlexP。感谢你的回复。这可能正是我所需要的,因为我正在尝试在没有 PC 的情况下创建备份。如何设置保存备份的位置?从com.android.commands.bu.Backup的源码看,没有-f参数。此外,如果我正确读取源代码,则传递的第一个参数(甚至在“备份”之前)稍后(作为 int)用于创建 ParcelFileDescriptor
  • @AlexP。然而,'/system/bin/bu /sdcard/backup.ab backup -all' 不会在 sdcard 上创建 backup.ab 文件。 bu 唯一返回的是警告“链接器:app_process 有文本重定位。”,这似乎是由于 Xposed。根据我的阅读,这只是一个警告,操作(bu 备份)仍应执行。我只是找不到任何证据表明它正在被处决。
  • adb backup -f 参数正在 PC 端处理。在设备上,备份数据被发送到stdout - 只需将其重定向到您想要的任何文件。
  • @AlexP。伙计们,谢谢你们的cmets,他们帮了我很多! 1个问题:您是否也在您的应用程序中执行“bu restore path/backupName.ab”?我被困在这里,因为我的恢复确认只是挂起并且什么都不做。

标签: android localhost adb local loopback


【解决方案1】:

我相信您的设备可能已重新启动。最初要让你的手机进入 tcp,你必须在电脑上运行adb tcpip 5555。但这不会永远持续下去。如果您的手机重新启动,那么您将不得不再次从计算机上运行adb tcpip 5555

我不知道你说的是什么意思:

尝试在 TCP 模式下重新启动 adb(d) 是不成功的(即使在工作情况下这不是必需的)。 adb tcpip 5555 返回错误:未找到设备。

你是从电脑上运行的吗?如果它来自计算机,那么我不确定那里有什么问题。但是如果是手机上的,那就找不到设备改成tcp了。

要解决这个问题,电脑上的adb tcpip 5555 应该可以工作。

【讨论】: