发布时间: 更新时间:

root

前言:

使用虚拟机 VMOS Pro,可以拥有大多应用权限,不必刷机。不同手机不同操作,刷机有变砖风险!

步骤:

  1. 解bl锁

各品牌手机解锁有所不同,三星、小米、一加、Google pixel等部分厂商官方给解锁。

解锁困难的华为旧机:我用的是github的potatoNV短接解锁,如果其中没有你的手机,直接淘宝不要浪费时间。作者在youtube有教程,照做就好了(视频简介的USB com 1.0连接教程也要看,他的点击DriverSetup操作很快,不要漏了),短接点可以参考这里。获得解锁码搜华为工具箱即可解锁。

  1. 刷入 TWRP (recovery)、刷rom(系统)

建议不要刷机软件一键刷机,都是一堆广告的系统。

  • 手机品牌官网下载对应机型的驱动,并在windows设备管理器确认连接。
  • twrp官网下载TWRP。(TWRP 类似于 windows PE,是修改系统的程序。也可以去https://unofficialtwrp.com下载,收录了全面的非官方TWRP,如果有广告拦截检测可以安装ublock插件。)
  • 下载刷机软件和rom:

三星为例: 进入刷机模式,下载三星手机刷机的软件Odintar格式的TWRP,然后用Odin(选择AP)刷进手机。可参考youtube视频

卡刷:在https://samfw.com/下载,放入手机存储,双清后安装即可。

线刷:在https://samfirmtool.com/下载三星手机官方系统下载器SamFirm,然后使用Odin。

SamFirm使用方法:

小米为例:https://xiaomirom.com/下载刷机工具,下载酷安大神(例如:乌堆小透明)的ROM,或者欧版eu社区版ROM。然后按照此教程操作,安装选择默认即可,开机后卸载重装magisk。

华为旧机为例:https://m.huaweirom.com/rom/找到对应机型的rom,我当时看到网站干净无广告就刷了,是可以用的。Fastboot模式运行run脚本就行了。

  1. root

github下载magisk放进手机储存卡(有人建议低版安卓用20.4版本),进入TWRP recovery安装,开机后安装magisk manager app即可。

自动化

工具

识别方式 控件查找:可兼容所有机型,但是不能定位非原生安卓的对象(如 Unity3D 的游戏),或随机变化的控件(如安全键盘)。显然图像识别时必备的

图像识别:可查找所有显示内容,且难以被检测。但可能有识别慢、识别结果不准确、多分辨率不兼容的问题,不过使用airtest可以缓解

自动化工具有

  • Yyds.Auto:使用root深度掌控,内置yolo等ai模型,堪称最强方案,但部分app可能会对root设备监控
  • airtest:基于图像识别
  • appium:图像识别需自己实现
  • EasyClick:支持打包apk,收费
  • AutoX.js:支持打包apk,图像识别需自己实现
  • Hamibot:支持打包apk,可以浏览器远程控制
  • AiBote:办公自动化
  • Tasker、MacroDroid:单独app即可简单使用,收费

airtest(使用PC)

可支持自动化测试Android/Windows/iOS,详见官网官方教程

优点:图像识别+控件识别满足绝大部分自动化任务

缺点:windows运行手机模拟器略卡,再映射到airtest IDE中更卡

算法

Airtest算法介绍

  • 模板匹配
    • 速度快
    • 无法跨分辨率识别
    • 屏幕没有结果也会匹配出不准确的结果
  • 特征点匹配
    • 跨分辨率识别(可跨设备)
    • 不能识别纯文字、空白截图

技巧

  1. 截有特征的小图(多截空白背景图会使准确度下降)
  2. 有相同按钮时,把按钮全部截图再定位

基础

  • mumu模拟器连接示例
  • 文件–>新建脚本–>.py纯Python(高级用户)
    • Save Path: 文件保存路径
    • Log Directory: log保存路径
    • Devices:使用当前已连接的手机设备进行初始化
    • Project Root: 项目的父目录
  • 坐标
    • 绝对坐标:打开IDE的选项–>设置–>Device,勾选实时坐标显示显示鼠标在手机中的坐标
    • 相对坐标:勾选实时坐标选项,再勾选相对坐标,显示鼠标在手机中的相对坐标(可跨分辨率),相对坐标*电脑分辨率=绝对坐标,点击鼠标右键可复制坐标信息
# 获取横屏电脑分辨率
height = G.DEVICE.display_info['width']
width = G.DEVICE.display_info['height']

# 已知相对坐标[0.3,0.55],转换成绝对坐标
x2 = 0.3*width
y2 = 0.55*height

# 已知绝对坐标[311,1065],转换成相对坐标
x1 = 311/width
y1 = 1065/height
  • 图像识别
touch(Template(r"tpl1598948415043.png", target_pos=6))

# 参数
filename:截图路径
threshold:可信度,默认0.7
target_pos:点击位置,默认5(图像中心),1(左上角)~9(右下角)
rgb:使用彩色识别
  • 局部截图
from airtest.aircv import *

screen = G.DEVICE.snapshot()

# 局部截图,左上(0,160)右下(1067,551)
part_screen = aircv.crop_image(screen,(0,160,1067,551))
# 保存局部截图到log文件夹中
try_log_screen(part_screen)
  • API
    • 点击:touch
    • 滑动:swipe
    • 等待截图出现:wait
    • 存在某个截图:exists
    • 文本输入:text
    • 关键词操作:keyevent
    • 截图:snapshot
    • 等待:sleep
    • 断言:assert_existsassert_not_existsassert_equalassert_not_equal
  • 文字识别
# 建议尝试Poco控件识别,小概率识别不准,就会影响程序运行
# 实际使用中,单纯文字识别准确率尚可,数字/符号识别不准(使用相应匹配规则也不行,需借助另外专业的库)
import pytesseract
from PIL import Image

# 打开图片
image = Image.open(r'D:/test/score0.png')
# 识别
text = pytesseract.image_to_string(image)
# 识别中文
text3 = pytesseract.image_to_string(image3,lang='chi_sim')
# 点击ocr文字
def touch_ocr(target_text):
    
    # 已知相对坐标[0.13,0.01][0.27,0.04],局部截图
    x1 = 0.13*height
    y1 = 0.01*width
    x2 = 0.27*height
    y2 = 0.04*width
    part_screen = aircv.crop_image(screen,(x1,y1,x2,y2))
#     try_log_screen(part_screen)

    # 识别
    text = pytesseract.image_to_string(part_screen,lang='chi_sim')
#     print(text)
    
    if target_text == text:
        x_center=(x1+x2)//2
        y_center=(y1+y2)//2
        touch(x_center,y_center)

Tasker(使用andriod)

优点:性能好,无需电脑

缺点:需root,只能处理简单任务

基础

Tasker终身许可$3.49,可app单独使用,需root才顺畅使用,否则锁屏都不能解决

设置:

  • 防止系统清理:进入系统最近任务界面,点击应用旁边的小锁,锁定应用不被系统清理
  • 忽略电池优化:依次打开系统设置,应用和通知,应用管理,设置,特殊访问权限,忽略电池优化(直接在设置搜索栏搜索电池也能找到),允许忽略应用
  • 设置启动管理:依次打开系统设置,电池,启动管理,关闭应用自动管理后弹出的对话框中选中:允许自启动,允许关联启动,允许后台活动
  • 权限全部打开

shell

shell命令很方便定义操作(点击的坐标可以在手机开发者选项中打开指针位置)。shell命令摘录网站

#按键事件
input text <string> #输入文本

input keyevent 20 #向下
input keyevent 4 #返回
input keyevent 3 #Home
input keyevent 6 #挂机
input keyevent 84 #搜索
input keyevent 26 #电源,息屏
input keyevent 24 #音量+
input keyevent 25 #音量-

#模拟点击
input tap 100 100
 
#滑动
input swipe x1  y1  x2  y2   ms

input swipe 100 100 400 100  300 #左往右
input swipe 400 100 100 100  300 #右往左
input swipe 100 100 100 400  300 #上往下
input swipe 100 400 100 100  300 #下往上
input swipe 100 100 400 400  300 #上往下斜
input swipe 400 400 100 100  300 #下往上斜
 
#长按
input swipe 100 100 100 100  1000 //在 100 100 位置长按 1000毫秒
Licensed under CC BY-NC-SA 4.0
最后更新于 2024-09-22