之前写过一篇帖子 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 编写的自动化的脚本成为可能。

1、安装 Termux

Termux 仅支持 Android 5.0 及以上版本。在国内建议使用F-Droid安装 Termux(先下载安装 F-Droid,再在 F-Droid 内部搜索 Termux,然后点击安装)

在桌面点击安装后的 Termux 图标,我们就启动了一个 Termux 应用,见下图:

(1)基本使用
(2)常用快捷键

音量 - 键模拟(Ctrl)键

音量-键(Ctrl)+L                清除屏幕内容
音量-键(Ctrl)+C                终止当前操作
音量-键(Ctrl)D                 退出当前会话session
音量+键+D                      Tab键(可自动补全命令或文件名)
音量+键+W                      方向键 上(可显示前一条命令)
音量+键+S                      方向键 下(可显示后一条命令)
音量+键+A                      方向键 左(可左移动光标)
音量+键+D                      方向键 右(可右移动光标)
音量+键+Q                      显示或关闭扩展键(ESC、插入链接CTR、ALT、TAB、-、/、|以及左滑扩展键一栏可切换到全功能支持手机输入法的输入框)

更多快捷按键参考官网介绍,有蓝牙键盘的读者可以参考硬件快捷键使用

(3)常用命令
apt update                    更新源
apt search <query>            全文搜索可安装包
apt install <package>         安装软件包
apt upgrade                   升级软件包
apt show  <package>           显示软件包的信息
apt list [--installed]        列出所有(或已安装)的软件包信息
apt remove <package>          删除软件包
chmod                         修改文件权限
chown                         修改文件归属

2、python&uiautomator2 安装

在安装好了 Termux 之后,需要配置好 python 的环境和安装好 uiautomator2 库,在终端执行下面 2 行命令就好了。

apt install python
pip install --pre uiautomator2

3、存储

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 来运行了。

4、运行脚本

在电脑上编写好测试的脚本(以网易云音乐为例),因为是直接在手机本地的,所以注意 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

看看运行的效果

参考资料:

基于 Termux 打造 Android 手机渗透神器
Hello,Termux


↙↙↙阅读原文可查看相关链接,并与作者交流