之前写过一篇帖子 ATX-uiautomator2 使用 QPython 在 Android 手机内执行自动化
通过 qpython 来实现手机内执行 python 脚本运行 UI 自动化,但是 qpython 是直接将 uiautomator2 的整个库文件夹 push 到手机,在安装 pip 相关依赖包的时候也挺麻烦的。
后来发现了一个 Android 端的神器-- Termux
Termux 是一款开源且不需要 root,运行在 Android 终端上极其强大的 linux 模拟器,支持 apt 管理软件包,完美支持 python,ruby,go,nodejs。
通过 termux 可以安装好 python 环境 下载需要的 pip 库,使得在手机端可以直接运行起来 python 编写的自动化的脚本成为可能。
Termux 仅支持 Android 5.0 及以上版本。在国内建议使用F-Droid安装 Termux(先下载安装 F-Droid,再在 F-Droid 内部搜索 Termux,然后点击安装)
在桌面点击安装后的 Termux 图标,我们就启动了一个 Termux 应用,见下图:
音量 - 键模拟(Ctrl)键
音量-键(Ctrl)+L 清除屏幕内容
音量-键(Ctrl)+C 终止当前操作
音量-键(Ctrl)D 退出当前会话session
音量+键+D Tab键(可自动补全命令或文件名)
音量+键+W 方向键 上(可显示前一条命令)
音量+键+S 方向键 下(可显示后一条命令)
音量+键+A 方向键 左(可左移动光标)
音量+键+D 方向键 右(可右移动光标)
音量+键+Q 显示或关闭扩展键(ESC、插入链接CTR、ALT、TAB、-、/、|以及左滑扩展键一栏可切换到全功能支持手机输入法的输入框)
更多快捷按键参考官网介绍,有蓝牙键盘的读者可以参考硬件快捷键使用
apt update 更新源
apt search <query> 全文搜索可安装包
apt install <package> 安装软件包
apt upgrade 升级软件包
apt show <package> 显示软件包的信息
apt list [--installed] 列出所有(或已安装)的软件包信息
apt remove <package> 删除软件包
chmod 修改文件权限
chown 修改文件归属
在安装好了 Termux 之后,需要配置好 python 的环境和安装好 uiautomator2 库,在终端执行下面 2 行命令就好了。
apt install python
pip install --pre uiautomator2
termux 执行命令的路径是私有的内部存储 (private internal storage),这类存储的特点是 termux 应用内部的、私有的,一旦 termux 被卸载,这些数据也将不复存在。Android 下还有另外两种存储类型:shared internal storage 和 external storage。所谓 shared internal storage 是手机上所有 App 可以共享的存储空间,放在这个空间内的数据不会因为 App 被卸载掉而被删除掉;而外部存储 (external storage) 主要是指外部插入的 SD Card 的存储空间。默认情况下,Termux 只支持 private internal storage。
那么,想要让写的脚本在 termux 上执行起来改怎么办呢,总不能直接用 termux 来写 python 的脚本吧。
Termux 提供了一个名为termux-setup-storage的工具,可以让你在 Termux 下访问和使用 shared internal storage 和 external storage;该工具是termux-tools的一部分,你可以通过apt install termux-tools
来安装这些工具。
执行termux-setup-storage
(注意:这个命令只能在手机上执行才能弹出授权对话框,通过远程 ssh 登录后执行没有任何效果) 时,手机会弹出一个对话框,让你确认授权.
一旦授权,termux-setup-storage 就会在 HOME 目录下建立一个 storage 目录,该目录下的结构如下:
➜ /data/data/com.termux/files/home $tree storage
storage
├── dcim -> /storage/emulated/0/DCIM
├── downloads -> /storage/emulated/0/Download
├── movies -> /storage/emulated/0/Movies
├── music -> /storage/emulated/0/Music
├── pictures -> /storage/emulated/0/Pictures
└── shared -> /storage/emulated/0
6 directories, 0 files
可以看到 termux 下,termux-setup-storage 在 storage 下建立了 6 个符号链接,其中 shared 指向 shared internal storage 的根目录,即/storage/emulated/0;其余几个分别指向 shared 下的若干功能目录,比如:相册、音乐、电影、下载等。
这样一来,在电脑上写好的 python 脚本文件,直接 push 到手机之后,就可以通过 termux 来运行了。
在电脑上编写好测试的脚本(以网易云音乐为例),因为是直接在手机本地的,所以注意 ip 需要修改成为0.0.0.0
import uiautomator2 as u2
def main():
u = u2.connect('0.0.0.0')
print(u.info)
u.app_start('com.netease.cloudmusic')
u(text='私人FM').click()
u(description='转到上一层级').click()
u(text='每日推荐').click()
u(description='转到上一层级').click()
u(text='歌单').click()
u(description='转到上一层级').click()
if __name__ == '__main__':
main()
然后将这个脚本文件 push 到手机中,然后在 termux 中执行这个 python 文件就 ok 了
前置条件: 手机通过 uiautomator2 init 成功 且 atx-agent 仍然可正常连接
cd storage
cd shared
python termuxdemo.py
看看运行的效果
参考资料: