立即登录

(阴阳师)如何用adb获取安卓设备的初始

05/05 19:23:30

前言

最近喜欢玩公主连结,之前也喜欢玩阴阳师之类的游戏。 此类游戏将具有诸如初始编号之类的东西,或者可以发行的东西。

其实作为程序员,这些事情完全可以通过写代码的形式,手动帮我们完成。 游戏脚本似乎并不难。 最简单的体验方式就是下载一个Airtest,直接拍几张图,写几层代码,然后就可以按照自己的逻辑玩游戏了。

其实这篇文章不是讲如何使用Airtest,而是用原来的python+opencv来实现里面的操作。

这三天写了一个刷公主连结初始号的程序,算不上游戏脚本的老手。 本文主要是分享一些基础技术和使用中的经验。

计划工作

首先,我们必须完成以下计划。

这里我把adb和tesseract放在了百度云盘里,顺便放了一个录制的疗效视频。

链接:pan.baidu.com/s/1edTPu2o7... 提取码:33aw

python库安装

pip install pillow pytesseract opencv-python
复制代码

另外,如果需要,可以安装uiautomator2,本文不做介绍。

使用 adb 获取 Android 设备

这里主要涉及到单个Android设备的ADB连接操作。 首先,我们打开模拟器。

然后我们调用adbdevices获取当前的Android设备,这里是一个模拟器。

收到后可以调用adbshel​​l测试是否可以进入Android设备的shell环境,确认可以输入exit退出。

如果有时候进不了shell,可以先调用adbkill-server,再调用adbdevices。

可能常用的 ADBShell 命令

然后是一些ADB命令操作。 通过adb命令辅助卡盟,我们可以使用python来操作Android设备。

截图

最常见的操作是截屏。 首先调用screencap进行截图并放置到Android设备上,然后将截图下拉到笔记本中。

def take_screenshot():
    os.system("adb shell screencap -p /data/screenshot.png")
    os.system("adb pull /data/screenshot.png ./tmp.png")
复制代码

下拉文件

下拉文件就是刚才的adb pull。 以公主连结为例bat执行python脚本,下面的代码可以导入账号信息的xml,然后就可以通过xml进行登录了。

os.system(f"adb pull /data/data/tw.sonet.princessconnect/shared_prefs/tw.sonet.princessconnect.v2.playerprefs.xml ./user_info.xml")
复制代码

上传文件

有了下拉,自然会有上传,可以通过adbpush来完成。 以公主连结为例,以下代码即可完成账号切换。

# 切换账号1
os.system("adb push ./user_info1.xml /data/data/tw.sonet.princessconnect/shared_prefs/tw.sonet.princessconnect.v2.playerprefs.xml")
# 切换账号2
os.system("adb push ./user_info2.xml /data/data/tw.sonet.princessconnect/shared_prefs/tw.sonet.princessconnect.v2.playerprefs.xml")
复制代码

单击屏幕上的某个位置

def adb_click(center, offset=(0, 0)):
    (x, y) = center
    x += offset[0]
    y += offset[1]
    os.system(f"adb shell input tap {x} {y}")
复制代码

输入文字

text = "YourPassword"
os.system(f"adb shell input text {text}")
复制代码

删除字符

有时候输入框会有输入缓存,我们需要删除字符。

# 删除10个字符
for i in range(10):
    os.system("adb shell input keyevent 67")
复制代码

查询当前运行的包名和Activity

通过下面的代码可以查询当前运行程序的Activity,也可以顺便查看包名。

adb shell dumpsys activity activities
复制代码

停止应用程序

有时需要停止一个应用程序,需要提供应用程序的包名。

adb shell am force-stop tw.sonet.princessconnect
复制代码

打开应用程序

要打开应用程序,您需要提供包名称和 Activity。

adb shell am start -W -n tw.sonet.princessconnect/jp.co.cygames.activity.OverrideUnityActivity
复制代码

图像处理

处理图像的第一件事是搜索图像。 比如Airtest提供的,无非就是判断截图里有没有图片,有的话在什么地方。

此外,还需要一些切口。 比如我们要获取账号id和账号级别,就需要截取一部分图片,然后进行OCR操作。

图片搜索

图片搜索好像是先获取两张图片,然后调用cv2.matchTemplate方法判断是否存在以及位置。 这里的匹配是比较模糊的匹配,会有相似的概率,最高为1。我们设置一个阈值来判断模板是否在截图中。

截图如下,文件名为tmp.png:

定时执行bat脚本_bat执行python脚本_html5怎么执行bat脚本

模板如下:

代码如下:

import cv2
def image_to_position(screen, template):
    image_x, image_y = template.shape[:2]
    result = cv2.matchTemplate(screen, template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    print("prob:", max_val)
    if max_val > 0.98:
        global center
        center = (max_loc[0] + image_y / 2, max_loc[1] + image_x / 2)
        return center
    else:
        return False
if __name__ == "__main__":
    screen = cv2.imread('tmp.png')
    template =  cv2.imread('Xuandan.png')
    print(image_to_position(screen, template))
复制代码

运行上面的代码后,可以看到模板匹配的概率为0.9977,位置为(1165,693)。 对于一张图片,左上角是原点。 由于我的帧率是1280*720,所以右下角的坐标是(1280,720)。 你可以看到我们的菜单似乎就在右下角。

如何快速裁剪模板? (win10)

游戏脚本虽然不难写,但是需要切很多图,而且这个图的码率必须和原图一样。我发现如果在win10中打开图片为图片

可以保证使用QQ截图的帧率与图片本身的帧率一致。

这时候QQ直接抓取的模板就可以直接用于识别了。

图像裁剪

然后发现有时需要裁剪一些图像。 其实我们的模板图片也可以通过裁剪图片得到。 这样的模板图片是最准确的。

html5怎么执行bat脚本_定时执行bat脚本_bat执行python脚本

裁剪当然是需要裁剪的位置,还有需要的高度和长度。 说白了,就是一个长方形的区域。 下面的代码是使用 PIL 库实现的。

from PIL import Image
def crop_screenshot(img_file, pos_x, pos_y, width, height, out_file):
    img = Image.open(img_file)
    region = (pos_x, pos_y, pos_x + width, pos_y + height)
    cropImg = img.crop(region)
    cropImg.save(out_file)
    print("exported:", out_file)
if __name__ == "__main__":
    crop_screenshot("tmp.png", 817,556, 190, 24, "test_id.png")
复制代码

里面的代码以拦截玩家id为例。

运行代码后,截图如下:

简单的文字识别

得到上述图像信息后,进行OCR,即光学字符识别。 这里的代码很简单,调用API即可。

from PIL import Image
import pytesseract
image = Image.open('test_id.png')
content = pytesseract.image_to_string(image)   # 识别图片
print(content)
复制代码

不过需要注意一点,pytesseract识别出来的结果会带有空格符、换行符等符号。 当你确实需要使用它们时bat执行python脚本,你可以过滤一些字符。

结束

本篇到这里就结束了,主要介绍ADB和images相关的一些基本操作。 感谢您的收看。

本文文字和图片来源于网络加上本人的观点。 它们仅用于学习和交流。 它们没有任何商业用途。 版权归原作者所有。 如有任何问题,请及时联系我们解决。

最新资讯