STF [二次开发 STF] 对于 adb 断线问题的分析及解决方案

0x88 · 2017年06月29日 · 最后由 0x88 回复于 2018年11月01日 · 2762 次阅读
本帖已被设为精华帖!

最近流行测试平台开发,当然USB问题是少不了的话题,论坛最近都在讨论USB断线问题,我也曾经为此烦恼过一阵时间,但现在已经有比较稳定的解决方案。

首先,我们先来了解一下USB线。把一条USB线剪了,我们会看到里面只有4根线,这4根线两线做传输数据(RX,TX),另外两条做的就是供电(+,-)。USB供电一般为5伏/1.5A,现在手机充电器为了提高充电效率把功率加大,因此一般的充电器都标注5V/2.5A。
另外,USB2.0的理论传输速度为60MB/s,USB3.0的则是625MB/s。

了解了这些以后,聊聊USB遇到的一些问题吧。
1、手机usb连接啥都没有做每天都会不定时的断开...
2、批量安装应用的时候也会断开...
3、多台设备查看日志的时候一堆断开。
................................(欢迎补充)
usb各种花式断线,各种报警,各种维护。

我曾经做过usb无线wifi方案,深刻了解到的usb-hub供电不靠谱,电压会各种被拉低,当电压低于4.85V时USB协议会呈现出各种奇怪的问题,完全无法解释。因此USB-HUB一定要外置供电!!!
另外STF开发者真的是个牛B的一群人,他们的经验很丰富,而且在官网上面写个很清楚。好多二次开发者都不往下看的,他们已经提供了解决思路,然后我发现我之前对于USB的瞎BB在牛人面前都是扯蛋,他们开发STF同样也遇到了这些问题,他们应该做过大量的测试,也有了相应解决方法,所以才选择ubuntu上面运行STF平台!
https://github.com/openstf/stf#troubleshooting


看不懂英文的同鞋,自行google翻译。算了我还是翻译一张图片吧。

上面问题描述已经很详细了吧,我也就不多解释了。

下面我讲一下在二次开发中遇到的一些问题及解决方案吧。
1、USB-HUB选型
我一开始选择的是USB3.0的HUB叫阿卡西斯这一款,后来接入手机设备多了以后发现真的很不稳定。看了STF官网上面的说ADB在USB2.0运行会比较稳定,于是我再次选型USB-HUB后决定买ORICO这个牌子的,型号好像叫P10-U2吧,10口USB-HUB,价格148大元,只有USB2.0的传输协议。
2、USB外置供电问题
ORICO的USB-HUB使用的是12V转5V的供电,电流为2.5A。但USB-HUB 10口满负荷,的运行过一段时间,发现某台一起连接的手机还是存在随机掉线的情况,于是我一个一个减少USB连接数,10个/9个/8个...直接到6个,已经相对稳定了。但我还是怀疑一个USB-HUB接上多台手机只有2.5A,功率是否足够?于是我就拜托公司的硬件工程师定制一个独立供电模块,他找了一个超大功率的直流电源DIY,做了一个很漂亮的一个电源。目前供电非常稳定,专业的事情还是得找专业的人来做。

PS:现在硬件上的问题基本上已经解决了。

3、软件层面上的问题。
批量安装应用会掉线的问题,当时批量指的是30台手机同时安装应用。上面我说过USB2.0传输速度只有60MB/s,是吧。因此批量安装一个20MB的APK包,20MB X N台手机,这个流量相当的大,肯定超过USB理论传输速度,然后USB就会断开,断开!!!于是在开发代码上做了队列安装,一台一台安装。于是这个问题也解决了。

4、还未解决的一些手机
GOOGLE nexus:接上电源会一直掉电,直到电池没电....找问题找了很久,我司硬件工程师的分析可能是因为nexus电源模块损坏了导致被其它手机当成电源拉电。因此这台手机接一个USB-HUB很奢侈....
华为V9:这个手机我也纳闷,在指定的USB-HUB上面就一定会断开连接,换到别的USB-HUB上就不会....问题没找到,一直很烦恼这台手机,感觉就是我不想跟这些破手机在一起,我是高大上的V9.😅

