三、Android连接常见问题

注解

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

1. 问题自查

1)关闭手机助手类软件

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

2)确认手机设置

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

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

image

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

image

3)确认ADB是否能够正常连接到手机

如果在AirtestIDE的设备列表窗中看不到你的设备号,请先确认手机是否能正常连接ADB:

  • windows系统下:

用USB线连好手机后,进入AirtestIDE文件夹,在 AirtestIDE/airtest/core/android/static/adb/windows 目录下 按住shift+鼠标右键 打开命令行终端,输入 adb.exe devices

  • mac系统下:

在解压dmg后会提示你将应用安装至Application/文件夹,因此可以在终端命令行中,cdApplication/AirtestIDE.app/Contents/MacOS/airtest/core/android/static/adb/mac目录下,运行 ./adb devices

正常情况下,应该得到的返回内容示例:

  1. >adb.exe devices
  2. List of devices attached
  3. JTJ4C15A30048654(手机的设备号) device

如果未能正常出现上述输入,需要检查以下几个方面:

  • 如果看不到 设备号 device 这一行,需要检查电脑上是否已经安装了该款手机的对应 官方驱动软件 ,如果尚未安装驱动的话就检测不到手机。请自行查阅手机品牌官网,下载官方驱动进行安装。
  • 建议尽量 使用机箱背面的USB接口 ,主机正面的USB接口可能稳定性较差
  • 手机上需要将 开发者选项 开启,并开启 USB调试 选项,并且在接入电脑时,选择 允许该PC对设备进行调试,否则手机状态为 unauthorized 是无法连接的
  • 务必再三确认电脑上所有手机助手类型的软件均已关闭,且进程都已完全退出(大部分手机助手都需要手工在任务管理器里终止进程)
  • 如执行 adb devices 之后出现类似这样的提示 adb server version (40) doesn't match this client (39); killing... ,则表明当前环境存在多个版本的ADB,请务必将本机的ADB版本统一之后再来尝试

ADB 是Google官方提供的Android调试工具,由于AirtestIDE与相关的库都需要依赖ADB操作,因此如果无法通过 adb devices 看到自己的设备的话,就无法继续使用AirtestIDE,请务必确认手机能够正确连接到PC。

4)确认Airtest相关文件能够正常安装到手机

若能够在 adb devices 指令的返回结果中看到自己的设备,但是无法使用AirtestIDE连接手机,可以继续检查以下几个方面:

  • 在设备接入IDE进行初始化时,还会在手机上安装一个 Yosemite.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。

5)查看已确认机型列表

我们已经对当前市面上大部分用户使用的机型做了兼容性测试,请查看 已确认机型列表 确认自己的手机是否兼容(由于设备更新换代速度很快,该列表已经很久没有维护,但是目前市面上大多数手机都是可兼容的,开发组也一直在努力兼容新的机型)。

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

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

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

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

1)小米

小米

  • 开启 允许模拟点击位置USB安装USB调试(安全设置) 等选项
  • 禁用 启用MIUI优化应用权限监控” 和 USB安装管理 等选项
  • 部分MIUI11或以上版本的设备,需勾选 use Javacap + use orientation 这两个选项
  • 关掉 高风险提示 设置
  • 打开 允许模拟点击位置 设置
  • 取消 安全键盘 设置

① 请在“开发者选项”中将“允许模拟点击位置”、“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

2)三星

三星

  • 屏幕分辨率调到最大 WQHD
  • 取消 权限监控

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

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

image

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

3)华为

华为

  • 取消 安全输入、或者关闭 安全键盘
  • 取消 监控ADB安装应用锁屏
  • 打开 仅充电模式下允许调试自动配置权限保持唤醒
  • 屏幕分辨率调到最高 WQHD+
  • 勾选pocoservice的 允许自启动允许后台活动

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

image

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

image image

4)vivo

vivo

  • 取消 安全输入 ,设置Yosemite为默认输入法
  • 打开 安全权限usb模拟点击
  • 关闭 安全键盘或者安全输入防止恶意截屏录屏
  • 打开 不锁定屏幕

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

image

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

image

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

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

image

⑤ 如果出现vivo手机长时间连接会出现自动关闭开发者选项的问题,可以在开发者选项里选择 不锁定屏幕 来解决。

5)OPPO

OPPO

  • 打开 禁止权限监控不使用锁屏充电不休眠
  • 输入法安装失败可选择手动安装,并且设置Yosemite为默认输入法
  • 打开 pocoservice的允许完全后台行为允许应用自启动
  • USB连接模式选 文件模式
  • 关闭 USB验证应用安全键盘防止恶意截屏录屏

① 开发者选项的最底部,勾选 禁止监控权限

② OPPO部分机型在每次安装APK时都需要输入密码:暂无更靠谱的解决方案,有一个帖子可以供参考 [收集帖] 各厂手机不能自动化的坑和解决方案

