安卓手机运行 Python 脚本,实现手机操作自动化

2023-07-12 20:08:48 +08:00
 jiager

我看这个节点下正好有一个 python 操作安卓的帖子:

那我也分享下使用 python 控制安卓手机的操作,我这个方法无需电脑,只需要一部安卓手机即可操作。


这篇文章主要介绍如何在安卓手机上运行 python 代码从而控制安卓手机进行模拟操作的方法。仅适用于安卓 11 及以上系统。

文章由来:

文章的由来起源于我一个想法:我手上有一块闲置的 esp8266 单片机,想要用它来做一个手机小说翻页器,但是难点在于如何在手机上接收信号并模拟操作,而且 python 代码并不支持安卓系统运行。经过我的一番努力,找到了两种方式,并成功制作小说翻页器,一种方式就是本文中使用 python 控制手机,另一种是使用 auto.js 软件控制。

给大家看看我最终制作好的手机翻页器成品效果:

不过今天分享的仅仅是制作这个小工具的一环——如何实现使用 python 模拟手机操作

如果大家对这个手机小说翻页小工具的制作过程感兴趣的话,可以给我留言,感兴趣的人多的话,我写篇文章或者录个视频来分享这个工具的完整制作过程。

言归正传,接下来我们介绍使用 python 模拟手机操作的方法:此方法不是网上有些人说的用数据线连接电脑,然后再在电脑上运行 python 控制手机,而是仅需一部安卓手机,在安卓手机上运行 python ,从而控制手机

具体做法:

你可以直接看视频:

如何用 python 控制手机?

需要的工具:

实现原理:

shizuku 这个软件的作用是不用手机连接电脑也能在手机上使用 adb 命令。

termux 是一个模拟 linux 的软件,使用它可以运行 linux 命令。

使用 shizuku 赋予 termux 运行 adb 命令的权限,这一步需要按照 shizuku 的官方教程引导做,比较复杂,我这里省略。

然后在 termux 中运行 adb 命令来实现控制手机的效果。

简单模拟手机操作例子:

运行单条命令

在 termux 中安装好 python 后,比如在 python 中输入以下代码可以实现按下音量+的效果。

os.system("sh rish -c 'input keyevent 24'")

其中sh rish -c作用是使用 termux 启动一个拥有输入 adb 命令权限的终端窗口,-c 的作用是将后续的代码作为命令输入;input keyevent 24是 adb 命令,模拟按下音量+键。你也可以查询一些其它的 adb 命令比如"截屏","点击手机上某个坐标"等。

运行多条命令方法 1

os.system("sh rish -c 'input keyevent 24 && input keyevent 24'"

上述命令的效果是按下两次音量+键。&&符号的作用是运行完上面一条命令之后再运行后面的命令,和 windows 的 cmd 中的用法一样。

演示

运行多条命令方法 2

这种方法就是在 python 脚本中编写代码来实现,详细请参照本文第一个视频 5min 之后的部分。


欢迎大家分享大家知道的可以在安卓上使用 python 进行自动化操作的方法~

拜拜。

2825 次点击
所在节点    Python
10 条回复
DrLty
2023-07-12 21:14:18 +08:00
之前研究过 getevent 和 sendevent ,还是有点可以分享的。

触屏包括按键鼠标键盘都可以使用读写/dev/input/eventX 来实现,也可以通过 ioctl 来实现独占输入输出,还可以使用 uinput 创建虚拟触屏键盘鼠标。

adb 或者 root 就可以读写这些设备文件,所以我是用 golang 写的程序,编译后放在/data/local/tmp 下直接运行的。

这样相比较于 python 调用 adb 来控制效率更高点,而且还可以实现更多骚操作(多点触摸,虚拟设备,独占 io )

就是麻烦了点
Aoonthetop
2023-07-12 21:37:24 +08:00
你是否在寻找 "AirtestIDE" ?
coolloves
2023-07-13 09:11:46 +08:00
突然有点懵,在 termux 中不能直接执行 shell 吗?
jiager
2023-07-13 09:19:52 +08:00
@coolloves 直接在 termux 中输入"input keyevent 25"会报"command not found"的错误的,需要 sh rish 来启动一个 termux 授权的能运行 adb 命令的 shell
jiager
2023-07-13 09:31:53 +08:00
@jiager 我写错了,是一个 shizuku 授权的能运行 adb 命令的 shell
coolloves
2023-07-13 10:16:38 +08:00
@jiager shizuku 我记得这个授权重启就要掉的吧?期待 op 写一些实用的 demo,目前看,还是 auto.js 更方便
rev1si0n
2023-07-13 12:48:14 +08:00
yangyuhan12138
2023-07-13 16:20:03 +08:00
@Aoonthetop AirtestIDE 可以不依赖 adb 吗?或者说有没有什么办法让他跑在一台安卓手机上,不需要 wifi,usb 之类的东西
AndyChina
2023-07-13 18:30:36 +08:00
学习了
Aoonthetop
2023-07-14 11:26:10 +08:00
@yangyuhan12138 #8 不可以 运行 Python 脚本没问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/956266

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX