Skip to content

2.2 Android连接常见问题

注解

若以下内容未能解决您的问题,请移步 AirtestIDE Issues 页面,将手机型号、错误log以及问题描述进行提交,我们会尽快修复。

1. 问题自查

关闭手机助手类软件

请务必确认当前环境下没有其他第三方 手机助手 类软件正在运行,如果有,请完全退出(并确认任务管理器中没有相关进程依然残留,大部分手机助手需要在任务管理器中手工终止进程才能完全退出)后再试一次。

确认手机设置

请确保手机中的开发者选项里,允许USB调试选项是开启状态,部分手机在连上USB线后需要选择MTP模式进行连接。

如果在AirtestIDE的设备列表中,看到设备状态是unauthorized,如图:

image

请在手机上点击确认允许USB调试选项,可以勾选一律允许使用这台计算机进行调试,避免以后的重复操作:

image

确认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卡),若没有正确打开这些选项,可能会导致小米手机无法连接的问题。

image

如果尝试打开图示2个选项,但是打开后提示 被临时限制 而无法打开,可以试下退出当前小米账号, 重新插入另一张有效sim卡,然后登录当前sim卡号码注册的小米账号,一般就能再次打开了。

另外,部分型号的小米还需要禁用掉下述设置才可以正常连接:

① 开发者选项底部的 “启用MIUI优化” 需要 禁用 掉:

image

② 手机管家-应用管理-权限-右上角的设置- “应用权限监控” 和 “USB安装管理” ,这俩个设置也需要 禁用

image

image

image

image

特别注意:如果你的小米已经更新到MIUI11,你需要在点击 connect 按钮之前,勾选 use Javacap + use orientation 这两个选项后才能使用;使用本地环境跑脚本时,也要注意将这俩个连接参数加入到运行命令中。

③ 开发者选项中,关掉“高风险提示”。

MIUI论坛关于USB安装调试的说明
如果出现点击手机屏幕会报错、无法点击手机屏幕的问题,请确认小米设置中的 允许模拟点击位置 选项已经打开。

部分小米手机在连接失败时,报错 Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user] ,是因为在Airtest试图向手机中安装apk但是被手机自动拦截了。除了上述开发者选项中需要注意开启 允许通过USB安装应用 之外,还可以查看手机设置-》授权管理-》USB安装管理-》去掉USB安装应用的相关限制。

部分小米手机无法成功安装yosemite输入法,在初始化poco时报以下错误:

image

在系统设置的语言和输入法中,取消安全键盘的选中状态:

image

三星

1.显示-屏幕分辨率调到最大:

如下图所示,部分手机设备(如部分型号三星手机)在连上AirtestIDE后,显示出的手机画面不能撑满整个屏幕,请在“设置”-“显示”中将“屏幕分辨率”调至 “WQHD

image

2.在开发者选项中,打开未知来源、取消权限监控。

华为

1.输入法设置中,取消安全输入
2.开发者选项->监控ADB安装应用取消,打开仅充电模式下允许调试
3.权限监控->设置->自动配置权限
4.部分华为型号的手机,可能出现点击位置与实际位置不符的情况(mate20pro, mate7等),需要在 设置 - 显示 - 屏幕分辨率 中,将分辨率设置为最高即可。

image

5.如果华为手机出现poco在启动后十几秒内自动断开的话,可以检查一下手机管家的版本号是否大于8.0,如果是的话,就在手机管家->启动管理里面,找到pocoservice,勾选允许自启动和允许后台活动。
image image

vivo

1.取消安全输入,如果遇到Poco初始化失败、text接口无法调用的问题,可以在输入法设置中将Yosemite输入法设置为默认:

image

2.部分机型需要 在开发者选项中打开安全权限 ,否则可能在初始化poco的时候看到以下报错:

image

3.如果vivo输密码的时候出现黑屏,可以在尝试把安全性设置里的 安全键盘 关闭掉再重试。如果没找到 安全键盘 的设置,可以找一下vivo的设置->安全与隐私-> 防止恶意截屏录屏 ,然后把防止恶意截屏录屏关掉就好了。

