其他测试框架 [二次开发 STF] 对于 adb 断线问题的分析及解决方案

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

最近流行测试平台开发,当然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.😅

共收到 10 条回复
104 seveniruby 将本帖设为了精华贴 06月29日 22:22
1134

 补充一个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就能看到手机了。
之前兼容性调试的时候遇到过这种问题,查了好久才解决~~

5512
1134weamylady 回复

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

1134
55120x88 回复

adb1.0.39的确没试过~~

63d42e

介绍的很详细,赞。

C014df

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

5512
C014dfOneDate 回复

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

C014df

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

5512

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

1361

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

5512
1361laurasong 回复

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

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