2.2 Android连接常见问题

注解

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

1. 问题自查

关闭手机助手类软件

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

设备兼容性

我们已经对当前市面上大部分用户使用的机型做了兼容性测试,请查看 已确认机型列表 确认自己的手机是否兼容。

如果您使用的手机不在列表中,请将手机型号、错误log以及问题描述 提交issue

如果您使用的手机在列表当中显示兼容,但实际使用中遇到了问题,请继续查阅文档进行问题排查。

确认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安装和操作相关的选项,部分型号设备需要选择取消权限监控等)

如果输入adb devices后能够正确出现手机设备号信息,但在AirtestIDE中依然不能正确连接和操作手机画面,请将手机型号、错误log以及问题描述 提交issue

下方的指引中提供了部分厂商的设置可能需要注意的地方,请大家先根据自己的手机型号排查问题,确认无法搞定后再到github上提交issue。

2. 部分厂商设备特殊问题

这里列出了部分厂商特殊机型的设置,请根据自己的手机型号查看是否有对应选项需要打开。

小米

请在“开发者选项”中将“允许模拟点击位置”、“USB安装”、“USB调试(安全设置)”等选项打开,部分选项的开启可能需要 登录MIUI账号 (需要插入SIM卡),若没有正确打开这些选项,可能会导致小米手机无法连接的问题。

../_images/miui_settings_usb.png

MIUI论坛关于USB安装调试的说明

如果出现点击手机屏幕会报错、无法点击手机屏幕的问题,请确认小米设置中的 允许模拟点击位置 选项已经打开。

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

三星

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

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

../_images/samsung_phone.png
  1. 在开发者选项中,打开未知来源、取消权限监控。

华为

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

vivo

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

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

    ../_images/vivo_settings.png

OPPO

  1. 开发者选项的最底部,勾选 禁止监控权限
  2. OPPO部分机型在每次安装APK时都需要输入密码:暂无更靠谱的解决方案,有一个帖子可以供参考 [收集帖] 各厂手机不能自动化的坑和解决方案
  3. 部分OPPO机型在初始化Poco时,或者调用 text() 接口时,会失败报错,原因可能是因为安装或者切换Yosemite输入法失败(需要输入OPPO账号密码才能切换)。此时可以先到系统设置-输入法设置里,将Yosemite输入法设置为默认输入法,如果尚未安装Yosemite输入法,可以在 AirtestIDE\airtest\core\android\static\apks 目录下找到它并且手工安装到手机上之后,即可开始使用Poco功能以及 text() 接口。

魅族

魅族手机部分型号无法直接通过ADB进行连接,具体解决方案请参照这个 帖子

3. 其他常见问题

部分设备“返回”-“主页”-“菜单”等按钮失效

  • 部分设备不能正确响应一些系统按钮操作,例如 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()接口无法在密码框中输入密码

部分厂商(例如华为、VIVO等)的某些型号手机限制了密码框的输入,强制在输入密码时必须使用 系统键盘输入 。这样会导致需要输入密码时,直接使用airtest的text()会无法输入内容,需要把以下选项打开后才能正常输入密码内容:

../_images/huawei_password.png

是否支持模拟器、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的设备,执行步骤②

  1. 执行操作:
  1. 执行热键 Windows + R
  2. 输入 “services.msc”
  3. 停止 BlueStacks Android Service

频繁出现adb.exe已停止工作弹窗

../_images/adb_crash.png

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

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

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

../_images/phone_ori_wrong.png

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

../_images/phone_use_adb_ori_init.png

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

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

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

../_images/phone_use_adb_touch.png

然后再点击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文件。