③ 部分OPPO机型在初始化Poco时,或者调用 text() 接口时,会失败报错,原因可能是因为安装或者切换Yosemite输入法失败(需要输入OPPO账号密码才能切换)。此时可以先到系统设置-输入法设置里,将Yosemite输入法设置为默认输入法,如果尚未安装Yosemite输入法,可以在 AirtestIDE\airtest\core\android\static\apks 目录下找到它并且手工安装到手机上之后,即可开始使用Poco功能以及 text() 接口。

④ 如OPPO出现10分钟断连的情况,不要插拔手机,直接在屏幕上方下拉的选项里再次打开 USB调试 ,一般就不会再断开了。

⑤ 在 电池-后台高耗电-> PocoService 开启,这样能有效避免poco不断重启的问题,并且OPPO部分机型还要在pocoservice的应用中开启 允许完全后台行为允许应用自启动 设置。

image-20210918111144807

⑥ 如输入密码时出现黑屏,请注意关闭 安全键盘防止恶意截屏录屏 等设置

6) 魅族

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

7)LG

LG

  • USB连接模式选择 充电模式
  • 打开 允许模仿位置
  • pocoservice和Yosemite的电池优化选择 不优化

LG手机需要选择充电模式才能正确打开USB调试,识别序列号:

image

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

image

8) 一加

一加

  • pocoservice和Yosemite的电池优化选择 不优化

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

image

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

image

3. 设备的全面屏问题

1)IDE 位置发生偏移

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

image

2)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

3)脚本运行发生偏移

当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. 其他常见问题

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

  • 部分设备不能正确响应一些系统按钮操作,例如 HOME、BACK等:

    • vivo Y55A

    • vivo Y67

    • vivo X20 Plus(屏幕指纹版)

    • 红米 3X (Redmi 3X)

    • 小米 5C (Xiaomi 5C)

    更多机型请参阅 设备兼容性 章节。

  • 部分机型由于系统定制原因,text输入文字时,会发生脚本异常退出问题:

    • vivo Y55A

    请在脚本内自行 catch 错误,或使用 poco("xxx").set_text("input")

2)使用text()接口无法在密码框中输入密码或出现IDE窗口卡死

部分厂商(例如华为、VIVO等)的某些型号手机限制了密码框的输入。这部分手机设置内的安全选项默认是开启状态,所以强制在输入密码时必须使用 系统键盘输入 (即安全输入键盘)。这样会导致需要输入密码时,直接使用airtest的text()会无法输入内容,所以需要手动关闭安全输入选项后,才能正常输入密码内容:

image

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

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

image

3)是否支持模拟器、IOS

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

iOS的连接也已经支持,详见iOS-连接

若模拟器在连接过程中出现屏幕黑屏,可在连接设备前,勾选connect下拉菜单中的 use javacap 选项,再进行连接即可正常看到模拟器画面。

4)刷出重复设备

刷新时发现两台同样的设备,状态各为device和offline。

一般因为开启了手机助手,关掉后再次刷新即可。

5)未运行模拟器时刷出了emulator-5554设备

原因:模拟器打开5554端口后,adb只要检测到这个端口打开,会认为存在设备。

参考处理连接

以Windows7系统为例:

  • 进入AirtestIDE/airtest/core/android/static/adb/windows文件夹 Shift+右键,进入命令窗口,输入 “adb.exe devices”

  • 如果出现 emulator-5554的设备,则执行下述操作:

  1. a. 执行热键 Windows + R
  2. b. 输入 "services.msc"
  3. c. 停止 BlueStacks Android Service

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

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

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

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

先确保使用的AirtestIDE为最新版本,如非最新版本,请更新IDE之后再尝试重新连接旋转异常的设备:

image

如已确认是最新版本的IDE,请先勾选 use ADB orientation 选项后,再点击 connect连接设备.

image

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

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

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

image

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

若使用了 Use ADB touchUse ADB orientation (在部分初始化失败的设备、模拟器上,可能需要勾选此选项)才能成功连接手机设备的话,在使用命令行运行脚本时,也需要在 --device Android:/// 连接字符串上,添加这两个参数对应的信息,详情请参考 运行脚本-部分安卓设备的特殊参数 章节。

如果遇到报错 Unable to open device /dev/input/event3 for inspectionopen: Permission denied ,可以运行指令 adb shell chmod 777 /dev/input/*来赋予 /dev/input 目录权限(该操作可能需要手机root权限,如何使用 adb shell 请自行查询网上资料)

9)其他智能设备的支持问题

有部分电视盒子等智能设备,在接上AirtestIDE后可能会出现横竖屏显示错误,或是无法用鼠标点击屏幕的问题,可以参考上述2个问题的方案来解决:勾选 Use ADB touchUse ADB orientation 选项,有可能可以解决。如果无法连接成功,可以联系开发组提供支持。

10)Airtest中的ADB版本冲突问题

在Windows环境中,运行Airtest脚本时,假如运行环境本地已经存在有 adb.exe (例如装了android_sdk, 或者是别的工具带有adb.exe),并且ADB版本与Airtest中使用的不同,运行脚本时就可能会出现报错。我们会看到log中包含这样的语句:

  1. adb server version (40) doesn't match this client (39); killing...
  2. * 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文件。