明日方舟挂机脚本python+adb实现

1.说明

挂机的价值不言而喻,主要谈谈各种实现方式

脚本已经实现,下载和配置见

这篇主要记录实现方式(暂时并没写很细,不过下载可以看代码,还有有问题可留言)

2.Adb控制

我主要考虑用 windows 机器挂机。

所以比较自然的方式是采用 windows上的安卓模拟器。

我之前实现自动扫雷采用的模式是 截屏+识别+控制鼠标点击。但这样做有一个显然的坏处:需要真实占用电脑和鼠标,挂机时不能进行其他操作。

用 adb 则能避免这个问题,使可以后台挂机,且缩放模拟器的窗口也不影响模拟器截图,总之挂机时可以比较无感。

以下为使用 adb 需要做的准备:

2.1 检查adb版本

我选择的是 windows 系统,用 python 控制 adb 进而控制 夜神模拟器 的方式。

需要保证 windows 所带的 adb 与 夜神模拟器的 adb 版本一致。

运行 cmd,输入adb version 查看系统的 adb 版本

用命令行进到夜神模拟器所在的文件夹下的 bin 文件夹,输入 adb.exe version 和 nox_adb.exe version

检查系统的和以上夜神的一共3个 adb 版本是否一致,如果不一致则需要选其中一个 adb.exe 去覆盖另外两个,覆盖后名字修改为覆盖前的名字(如 nox_adb)。

其中系统自带的 adb.exe 需要找一找,我用的 everything 直接搜到的,在 D:\adt\adt-bundle-windows-x86_64-20140624\sdk\platform-tools 下。但可能每台机器不太一样。

覆盖后再重新检查一下三个 adb 的版本是否一致。

2.2 测试adb

在打开模拟器的情况下用 adb devices 可以看到所有模拟器:

由于夜神支持多开,多开则对应多行。

夜神模拟器会自动连接 adb ,所以似乎不需要再使用 adb connect XXX

可以做一个简单的截图测试,看看是否 adb 命令可用:

adb -s 127.0.0.1:62028 exec-out screencap -p > F:\1.png

其中 127.0.0.1:62028 是你的模拟器的 IP:端口,可能需要修改

F:\1.png 是截图输出的路径,根据需要修改

运行一下,在对应目录看看是否图片生成成功:

如果成功则代表 adb 运行正常,则可以参考adb的功能对模拟器进行控制了:

PC通过ADB控制Android手机模拟点击,滑动,输入等事件(包括控制多台Android手机)

3. 准备Python环境

个人使用的当前 Python 版本 3.8 :https://www.python.org/downloads/

装一些可能用到的包(opencv 用于图像匹配,easyocr 用于 OCR 文字识别)


python3.8 -m pip uninstall  -y numpy
python3.8 -m pip uninstall -y opencv-python
python3.8 -m pip uninstall -y opencv-contrib-python
python3.8 -m pip3 install --upgrade pip
python3.8 -m pip3 uninstall -y numpy
python3.8 -m pip3 uninstall -y opencv-python
python3.8 -m pip3 uninstall -y opencv-contrib-python
python3.8 -m pip uninstall -y easyocr
python3.8 -m pip3 install numpy
python3.8 -m pip3 install opencv-python
python3.8 -m pip3 install opencv-contrib-python
python3.8 -m pip install easyocr

4. OpenCV图像匹配

参考:https://blog.csdn.net/zhuisui_woxin/article/details/84400439

5. EasyOCR 文字识别

参考:https://pangruitao.com/post/3846

6. 脚本逻辑

将逻辑分成几层:

  1. 图像识别:封装在 image_processor.py。负责特定图像的匹配,如果匹配成功(匹配度高于某设定阈值),则返回对应坐标
  2. 文字识别:也封装在 image_processor.py,对 easyocr 进行适合自己的一些封装,用来识别某个区域内的文字。
  3. ADB控制器:封装在adb_controller.py。配合图像识别功能,实现等待某个图片出现、点击某个图片、检测是否有某个图片等等功能。
  4. 最后时明日方舟脚本逻辑:封装在 arknights_processor.py,利用ADB控制器和图像识别功能,去实现特定挂机功能。如关闭游戏,打开游戏(等待开始按钮出现并点击等等)

参考资料

PC通过ADB控制Android手机模拟点击,滑动,输入等事件(包括控制多台Android手机)

https://blog.csdn.net/aoaoxiexie/article/details/53464716

利用python,通过adb控制夜神模拟器,实现app自动安装

https://blog.csdn.net/ruichow/article/details/106139854

明日方舟挂机脚本

https://gitee.com/zhirongyu/ark-script

opencv+python实现图像匹配

https://blog.csdn.net/zhuisui_woxin/article/details/84400439

Python3.10版本

https://www.python.org/downloads/

夜神模拟器使用命令行直接运行指定的模拟器

https://blog.csdn.net/mcw_720624/article/details/115275317

ADB命令系列之 adb shell input

https://blog.bihe0832.com/adb-shell-input.html

Fire a pinch in/out command to Android phone using adb

python opencv将图片转为灰度图

https://blog.c适合小白的几个入门级Python ocr识别库

《明日方舟挂机脚本python+adb实现》有4条评论

  1. 大哥能不能出一个视频讲每一个步骤什么含义的教程,花钱买也愿意,小白觉得这样的脚本很有意思很想学,所有文章都看过了,但看到代码还有将近3分之2的看不懂,自己想动手也没有方向

    回复
    • 感觉是我代码有点乱的问题,哈哈哈。录视频讲应该受众不多,你加我qq吧,有想问的问题的话直接问我 306483372

      回复
  2. 感谢大佬分享!一直有在用方舟alas摸鱼,但都没仔细研究过,最近心血来潮想写个其他游戏的自动化,没想到连接adb就卡了一下午。。。然后就找到这里了,太感谢了!

    回复

发表评论