2.2 Android连接常见问题¶
注解
若以下内容未能解决您的问题,请移步 AirtestIDE Issues 页面,将手机型号、错误log以及问题描述进行提交,我们会尽快修复。
1. 问题自查¶
关闭手机助手类软件¶
请务必确认当前环境下没有其他第三方 手机助手 类软件正在运行,如果有,请完全退出(并确认任务管理器中没有相关进程依然残留,大部分手机助手需要在任务管理器中手工终止进程才能完全退出)后再试一次。
确认手机设置¶
请确保手机中的开发者选项
里,允许USB调试
选项是开启状态,部分手机在连上USB线后需要选择MTP模式
进行连接。
如果在AirtestIDE的设备列表中,看到设备状态是unauthorized
,如图:
请在手机上点击确认允许USB调试
选项,可以勾选一律允许使用这台计算机进行调试,避免以后的重复操作:
确认ADB是否能够正常连接到手机¶
如果在AirtestIDE的设备列表窗中看不到你的设备号,请先确认手机是否能正常连接ADB:
- windows系统下:
用USB线连好手机后,进入AirtestIDE文件夹,在 AirtestIDE/airtest/core/android/static/adb/windows
目录下按住shift+鼠标右键打开命令行终端,输入 adb.exe devices
。
- mac系统下:
在解压dmg后会提示你将应用安装至Application/文件夹,因此可以在终端命令行中,cd到 Application/AirtestIDE.app/Contents/MacOS/airtest/core/android/static/adb/mac
目录下,运行 ./adb devices
正常情况下,应该得到的返回内容示例:
>adb.exe devices
List of devices attached
JTJ4C15A30048654(手机的设备号) device
如果未能正常出现上述输入,需要检查以下几个方面:
- 如果看不到
设备号 device
这一行,需要检查电脑上是否已经安装了该款手机的对应 官方驱动软件 ,如果尚未安装驱动的话就检测不到手机。请自行查阅手机品牌官网,下载官方驱动进行安装。 - 建议尽量使用机箱背面的USB接口,主机正面的USB接口可能稳定性较差
- 手机上需要将 开发者选项 开启,并开启 USB调试 选项,并且在接入电脑时,选择 允许该PC对设备进行调试,否则手机状态为unauthorized是无法连接的
- 务必再三确认电脑上所有手机助手类型的软件均已关闭,且进程都已完全退出(大部分手机助手都需要手工在任务管理器里终止进程)
ADB 是Google官方提供的Android调试工具,由于AirtestIDE与相关的库都需要依赖ADB操作,因此如果无法通过 adb devices
看到自己的设备的话,就无法继续使用AirtestIDE,请务必确认手机能够正确连接到PC。
确认Airtest相关文件能够正常安装到手机¶
若能够在 adb devices
指令的返回结果中看到自己的设备,但是无法使用AirtestIDE连接手机,可以继续检查以下几个方面:
- 在设备接入IDE进行初始化时,还会在手机上安装一个RotationWatcher.apk的应用(用于检测手机屏幕是否旋转),可能会在手机上有安装apk的弹窗提醒,需要手工点击同意安装
- 部分型号的手机默认阻止了ADB安装apk的权限(尤其是 小米手机 ),请在开发者选项中打开该配置项,否则无法安装必备的apk
- 如果是已root的手机,可能会因为本地文件夹权限已被修改,导致Airtest没有权限将相关文件放入手机内,请检查手机内的
/data/local/tmp
文件夹是否有写入权限 - 如果手机曾经安装过
STF
库,可能会出现不能正常点击屏幕等问题,可以尝试清空原先安装的STF相关文件(执行指令adb shell rm /data/local/tmp/mini*
)后,再重新将手机连接到IDE中进行初始化 - 部分手机虽然能成功安装
pocoservices.apk
,但是在启动中可能会不断提示重新安装、无法正确启动,此时需要检查手机所处的网络是否是特殊网络(例如开了代理)、手机的开发者选项中的设置是否开启(涉及到USB安装和操作相关的选项,部分型号设备需要选择取消权限监控等)。如果是VIVO/OPPO品牌手机,可能需要设置手机默认输入法为yosemite,请查看本文档的OPPO/VIVO相关章节。
如果输入adb devices后能够正确出现手机设备号信息,但在AirtestIDE中依然不能正确连接和操作手机画面,请将手机型号、错误log以及问题描述 提交issue 。
下方的指引中提供了部分厂商的设置可能需要注意的地方,请大家先根据自己的手机型号排查问题,确认无法搞定后再到github上提交issue。
设备兼容性¶
我们已经对当前市面上大部分用户使用的机型做了兼容性测试,请查看 已确认机型列表 确认自己的手机是否兼容(由于设备更新换代速度很快,该列表已经很久没有维护,但是目前市面上大多数手机都是可兼容的)。
如果您使用的手机不在列表中,请将手机型号、错误log以及问题描述 提交issue 。
如果您使用的手机在列表当中显示兼容,但实际使用中遇到了问题,请继续查阅文档进行问题排查。
2. 部分厂商设备特殊问题¶
这里列出了部分厂商特殊机型的设置,请根据自己的手机型号查看是否有对应选项需要打开。
小米¶
请在“开发者选项”中将“允许模拟点击位置”、“USB安装”、“USB调试(安全设置)”等选项打开,部分选项的开启可能需要 登录MIUI账号 (需要插入SIM卡),若没有正确打开这些选项,可能会导致小米手机无法连接的问题。
如果尝试打开图示2个选项,但是打开后提示 被临时限制
而无法打开,可以试下退出当前小米账号, 重新插入另一张有效sim卡,然后登录当前sim卡号码注册的小米账号,一般就能再次打开了。
另外,部分型号的小米还需要禁用掉下述设置才可以正常连接:
① 开发者选项底部的 “启用MIUI优化” 需要 禁用 掉:
② 手机管家-应用管理-权限-右上角的设置- “应用权限监控” 和 “USB安装管理” ,这俩个设置也需要 禁用 :
特别注意:如果你的小米已经更新到MIUI11,你需要在点击 connect
按钮之前,勾选 use Javacap + use orientation
这两个选项后才能使用;使用本地环境跑脚本时,也要注意将这俩个连接参数加入到运行命令中。
③ 开发者选项中,关掉“高风险提示”。
MIUI论坛关于USB安装调试的说明
如果出现点击手机屏幕会报错、无法点击手机屏幕的问题,请确认小米设置中的 允许模拟点击位置 选项已经打开。
部分小米手机在连接失败时,报错 Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]
,是因为在Airtest试图向手机中安装apk但是被手机自动拦截了。除了上述开发者选项中需要注意开启 允许通过USB安装应用
之外,还可以查看手机设置-》授权管理-》USB安装管理-》去掉USB安装应用的相关限制。
部分小米手机无法成功安装yosemite输入法,在初始化poco时报以下错误:
在系统设置的语言和输入法中,取消安全键盘
的选中状态:
三星¶
1.显示-屏幕分辨率调到最大:
如下图所示,部分手机设备(如部分型号三星手机)在连上AirtestIDE后,显示出的手机画面不能撑满整个屏幕,请在“设置”-“显示”中将“屏幕分辨率”调至 “WQHD”
2.在开发者选项中,打开未知来源、取消权限监控。
华为¶
1.输入法设置中,取消安全输入
2.开发者选项->监控ADB安装应用取消,打开仅充电模式下允许调试
3.权限监控->设置->自动配置权限
4.部分华为型号的手机,可能出现点击位置与实际位置不符的情况(mate20pro, mate7等),需要在 设置
- 显示
- 屏幕分辨率
中,将分辨率设置为最高即可。
5.如果华为手机出现poco在启动后十几秒内自动断开的话,可以检查一下手机管家的版本号是否大于8.0,如果是的话,就在手机管家->启动管理里面,找到pocoservice,勾选允许自启动和允许后台活动。
vivo¶
1.取消安全输入,如果遇到Poco初始化失败、text接口无法调用的问题,可以在输入法设置中将Yosemite输入法设置为默认:
2.部分机型需要 在开发者选项中打开安全权限 ,否则可能在初始化poco的时候看到以下报错:
3.如果vivo输密码的时候出现黑屏,可以在尝试把安全性设置里的 安全键盘 关闭掉再重试。如果没找到 安全键盘 的设置,可以找一下vivo的设置->安全与隐私-> 防止恶意截屏录屏 ,然后把防止恶意截屏录屏关掉就好了。
4.如果有 usb模拟点击
选项的话,一定要点开,否则运行脚本可能会报错:
5.如果出现vivo手机长时间连接会出现自动关闭开发者选项的问题,可以在开发者选项里选择 不锁定屏幕 来解决。
OPPO¶
1.开发者选项的最底部,勾选 禁止监控权限
2.OPPO部分机型在每次安装APK时都需要输入密码:暂无更靠谱的解决方案,有一个帖子可以供参考 [收集帖] 各厂手机不能自动化的坑和解决方案 。
3.部分OPPO机型在初始化Poco时,或者调用 text()
接口时,会失败报错,原因可能是因为安装或者切换Yosemite输入法失败(需要输入OPPO账号密码才能切换)。此时可以先到系统设置-输入法设置里,将Yosemite输入法设置为默认输入法,如果尚未安装Yosemite输入法,可以在 AirtestIDE\airtest\core\android\static\apks
目录下找到它并且手工安装到手机上之后,即可开始使用Poco功能以及 text()
接口。
4.如OPPO出现10分钟断连的情况,不要插拔手机,直接在屏幕上方下拉的选项里再次打开 USB调试 ,一般就不会再断开了。
魅族¶
魅族手机部分型号无法直接通过ADB进行连接,具体解决方案请参照这个 帖子 。
LG¶
LG手机需要选择充电模式才能正确打开USB调试,识别序列号:
另外还需要在开发者选项中勾选允许模仿位置:
一加¶
一加手机在使用poco的时候,会出现重复安装的问题,报错如下:
此时需要将pocoservice.apk的电池优化关掉,改成“不优化”:
3. 全面屏问题¶
IDE 位置发生偏移¶
在一些不支持全面屏手机的app,画面不能充满整个屏幕的时候,出现黑边,poco定位发生偏移。最新版IDE已修复该问题,只需在Poco辅助窗点击 “Stop” ,然后重新连接,即可切换为当前画面渲染分辨率。
IDE 自定义渲染分辨率¶
AirtestIDE 可适应90%以上全面屏不适配的问题, 对于剩下未支持的10%手机, IDE支持用户自定义设置渲染分辨率.
勾选采用渲染分辨率,然后输入竖屏模式下的渲染分辨率,点击OK即可. 渲染分辨率为用逗号隔开的四个数字,数字分别代表竖屏模式下的 offset_x, offset_y, offset_width, offset_heigt.
比如本例中在 1080*2220 分辨率下的大鱼来了,它在手机上会有两个黑边,上黑边高度为 100px ,画面高度为2020px ,下黑边高度为 100px ,所以它的渲染分辨率则为(0 ,100 ,1080 ,2020)
脚本运行发生偏移¶
当app不支持全面屏,出现黑边,运行poco点击的脚本的时候,会发生偏移,像下图执行 poco("PauseButton").click()
一样,实际点击位置不符合预期。
确保当前poco或IDE为最新版本,关闭下图的 虚拟键盘,然后在脚本中调用 poco.use_render_resolution()
, 让poco切换为当前画面渲染分辨率,运行脚本,即可准确点击。
对于Airtest无法支持的全面屏设备,可以自定义渲染分辨率::
poco.use_render_resolution(True, (0 ,100 ,1080 ,2020))
如果页面切换,从不支持全面屏的画面切换到支持全面屏的画面,即有黑边的页面->无黑边页面,需要重新设置poco分辨率,传入"False", poco.use_render_resolution(False)
,poco会切换成手机完整分辨率。
如当前为多机运行,同时存在普通屏手机和全面屏手机,而app不支持全面屏的时候,需要关闭所有手机的虚拟键盘,脚本按照支持全面屏的脚本编写。
4. 其他常见问题¶
部分设备“返回”-“主页”-“菜单”等按钮失效¶
-
部分设备不能正确响应一些系统按钮操作,例如 HOME、BACK等:
-
vivo Y55A
-
vivo Y67
-
vivo X20 Plus(屏幕指纹版)
-
红米 3X (Redmi 3X)
-
小米 5C (Xiaomi 5C)
更多机型请参阅 设备兼容性 章节。
-
-
部分机型由于系统定制原因,text输入文字时,会发生脚本异常退出问题:
- vivo Y55A
请在脚本内自行
catch
错误,或使用poco("xxx").set_text("input")
。
使用text()接口无法在密码框中输入密码或出现IDE窗口卡死¶
部分厂商(例如华为、VIVO等)的某些型号手机限制了密码框的输入。这部分手机设置内的安全选项默认是开启状态,所以强制在输入密码时必须使用 系统键盘输入 (即安全输入键盘)。这样会导致需要输入密码时,直接使用airtest的text()会无法输入内容,所以需要手动关闭安全输入选项后,才能正常输入密码内容:
另外有部分VIVO手机,在脚本点击到输入密码窗口的时候,IDE的可视化窗口可能会卡死,不会实时更新手机屏幕画面,导致脚本会报找不到图片的错误。
这时候可以关闭手机上防恶意截录屏选项和安全输入选项,就不会出现脚本点击到输入密码框时,IDE可视化窗口卡死的情况:
是否支持模拟器、IOS¶
目前已支持模拟器,目前有两种连接方式:
- 直接用安卓真机的方式来连接模拟器,详见 模拟器连接方法
- 直接作为Windows窗口进行嵌入,详见 Windows连接方法
iOS的连接也已经支持,详见 iOS-连接 。
若模拟器在连接过程中出现屏幕黑屏,可在连接设备前,勾选connect下拉菜单中的 use javacap
选项,再进行连接即可正常看到模拟器画面。
刷出重复设备¶
刷新时发现两台同样的设备,状态各为device和offline。
一般因为开启了手机助手,关掉后再次刷新即可。
未运行模拟器时刷出了emulator-5554设备¶
原因:模拟器打开5554端口后,adb只要检测到这个端口打开,会认为存在设备。
参考处理连接 。
以Windows7系统为例:
1.进入AirtestIDE/airtest/core/android/static/adb/windows文件夹 Shift+右键,进入命令窗口,输入 “adb.exe devices”
如果出现 emulator-5554的设备,执行步骤②
2.执行操作:
a. 执行热键 Windows + R
b. 输入 "services.msc"
c. 停止 BlueStacks Android Service
频繁出现adb.exe已停止工作弹窗¶
一般是手机助手强占adb导致,请关闭手机助手,确保adb.exe进程、手机助手相关进程不在后台,再进行重试。
这个问题的主要原因是,本地可能存在多个版本的 adb.exe
,导致启动时会相互冲突,如果本地Python环境中安装了airtest,且在AirtestIDE运行脚本时报这个错,请参考 ADB版本冲突问题
手机能够连接,但是设备画面旋向不对¶
请先勾选 use ADB orientation
选项后,再点击 connect
连接设备.
手机能够连接,但是无法点击屏幕¶
如果手机能正常连接到AirtestIDE,但是使用鼠标操作屏幕无响应,提示 minitouch 初始化失败
,请首先确认,手机设置中是否有 允许模拟点击位置 选项,并且处于激活状态(主要是MIUI手机有这个设置)
如果问题依旧,可以尝试先断开手机,在connect按钮的下拉菜单中勾选 Use ADB touch
。
然后再点击connect按钮连接手机,此时应该可以使用鼠标操作屏幕了。
若使用了 Use ADB touch
或 Use ADB orientation
(在部分初始化失败的设备、模拟器上,可能需要勾选此选项)才能成功连接手机设备的话,在使用命令行运行脚本时,也需要在 --device Android:///
连接字符串上,添加这两个参数对应的信息,详情请参考 第4章 运行脚本-部分安卓设备的特殊参数 章节。
如果遇到报错 Unable to open device /dev/input/event3 for inspectionopen: Permission denied
,可以运行指令 adb shell chmod 777 /dev/input/*
来赋予 /dev/input
目录权限(该操作可能需要手机root权限,如何使用adb shell请自行查询网上资料)
其他智能设备的支持问题¶
有部分电视盒子等智能设备,在接上AirtestIDE后可能会出现横竖屏显示错误,或是无法用鼠标点击屏幕的问题,可以参考上述2个问题的方案来解决:勾选 Use ADB touch
和 Use ADB orientation
选项,有可能可以解决。如果无法连接成功,可以联系开发组提供支持。
Airtest中的ADB版本冲突问题¶
在Windows环境中,运行Airtest脚本时,假如运行环境本地已经存在有 adb.exe
(例如装了android_sdk, 或者是别的工具带有adb.exe),并且ADB版本与Airtest中使用的不同,运行脚本时就可能会出现报错。我们会看到log中包含这样的语句:
adb server version (40) doesn't match this client (39); killing...
* daemon started successfully *
这是因为两个不同版本的ADB server同时运行导致的冲突(在这个log中,可以看到同时使用了40版本和39版本),解决办法是将本地所有的adb.exe统一成同样的版本就行。
- AirtestIDE用户:
- IDE中的adb.exe路径在
AirtestIDE/airtest/core/android/static/adb/windows/adb.exe
- 如果仅使用了IDE,没有使用本地python环境安装airtest的话,只需要保证本地其他应用、进程中使用的adb.exe是同一版本即可,建议使用windows的搜索功能全面搜索替换一遍
- IDE中的adb.exe路径在
- AirtestIDE+本地python运行的用户:
- 将想要使用的
adb.exe
拷贝覆盖掉本地python环境下安装的airtest(目录一般为python目录下的Lib\site-packages\airtest
)里的adb.exe,airtest中的路径为airtest/core/android/static/adb/windows/adb.exe
。 - win7用户请尽量统一选用ADB39版本,我们在IDE文件夹中提供了一个,
AirtestIDE/tools/adb39/adb.exe
,将它作为基准版本覆盖掉别的地方的adb即可 - win10用户可以直接拷贝IDE里的
AirtestIDE/airtest/core/android/static/adb/windows/adb.exe
,这是一个40版本的adb - 执行
adb.exe version
可以查看到版本号
- 将想要使用的
- 需要多线程运行的用户:
- 如果需要一边执行
.air
脚本,一边运行adb指令(例如采集adb信息),可以考虑使用airtest中的adb shell接口, 示例文档。 - 另外一个使用adb指令的代码范例
- 如果需要一边执行
如果替换过版本后还是频繁出现此报错,可以尝试在任务管理器中,右键点击当前的 adb.exe
,选择 打开文件位置
来确认adb所在文件夹。或者考虑进行全盘搜索,确认替换了所有的adb文件。