ATX uiautomator2 init 失败及其他问题的解决办法

linpengcheng · 2018年12月13日 · 最后由 linpengcheng 回复于 2024年03月26日 · 11138 次阅读
设备使用本地文件执行 init

下载地址:https://share.weiyun.com/5nNDyET

最近在群里发现好多同学在执行uiautomator2 init的时候,总是出各种错误。在这里需要总结下,以免新来的同学掉到坑里。

首先看一下 init 的源代码:

def _init_with_serial(self, serial, server, apk_version, agent_version,
                      reinstall, ignore_apk_check):
    log.info("Device(%s) initialing ...", serial)
    ins = Installer(serial)
    ins.server_addr = server
    ins.install_minicap()
    ins.install_minitouch()
    ins.install_uiautomator_apk(apk_version, reinstall)

    log.info("atx-agent is already running, force stop")
    ins.shell("/data/local/tmp/atx-agent", "-stop", raise_error=False)
    ins.shell("killall", "atx-agent", raise_error=False)
    ins.shell("rm", "/sdcard/atx-agent.pid", raise_error=False)
    ins.shell("rm", "/sdcard/atx-agent.log.old", raise_error=False)
    if not ins.check_agent_installed(agent_version):
        ins.install_atx_agent(agent_version, reinstall)

    if not ignore_apk_check:
        ins.check_apk_installed(apk_version)
    ins.launch_and_check()

很容易看懂,最主要的就是这几行

ins.install_minicap()
ins.install_minitouch()
ins.install_uiautomator_apk(apk_version, reinstall)
ins.check_apk_installed(apk_version)

就是往手机了装了 4 个东西minicap minitouch uiautomator_apk atx-agent ,其实是 5 个东西 uiautomator_apk安装了app-uiautomator.apkapp-uiautomator-test.apk两个 apk

下面将大家经常遇到的几个问题总结下

1、等了好长时间没反应,提示 404,安装失败 ,package com.github.uiautomator.test not installed

不要慌,其实由于好多同学网络的原因,导致上面所说的 5 个东西总是下载失败才会出现这样的错误的。一般都是uiautomator_apk没有下载下来造成的。
解决的办法:手动去这个地址下载和你本地 uiautomator2 版本匹配的 apk,https://github.com/openatx/android-uiautomator-server/releases
然后手动安装上去 ,再执行一下python -m uiautomator2 init看看(uiautomator2 版本匹配可以在 pip 安装的 uiautomator2 的目录下有个versiopn.py的文件里可以看到)

2、我启动了 atx-server 手机也 init 好了 但是 atx-server 上没有出现设备啊

请先确定你手机 init 的时候,后面跟着的 server 的地址是对的 例如你 atx-serve 的地址是10.0.12.34:8000
那么你执行 init 命令就应该是:python -m uiautomator2 init 10.0.12.34:8000 确保你后面 8000 的端口号没忘记。
然后看一下你的手机的 wifi 有没有和电脑连在同一个网下面。如果还是没有出来,就再执行一下上面的那个 init 的命令
以上都是针对真机的,如果你用的是模拟器的话,建议你还是换一个真机来试一试。也不太明白为什么拿模拟器连 atx-serve....

3、我 init 之后 atx-serve 上出现设备了,点击手机的画面出不来,点操作也没反应

atx-serve 设备点击 use 之后画面的实时展示和可操作都是依赖minicap minitouch 的,应该是这两个没有安装成功造成的。
再重新 init 之后试试看,实在不行就手机重启之后,再 init 一下试试看。
以上也是针对真机的,模拟器的话,minicap 就是不支持的,init 成功了也没用,建议换真机

4、我用 weditor 来定位元素的时候,画面出不来啊

和 3 的问题一个原因,真机的话重新 init;模拟器的话,minicap 就是不支持的,init 成功了也没用,建议换真机

5、我的手机 init 总是提示安装失败

先看一下你手机是什么牌子的,看看你直接执行 adb install 安装能不能正常安装成功
比如小米的,需要在开发者选项里打开两个选项(就是 usb 选项下第一个和第二个,叫啥名字忘记了)
比如 OPPO、VIVO 的手机,init 安装的时候需要手动确认输密码
还有其他很多安卓手机,各种各样的问题自己慢慢摸索吧

6、大佬,XXX 怎么搞得,发我一份

自己看文档去....
https://github.com/openatx/uiautomator2

之前的 Q&AATX 项目 Question and Answers (FAQ) QQ 群消息问答部分汇总

--------😄 😆 😵 😭 😰 😅 分割线 😢 😤 😍 ☺ 😎 😩--------

针对第一个下载不成功的问题,我把 init 的代码中下载的部分全部改成了使用本地文件了
所有需要下载的文件都已经下载好了

如果 atx-agent 和 auiautomator_apk 的版本更新了的话,去 U2.py 下改一下版本号,然后把新版的文件下载下来放到和版本号重名的文件夹里面就行了
uiautomator_apk 下载地址
atx-agent 下载地址
minicup&minitouch 下载地址

使用方法和原来的 init 类似,解压压缩包之后,命令行 cd 到这个文件夹下后,执行命令python -m U2 init就行了

下载地址:https://share.weiyun.com/5nNDyET

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 17 条回复 时间 点赞

安装 appium 时,自带了 uiautomator2 ,这时候如果使用 uiautomator2 还是失败的话,有可能是安装或使用 appium 的时候权限不够,导致 uiautomator2 _apk 安装失败,查看 uiautomator2_apk 是否安装成功,可以通过查看 apk 的大小来确认。

虽然使用 atx 时没遇到上面这么多的问题,但是还是要对楼主说句:谢谢!



用三星 pad 作为真机,项目需要修改分辨率,weditor 元素页面无法正确展示怎么办?

Rommy 回复

卸载 weditor 然后pip install weditor==0.1.0看看,
三星的需要到 设置 - 显示 - 屏幕分辨率调整下

Rommy 回复

你这个是游戏的界面吧 有的游戏界面是用 uiautomator 定位不到元素的

最近也在玩 uiautomator2,也碰到了些问题。

刨去网络问题,装个 0.1.7 版本 init 基本就稳定了。

但是有个问题就是,我手上 4 台手机,同样的自动化,在其中 2 台,跑着跑着,uiautomator server 就挂掉了,client 这边就报 read timeout 了。
再次执行 healthcheck() 后恢复,但是就有点耗时了和不稳定了。
来不及看源码, @codeskyblue 可以知晓下😉

linpengcheng 回复

还是一样。。。 不是游戏页面 是应用

大东 回复

你把复现方法告诉我,我就能修好

codeskyblue 回复

应该是特定设备的问题。 两台华为 P20 Lite。

就是普通的运行,跑着跑着调用 d.info 或者其他接口就 timeout 了。

大神,我输入 python -m uiautomator2 init,可以正常执行,但是在网页上找不到设备,我输入 python -m uiautomator2 init 192.168.1.102:8000,直接会报错:main.py: error: unrecognized arguments: 192.168.1.102:8000,这是什么情况?

乱斗东 回复

看你的 192.168.1.102:8000 是不是有中文字符(:), 正常的英文字符应该是 192.168.1.102:8000

Jerry li 回复

哥,检查过了都是英文输入,是不是新版本有变动?

乱斗东 回复

同样的问题,有解决吗

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