概要
触动精灵属于比较高级的脚本开发,如果比较简单的脚本开发可以使用Auto.js,无需root。
工具下载
连接模拟器
studio连接
首先要先下载ADB模拟器连接IDE,注意,这里一定要用官网提供的ADB,安卓开发的adb不行!!!
下载好之后,打开studio,输入Access Key按照下面步骤执行
如果出现以下这种情况重复执行上面步骤
第一步,先进入到下载的目录下执行 adb connect 127.0.0.1:7555
运行完用adb devices查看是否连接,如果出现offline要断开重连,断开语句adb disconnect 127.0.0.1:7555
第二步,执行显示nLog日志.bat,然后执行执行连接编辑器.bat(相当于执行./adb.exe forward tcp:50005 tcp:50005)
第三步,安卓端运行触动精灵
上面的这些步骤可以用下面两行代码替换,如果取色器不能截图,换一个模拟器。
常用模拟器端口号
注意:mumu模拟器默认为横屏,可以通过设置屏幕为720*1080来实现竖屏
在设备一栏中新增127.0.0.1,然后右击连接
连接成功标示
这里注意把虚拟机时间设为网络同步。
拾色器
连接好Studio后,连接拾色器,输入127.0.0.1:50005,注意这里一定要为50005!!!连接成功后窗口消失。点击抓图即可。
拾色器快捷键
常用快捷键
- `(数字1左边那个键)
取一点颜色到剪贴板,取色后直接可以粘贴,默认情况下,该操作不会有可视化表现 - 数字键(1 2 3 4 5 6 7 8 9 0)
多点取色到剪贴板,以上十个数字键分别取 10 点色,取色之后直接 Ctrl + V 即可把取好的点色粘贴到脚本中 - Shift + (1 2 3 4 5 6 7 8 9 0)
清除相应位置的点色信息(会重置剪贴板中的内容) - 方向键(↑ ↓ ← →)
移动鼠标指针定位 1 个像素 - Shift + 光标键(↑ ↓ ← →)
移动鼠标指针定位 10 个像素 - Ctrl + 光标键(↑ ↓ ← →)
移动鼠标指针定位 100 个像素 - 回车键
取色到剪贴板的第一个空白位置(如果没有空白位置则不会取色) - Ctrl + 鼠标左键-点击
与上一条 回车键 功能一样 - -
缩小视图 - =
放大视图 - R
刷新列表中的已有坐标的颜色并使用简易标签于图像上标出相应的位置 - W
把取色列表重新写入剪贴板
模拟点击事件
用取色器获取某个点的坐标,模拟点击按钮,代码如下
init(0) --初始化(0,0)坐标 mSleep(3*1000) --睡眠三秒,防止坐标没初始化好 --[[模拟点击事件]]-- touchDown(1080,582) -- 点下某个像素点 mSleep(20) -- 睡眠20ms touchUp(1080,582) -- 从像素点上抬起抬起
智能找色脚本
用到findMultiColorInRegionFuzzy方法,即区域多点找色
游戏:萌犬变变变
首先用颜色拾取器将箱子的三个点取下来(相当于识别物体),然后按住shift框选识别区域。点击生成脚本,复制最后一栏。
代码如下
init(0) -- 启动初始坐标 mSleep(3*1000) -- 睡眠三秒防止没有初始化成功 while (true) do -- 无限执行 --[[刚才颜色拾取器生成的脚本,返回的是第一个值的坐标]]-- x,y = findMultiColorInRegionFuzzy( 0xbd8c5a, "-29|-47|0xbd8c5a,-51|-2|0x000000", 90, 34, 196, 668, 1042) if(x~= -1 and y~= -1) -- 根据多点颜色区域模糊查色返回的结果 then touchDown(x, y) -- 点击事件 mSleep(20) touchUp(x, y) end end
TSLib库
这个是触动精灵自己的,用法要看官方文档
首先在最上面加载TSLib库
require("TSLib")
封装一些通用函数
-- 根据坐标点击 function click(x,y) if(x~= -1 and y~= -1) -- 根据多点颜色区域模糊查色返回的结果 then touchDown(x, y) -- 点击事件 mSleep(20) touchUp(x, y) end mSleep(5*1000) end -- 打印坐标,调试用 function showClick(x,y) dialog(\'返回视屏坐标x\'..x..\',\'..y) end
multiColor
多点比色,用来判断界面
require "TSLib"--使用本函数库必须在脚本开头引用并将文件放到设备 lua 目录下 --全部坐标点和颜色一致时返回 true,== true 可省略不写 --判断是否为某个界面 if multiColor({{75, 1026, 0x9b9b9b},{214,1028,0x9b9b9b},{341,1038,0xff3031},{357,1037,0xfff6f6},{507,1028,0x9b9b9b},{642,1032,0x9b9b9b}},80,false) == true then x,y = findMultiColorInRegionFuzzy( 0x191f25, "1|0|0x191f25,2|0|0x191f25,3|0|0x191f25", 90, 22, 190, 690, 958) -- 查找指定区域内黑色的文字 --showClick(x,y); 调用封装的函数,显示坐标轴 click(x,y) --点击进入视屏 mSleep(3*1000) --观看3分钟 click(40,74); --点击返回 touch():on(354,646):move(348,414):off() mSleep(5*1000) end
便捷UI
信息提示脚本
信息提示脚本主要用于调试用,注意手机要开启悬浮框权限
dialog
阻塞式信息,会阻塞脚本,慎用
toast
异步信息,建议用这个,toast显示几秒,后面要用mSleep等待几秒,不然下面取色取到toast可能会出问题
逐行获取文本文件数据
逐行读取文本代码如下
for line in io.lines("main.lua") do print(line) end
控制台输出指定文件的数据
--获取文件路径,serPath为触动精灵所在目录 local file = userPath().."/res/密令.txt" if file then for line in io.lines(file) do -- 遍历文件里的内容 inputText(line) -- 输出到控制台 mSleep(2000) end dialog("输入完毕", 1) lua_exit() -- 退出lua程序 end
防锁屏
判断屏幕是否为锁定状态
代码如下
flag = deviceIsLock(); --如果要在设备自启动时解锁屏幕直接使用 unlockDevice 函数即可 if flag == 0 then dialog("未锁定",3); else unlockDevice(); --解锁屏幕 end
主屏幕按键
pressHomeKey(); --Android 系统不需要填参数,自动点击抬起
报错友善提示
function main(...) error("这是一个错误演示!",2) -- 手动抛出一个异常 return 0 end neo,errmsg = pcall(main) -- 保护模式调用,第一个参数为是否返回异常,第二个参数为返回的异常信息 if neo then -- 如果不返回异常 dialog(errmsg, time) else --返回异常时弹出友善提示框 user_Choosen = dialogRet(\'很抱歉辅助出现异常,是否将错误信息写入剪切板以回报开发者!\',"积极回报","残忍拒绝" ,"",0) if user_Choosen == 0 then -- 如果点击确定 writePasteboard(errmsg) -- 复制到粘贴板 dialog(\'错误信息已经写入剪切板!\',5) -- 提示用户 end end
调用Http发送数据
local url = string.format("http://www.***com:9002/pubApi/uLogin?uName=%s&pWord=%s", account, password) -- 生成url local code, header, body = http.get(url, 10) --发送请求,10秒超时.code、header、body不解释 if code == 200 then -- 如果返回为200时 if body == "False" then return false end return true end