ADB无线连接经常掉线,如何保持ADB在线?

10

我正在使用一台安卓平板通过USB端口与USB设备通信,但是该平板只有一个USB端口,因此我使用adb wifi作为我的调试工具。然而,当我通过WIFI连接adb时,连接不会保持长时间(通常只有几分钟),如何让adb wifi连接始终在线? 另一个问题是,是否可以使用USB HUB将平板与USB闪存驱动器和计算机连接,并保持adb运行? 非常感谢!


请查看此链接以获取文件:https://gist.github.com/kamleshkarwande/fe3edd5d13757fcedd457ac4c0953a97 - Kamlesh
7个回答

9

在多次尝试失败后,我注意到打开“仅允许在充电模式下进行ADB调试”规范可以解决问题。它使设备在线并可通过WiFi访问ADB。您可以在“开发人员选项”部分找到它。


5

通过无处不在的研究和自己的开发一周以上,我发现了以下问题。

Q1. 如果adb服务长时间没有执行任何操作,它经常会崩溃。

A1. 定期调用adb命令可以保持adb服务器在线。

Q2. wifi连接的设备有时会断开连接。

A2. 在检查连接设备的wifi之前,请检查ADB服务器运行的wifi。Ping谷歌,如果连接良好,则ping到设备。
无线连接可能会自动断开,即使有时候有线连接也会断开。因此,在设备尚未连接时调用“adb connect ...”是必要的。您可以轻松地通过保存“adb devices> device.txt”并查询您的预期wifi是否在列表中来完成此操作。如果没有,请再次连接(在另一个线程中进行)。

Q3. wifi连接的设备有时处于离线状态。

A3. 这是因为通过TCP / IP连接,您的ADB服务器现在处于Time_Wait状态。上次连接被中断,下次连接现在已离线,因为上次连接没有完全关闭。您可以手动断开/连接设备的wifi,或重新启动TCPIP连接,例如“adb tcpip 5555” 如果要自动执行此操作,则必须以编程方式断开/连接设备的wifi。

如果有其他问题,请在评论中提出,我可以回答。


嘿,如果我们在循环中断开并重新连接它,再加上延迟,它能正常工作吗? - gumuruh

3

当连接丢失时,adb devices显示设备处于离线状态,如下所示:

prompt> adb devices
List of devices attached
192.168.1.1:5555     offline

然后使用adb disconnect IP命令,接着使用adb connect IP命令通常可以解决问题:

prompt> adb disconnect 192.168.1.1
disconnected 192.168.1.1
prompt> adb devices
List of devices attached
prompt> adb connect 192.168.1.1
connected to 192.168.1.1
prompt> adb devices
List of devices attached
192.168.1.1:5555     device

2

无需任何第三方应用程序即可通过 Wi-Fi 使用 adb。请按照以下步骤操作。

  1. 通过 USB 连接设备

  2. 打开终端并使用 adb devices 命令检查设备是否已列出

  3. 输入命令 adb tcpip 5555 并回车(或使用其他端口代替 5555)

  4. 拔掉 USB 电缆。您不再需要它了。

  5. 拿起您的 Android 手机并转到“设置/关于手机/状态”

  6. 检查 IP 地址部分。假设您的 IP 地址为 192.168.x.y

  7. 在终端中,输入命令 adb connect 192.168.x.y

  8. 现在,您已经通过 Wi-Fi 连接了设备。

  9. 您可以在 adb devices 中看到您的设备

  10. 享受吧!:)


2
谢谢你的回答!这就是我以前所做的。然而,我想完全摆脱USB电缆,我在我的平板电脑上安装了WiFiAdb,但它的连接经常会丢失。你知道原因吗? - desertboat
你说的“完全摆脱USB电缆”是什么意思?在这些步骤之后,你何时会使用你的电缆? - Berkay92
1
我的意思是我不走第一步,而是使用Android WifiAdb.apk。 - desertboat
我使用的Play Store应用程序直接连接到手机上的5555端口。但是,使用这种方法后一段时间过去后,我无法再连接。当发生这种情况时,我在外出工作,远离任何可以连接并重新运行adb tcpip 5555的设备,因此我无法在回到办公桌时捕获logcat以调试发生的任何问题。我该如何防止这种情况发生? - Michael
尝试执行 adb kill-server 然后执行 adb start-server。然后再次应用这些步骤。 - Berkay92
显示剩余2条评论

0

这似乎是您的wifi出了问题。作为预防措施,只需保持终端开启,每当需要测试时,只需按“向上箭头”键即可回到先前运行的adb connect "<ip>"命令。


1
我的Wi-Fi发射器离我的平板非常近,信号强度很高,然而这似乎与问题无关,我不得不频繁使用“上升”,但这样做非常尴尬。 - desertboat
嗯...我仍然相信这是你的路由器出了问题。它被很多设备共享吗?如果是的话,那么路由器可能会决定暂时随机断开设备,在adb的情况下,这意味着完全断开连接。您可以构建一个小型测试应用程序来检查连接中断发生的次数以确保。 - Shaishav

0

所以,我正在使用Scrcpy和Adb无线连接到我的手机(用于开发Flutter应用程序),由于屏幕甚至不能通过Scrcpy --stay-awake命令保持唤醒状态。

我不得不更改锁定设置=>锁定屏幕=>睡眠,并将设置更改为永不休眠。


0
我尝试了很多方法,但这个方法对我有效:在循环中强制打开和关闭显示屏会使设备保持在线。
adb shell input keyevent 224
timeout 2
adb shell input keyevent 26
timeout 58

这将在每分钟打开显示器2秒钟。


这个怎么可以在循环中完成? - YUSMLE
在Mac上,我尝试使用“while:; do clear; adb shell input keyevent 224; sleep 2; done”命令。连接时间更长,但过一会儿又会断开 :o/ - Dirk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接