共收到 21 条回复 时间 点赞
思寒_seveniruby 将本帖设为了精华贴 06月29日 22:22

 补充一个usb连接后可能找不到手机的问题,首先运行 android reset adb,会在/Users/yourname/.android/文件夹生成一个android_usb.ini的文件。 然后在设备管理那里,打开android手机的驱动信息-详细信息-硬件id,查看手机的usb\vid_xxxx这个信息,这个xxxx就是设备的vid,把这个vid加到上述的android_usb.ini上面,例如华为手机是12d1,那么就加一行0x12d1在上面,然后运行adb kill-server, adb devices就能看到手机了。
之前兼容性调试的时候遇到过这种问题,查了好久才解决~~

0x88 #3 · 2017年07月04日 作者
water 回复

我这边使用的stf那套分布式方案,所以是不能重启ADB。我要保证连接上的手机一定是稳定的,不会出现掉线的问题。目前在ubuntu上面没有出现过识别不了手机serial的情况。你可以试下ubuntu看会不会出现这种问题。在我的windows上面也会出现识别不了手机的情况出现,我记得好像是adb 1.0.31版本。后面换成新的1.0.39版本就不出现了。我之所以发这篇文章目的就是想说没必要去重启ADB或者是USB。

0x88 回复

adb1.0.39的确没试过~~

介绍的很详细,赞。

楼主 遇到过 使用 模拟器 链接 无响应的 问题不

0x88 #7 · 2017年07月07日 作者
王争伟 回复

为什么要使用模拟器?模拟器有序列号?

可以 较快的 切换 手机 分辨率 吧 ,不用找 各分辨率的 手机了

0x88 #9 · 2017年07月07日 作者

那你做STF也失出了它的意义。不建议这样做。另外模拟器没有序列号!

楼主硬件知识棒棒的
海淘了stf推荐的那款hub,还是蛮稳定的~

0x88 #11 · 2017年07月11日 作者
laurasong 回复

海淘的都是有钱人啊,我因为海淘不起才选择ORICO,虽然也很贵。

laurasong 回复

给个海淘,地址。。。

如果多个手机每个手机有多个安装apk,当有一个手机第一次推送断开了,接下来这个手机还会自动接受接下来推送么

0x88 #14 · 2018年04月24日 作者
唐明龙 回复

如果不是因为超过通讯带宽的话,一般不会断开,应该说比较稳定,但如果超过带宽,你整台子服务器的手机都会断开,而不是一台。

也是用的ORICO,尝试了2级级联 (1个Hub上再连一个Hub),稳定性可以接受。

0x88 #16 · 2018年05月03日 作者
Kun 回复

不建议这么干,反正有多余的USB接口为什么不用。。。而且你这样接布线会很乱,当然如果设备就十来台就无所谓了。

你好,我的provider的设备,总是断开连接,一下都断开,然后自己又自动连接上,隔一段时间就断一次。

0x88 #18 · 2018年09月18日 作者
zhntester 回复

具体问题得具体分析,你先看下syslog,看下硬件是否断开连接。然后得看下是否切换usb模式,还得看下你的hub接了几台手机,整个电脑接了几台手机。多试几次才能试出问题。感觉上你得先看系统日志。

stf 这几天刚接触,看到很多说 usb 连接的问题,我有个疑惑,adb 不是支持 WiFi 连接的方式吗?为什么没有考虑用 WiFi 连接的方式取代 usb 连接的方式?

0x88 #20 · 2018年11月01日 作者
CC-q 回复

wifi是可以的,但是我们为了避免上网和adb通讯间的冲突不考虑使用wifi。而且手机数量上去了,占用wifi的带宽会影响到通讯质量。

0x88 回复

噢,原来如此。不过我又想到另外一个问题,所有手机都通过电脑的usb(或接hub)来进行adb通讯,充电的话也是通过电脑,中间有转换,比起直充会慢很多,这点是怎么解决的呢?

0x88 #22 · 2018年11月01日 作者

diy一个大功率的充电模块,给每个hub充电。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册