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. 脚本逻辑
将逻辑分成几层:
- 图像识别:封装在 image_processor.py。负责特定图像的匹配,如果匹配成功(匹配度高于某设定阈值),则返回对应坐标
- 文字识别:也封装在 image_processor.py,对 easyocr 进行适合自己的一些封装,用来识别某个区域内的文字。
- ADB控制器:封装在adb_controller.py。配合图像识别功能,实现等待某个图片出现、点击某个图片、检测是否有某个图片等等功能。
- 最后时明日方舟脚本逻辑:封装在 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
感謝分享思路,萌新獲益良多。
大哥能不能出一个视频讲每一个步骤什么含义的教程,花钱买也愿意,小白觉得这样的脚本很有意思很想学,所有文章都看过了,但看到代码还有将近3分之2的看不懂,自己想动手也没有方向
感觉是我代码有点乱的问题,哈哈哈。录视频讲应该受众不多,你加我qq吧,有想问的问题的话直接问我 306483372
感谢大佬分享!一直有在用方舟alas摸鱼,但都没仔细研究过,最近心血来潮想写个其他游戏的自动化,没想到连接adb就卡了一下午。。。然后就找到这里了,太感谢了!