安卓手机运行 Python 脚本,实现手机操作自动化 - V2EX
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 3655 次点击
    这是一个创建于 850 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看这个节点下正好有一个 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" ?
    sparkssssssss
        3
    sparkssssssss  
       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
    sparkssssssss
        6
    sparkssssssss  
       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     Solana     2112 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:47 PVG 08:47 LAX 16:47 JFK 19:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86