Android手机要想脱离PC直接运行UIAutomator2,就需要在Android上配置Python运行环境,选择主要有以下几个。
- QPython
- pydroid3
- Termux
首先,网上的几篇关于在Android上安装QPython运行UIAutomator的教程走不通,site-packages下的文件倒是可以正常push过去,但是启动脚本时报错 can not import '_imaging'
,这是Pillow7.1.2的问题,Python版本是Python 3.6/3.7/3.8,多番尝试无果。放弃之。
pydroind3也尝试了,报同样的错误,通过它自带的pip来安装uiautomator2也失败,各种库缺失而且没法装,也放弃。
原因在于不管是QPython还是pydroid3,对Python的支持都不足,某些依赖包死活装不上。
最后尝试Termux。
首先搜索下载Termux,并通过abd install
或别的途径装到手机上去。
启动Termux,安装python
# 更新资源
pkg update
pkg upgrade
# 安装python
pkg install python
如果下载较慢,多是因为国内网络的问题,自行搜索解决。
安装完之后,执行python
进入Python解释器,可以看到Python版本。
接下来,直接安装UIAutoMator2,但是会报错,根据提示安装所需的库
apt install libxml libxslt
安装完之后继续,还是会报错,问题还是出在pillow上,the header or library files could not found for jpeg
,需要安装jpeg库,可用的只有libjpeg-turbo
,其它的仓库里没有。
apt install libjpeg-turbo
安装完之后再重新执行
pip install --upgrade --pre uiautomator2
这次就没问题了。
如果要脱离电脑运行,需要先在电脑上初始化uiautomator2,手机连上电脑,在电脑上执行
python -m uiautomator2 init
由于atx-agent被push到了/data/local/tmp/atx-agent
,因为Termux访问不了这个文件,所以之后每次重启手机时都要在电脑来启动它
# adb shell /data/local/tmp/atx-agent version #查看版本号
adb shell /data/local/tmp/atx-agent server -d #启动并后台运行
或者,把atx-agent移动到Termux能访问到的地方,比如$HOME
下,再给它加上755权限,在手机上是不是就能启动它了?想想就激动啊!
答案是:不行!
通过adb启动,atx-agent获得的是root权限,可以唤起APP而无需鉴权,如果在Termux启动,相当于在一个子系统里启动,它获得的权限等同于Termux的普通APP权限,是不能随便操作其它APP的。
这么说的话其实也并没有完全脱离电脑,只是初始化完成后再在手机里运行就不需要电脑了。
接下来就是执行我们的脚本了。
把脚本通过一定的方式存储到手机里,假定命名为myscript.py
,执行
python myscript.py
有一点需要注意,通过PC连接设备时,直接使用d = u2.connect()
即可,但在手机里运行时会报错没有adb exe
,这是因为这种连接方式是默认的usb连接,需要adb
,改成如下格式
d = u2.connect("127.0.0.1:7912")
就可以正常运行了。
每次运行都要借助ADB,所以要么连USB很麻烦,如果atx-agent开启了就没有这个问题,但是数据线拔掉就没法运行了,所以没有真正脱离PC
atx-agent可以通过局域网连接