V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
jiager
V2EX  ›  Python

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

  •  
  •   jiager · 2023-07-12 20:08:48 +08:00 · 2881 次点击
    这是一个创建于 534 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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


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

    文章由来:

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

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

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

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

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

    具体做法:

    你可以直接看视频:

    如何用 python 控制手机?

    需要的工具:

    • termux (安卓软件,自行搜索下载)
    • shizuku (安卓软件,自行下载)

    实现原理:

    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 进行自动化操作的方法~

    拜拜。

    10 条回复    2023-07-14 11:26:10 +08:00
    DrLty
        1
    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
        2
    Aoonthetop  
       2023-07-12 21:37:24 +08:00
    你是否在寻找 "AirtestIDE" ?
    coolloves
        3
    coolloves  
       2023-07-13 09:11:46 +08:00
    突然有点懵,在 termux 中不能直接执行 shell 吗?
    jiager
        4
    jiager  
    OP
       2023-07-13 09:19:52 +08:00
    @coolloves 直接在 termux 中输入"input keyevent 25"会报"command not found"的错误的,需要 sh rish 来启动一个 termux 授权的能运行 adb 命令的 shell
    jiager
        5
    jiager  
    OP
       2023-07-13 09:31:53 +08:00
    @jiager 我写错了,是一个 shizuku 授权的能运行 adb 命令的 shell
    coolloves
        6
    coolloves  
       2023-07-13 10:16:38 +08:00
    @jiager shizuku 我记得这个授权重启就要掉的吧?期待 op 写一些实用的 demo,目前看,还是 auto.js 更方便
    rev1si0n
        7
    rev1si0n  
       2023-07-13 12:48:14 +08:00
    yangyuhan12138
        8
    yangyuhan12138  
       2023-07-13 16:20:03 +08:00
    @Aoonthetop AirtestIDE 可以不依赖 adb 吗?或者说有没有什么办法让他跑在一台安卓手机上,不需要 wifi,usb 之类的东西
    AndyChina
        9
    AndyChina  
       2023-07-13 18:30:36 +08:00
    学习了
    Aoonthetop
        10
    Aoonthetop  
       2023-07-14 11:26:10 +08:00
    @yangyuhan12138 #8 不可以 运行 Python 脚本没问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2869 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:28 · PVG 16:28 · LAX 00:28 · JFK 03:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.