4.如果有 usb模拟点击 选项的话,一定要点开,否则运行脚本可能会报错:

image

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调试,识别序列号:

image

另外还需要在开发者选项中勾选允许模仿位置:

image

一加

一加手机在使用poco的时候,会出现重复安装的问题,报错如下:

image

此时需要将pocoservice.apk的电池优化关掉,改成“不优化”:

image

3. 全面屏问题

IDE 位置发生偏移

在一些不支持全面屏手机的app,画面不能充满整个屏幕的时候,出现黑边,poco定位发生偏移。最新版IDE已修复该问题,只需在Poco辅助窗点击 “Stop” ,然后重新连接,即可切换为当前画面渲染分辨率。

image

IDE 自定义渲染分辨率

AirtestIDE 可适应90%以上全面屏不适配的问题, 对于剩下未支持的10%手机, IDE支持用户自定义设置渲染分辨率.

image

勾选采用渲染分辨率,然后输入竖屏模式下的渲染分辨率,点击OK即可. 渲染分辨率为用逗号隔开的四个数字,数字分别代表竖屏模式下的 offset_x, offset_y, offset_width, offset_heigt.

比如本例中在 1080*2220 分辨率下的大鱼来了,它在手机上会有两个黑边,上黑边高度为 100px ,画面高度为2020px ,下黑边高度为 100px ,所以它的渲染分辨率则为(0 ,100 ,1080 ,2020)

image

脚本运行发生偏移

当app不支持全面屏,出现黑边,运行poco点击的脚本的时候,会发生偏移,像下图执行 poco("PauseButton").click() 一样,实际点击位置不符合预期。

image

确保当前poco或IDE为最新版本,关闭下图的 虚拟键盘,然后在脚本中调用 poco.use_render_resolution() , 让poco切换为当前画面渲染分辨率,运行脚本,即可准确点击。

image

对于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()会无法输入内容,所以需要手动关闭安全输入选项后,才能正常输入密码内容:

image

另外有部分VIVO手机,在脚本点击到输入密码窗口的时候,IDE的可视化窗口可能会卡死,不会实时更新手机屏幕画面,导致脚本会报找不到图片的错误。

这时候可以关闭手机上防恶意截录屏选项和安全输入选项,就不会出现脚本点击到输入密码框时,IDE可视化窗口卡死的情况:

image

是否支持模拟器、IOS

目前已支持模拟器,目前有两种连接方式:

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已停止工作弹窗

image

一般是手机助手强占adb导致,请关闭手机助手,确保adb.exe进程、手机助手相关进程不在后台,再进行重试。

这个问题的主要原因是,本地可能存在多个版本的 adb.exe ,导致启动时会相互冲突,如果本地Python环境中安装了airtest,且在AirtestIDE运行脚本时报这个错,请参考 ADB版本冲突问题

手机能够连接,但是设备画面旋向不对

image

请先勾选 use ADB orientation 选项后,再点击 connect连接设备.

image

手机能够连接,但是无法点击屏幕

如果手机能正常连接到AirtestIDE,但是使用鼠标操作屏幕无响应,提示 minitouch 初始化失败 ,请首先确认,手机设置中是否有 允许模拟点击位置 选项,并且处于激活状态(主要是MIUI手机有这个设置)

如果问题依旧,可以尝试先断开手机,在connect按钮的下拉菜单中勾选 Use ADB touch

image

然后再点击connect按钮连接手机,此时应该可以使用鼠标操作屏幕了。

若使用了 Use ADB touchUse 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 touchUse 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的搜索功能全面搜索替换一遍
  • 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 可以查看到版本号
  • 需要多线程运行的用户:

如果替换过版本后还是频繁出现此报错,可以尝试在任务管理器中,右键点击当前的 adb.exe,选择 打开文件位置 来确认adb所在文件夹。或者考虑进行全盘搜索,确认替换了所有的adb文件。