AutoTouch用来录制和回放您在移动设备上的各种触摸和点击操作(不是屏幕录像),它支持运行Lua脚本并提供一系列可以模拟人的触摸和按键操作的扩展函数,结合这些扩展函数您可以编写功能复杂多样的脚本来用AutoTouch自动化执行。比如您可以用它自动玩游戏打怪赚取金币、批量编辑照片、进行程序自动化测试或者自动登陆等等。
现在AutoTouch已经具备了录制和回放大多数人类操作的能力,比如触摸,点击Home实体键,点击音量实体键,点击声音开关实体键、锁屏实体键等等。并且达到了精确和顺滑的效果。它还提供了诸如截屏、区域截屏、颜色查找、颜色匹配、图片匹配等一些列扩展函数,具备了更大可挖掘的潜力。结合这些奇异的能力,能限制您的只有想象力了。
您可以从这里学习Lua语言的使用:Lua Official Reference Manual.
扩展函数用于扩展Lua语言,使具备模拟人类操作手机的一些能力。还提供截屏、颜色查找、颜色匹配、图片匹配等能力。
在屏幕的(x, y)坐标按下.
touchDown(0, 100, 200); -- 在坐标(100, 200)处按下.
移动手指到(x, y)坐标.
touchDown(0, 100, 200); -- 在坐标(100, 200)处按下. touchMove(0, 200, 200); -- 移动手指到坐标(200, 200)处.
从(x, y)坐标抬起按下的手指.
touchDown(0, 100, 200); -- 在坐标(100, 200)处按下. touchMove(0, 200, 200); -- 移动手指到坐标(200, 200)处. touchUp(0, 200, 200); -- 在坐标(200, 200)处抬起按下的手指.
点击坐标点(x, y).
tap(100, 200); -- 点击坐标点(100, 200).
模拟实体键按下动作。
keyDown(KEY_TYPE.HOME_BUTTON);
-- 模拟Home键按下的动作
-- 怎样模拟一次按键动作
function keyPress(keyType)
keyDown(keyType);
usleep(10000);
keyDown(keyUp);
end
keyPress(KEY_TYPE.HOME_BUTTON);
模拟实体键抬起动作。
keyUp(KEY_TYPE.HOME_BUTTON);
-- 模拟Home键抬起的动作。
在当前屏幕获取指定坐标位置的颜色值.
local rgb = getColor(100, 200);
alert("rgb:" .. rgb);
-- rgb:16777215
在当前屏幕获取所有匹配指定颜色的坐标点. 注意: 您应当这样使用find(0x0000ff, 5), 而非这样:find(rgb=0x0000ff, count=5), 这与findImage函数不同, 因为findImage的参数整体是一个table.
-- 示例 1:
local result = findColor(0x0000ff, 2, nil);
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
-- 示例 2:
local result = findColor(0x00ddff, 0, {100, 50, 200, 200});
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
-- 示例 3:
local region = {100, 50, 200, 200};
local result = findColor(0x00ddff, 0, region);
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
查找所有匹配指定颜色和它们的相对位置的矩形区域,返回找到的矩形区域的中心坐标。该函数具有比findImage高得多的查找效率和可用度,比如查找一个按钮,不用像findImage一样去匹配整个按钮图片,只用匹配按钮中的几个锚点的颜色和它们的相对位置即可。可以使用count参数限定希望查找结果的个数,0标识查找所有,1标识查找第1个,2表示查找前两个。region参数可以用来限定查找的区域,为{x, y, width, height}的table类型,不限定时传入nil。
这个函数可以使用脚本编辑界面“扩展函数”中的“帮助”工具,快速地从屏幕截图中选择几个锚点颜色,并自动获取它们的相对位置来插入到函数参数位置。
-- 示例 1:
local result = findColors({{0x00ddff,0,0}, {0x00eeff,10,10}, {0x0000ff,0,20}}, 2, nil);
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
-- 示例 2:
local colors = {{0x00ddff,0,0}, {0x00eeff,10,10}, {0x0000ff,0,20}};
local result = findColors(colors, 0, nil);
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
-- 示例 3:
local colors = {{0x00ddff,0,0}, {0x00eeff,10,10}, {0x0000ff,0,20}};
local region = {100, 50, 200, 200};
local result = findColors(colors, 0, region);
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
在当前屏幕查找匹配指定图片的区域,以table形式返回找到的所有区域的左上角坐标.
-- 示例 1:
local result = findImage("images/spirit.png", 5, 1, nil, nil);
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
-- 示例 2:
local result = findImage("images/spirit.png", 0, 0.6, nil, nil};
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
-- 示例 3:
local result = findImage("images/spirit.png", 0, {0xffffff, 0x2b2b2b}, nil};
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
-- 示例 4:
local region = {100, 50, 200, 200};
local ignoreColors = {0xffffff, 0x2b2b2b};
local result = findImage("images/spirit.png", 1, 0.9, ignoreColors, region};
for i, v in pairs(result) do
log("x:" .. v[1] .. ", y:" .. v[2]);
end
该函数与findColor基本相同,区别在于findColorTap找到那些点并依次间隔0.016秒进行点击,并且不返回任何值.
-- 示例 1:
findColorTap(0x0000ff, 2, nil); -- 找到颜色为0x0000ff的前两个坐标点并依次间隔0.016秒点击它们.
-- 示例 2:
local region = {100, 50, 200, 200};
findColorTap(0x0000ff, 0, region); -- 指定区域内查找并点击它们。
像findColors那样查找,然后在结果位置依次进行一次点击。
findColors({{0x00ddff,0,0}, {0x00eeff,10,10}, {0x0000ff,0,20}}, 2, nil); -- 找到前两个匹配的区域,然后依次点击它们.
local region = {100, 50, 200, 200};
findColors({{0x00ddff,0,0}, {0x00eeff,10,10}, {0x0000ff,0,20}}, 0, region); -- 在指定区域查找匹配,然后依次点击它们。
像findImage那样查找区域,并在结果处依次间隔0.016秒进行点击。
local region = {100, 50, 200, 200};
local ignoreColors = {0xffffff, 0x2b2b2b};
findImageTap("images/spirit.png", 1, 0.9, ignoreColors, region};
对全屏,或指定区域进行屏幕截图,并保存在指定地址。
screenshot ("images/screenshot1.png", nil);
-- 全屏截图并保存在指定位置。
screenshot ("images/screenshot1.png", {100, 100, 200, 200});
-- 对指定区域截图并保存。
用appIdentifier启动指定应用.
appRun("com.apple.mobilesafari");
-- 运行safari
用appIdentifier关闭指定应用.
appKill("com.apple.mobilesafari");
-- 关闭运行着的safari
获取指定应用的运行状态
b = appState("com.apple.mobilesafari");
-- 获得Safari的状态.
检查指定应用是否处于活跃和打开的状态.
b = appIsActive("com.apple.mobilesafari");
-- 检查App打开状态
获得脚本存放的默认地址.
local dirPath = rootDir(); -- dirPath = "/var/mobile/Library/AutoTouch/Scripts/"
停顿若干个微秒,即1/1000000秒.
usleep(1000000); -- 停顿1秒
记录日志,可在日志界面查看。
log("play here...");
弹出对话框显示指定内容.
alert("Hello world!");
震动一次.
vibrate(); -- 震动一次.
Play the specified audio file, times means how may time you want to play, default is 0, means infinitely.
playAudio("/var/audio.mp3", 0); -- play infinitely.
Pause the playing started before.
pauseAudio();
Resume the paused playing before.
resumeAudio();
Stop the playing started before.
stopAudio();
获取屏幕分辨率.
local w, h = getScreenResolution(); -- 分辨率宽度是1136, 分辨率高度是640.
获取屏幕大小,这里是苹果坐标系的大小。视网膜屏就是分辨率除以二的值.
local width, height = getScreenSize(); -- iPhone 5:宽是320, 高是568
Get the retina scale of the screen.
local scale = getScreenScale(); -- 2.0 for iPhone 5, 3.0 for iPhone 6 Plus.
Get the bit depth of the screen.
local bitDepth = getScreenScale();
获取当前设备的序列号。
b = getSN();
-- b: C15NFK32TWD2
获取AutoTouch当前版本号。
b = getVersion();
-- b: 3.0.1
将整形颜色值转换为r, g, b单独的值.
local r, g, b = intToRgb(0x2b2b2b);
将r, g, b色值转换为整形颜色值.
local intColor = rgbToInt(200, 255, 100);
将指定文本复制到剪贴板.
copyText("This is a copied text!");
Get the text on the clipboard.
local text = clipText();
Input the specified text to the focused text field.
inputText("Let's input some text automatically without tapping the keyboard!");
inputText("\b\b\b"); -- delete backward for 3 characters
Fake geographic position for the specified apps, it remains in effect until you call clearFakeLocation, or clear the faking in the settings view.
fakeLocation("com.apple.Maps", 36, 50); -- fake location for Apple Map.
Clear the location faking for one specified app.
clearFakeLocation("com.apple.Maps"); -- clear the location faking for Apple Map.
Show a dialog accepts user input.
local label = {type=CONTROLLER_TYPE.LABEL, text="Would you mind to provide some personal informations?"}
local nameInput = {type=CONTROLLER_TYPE.INPUT, title="Name:", key="Name", value="Kevin"}
local positionPicker = {type=CONTROLLER_TYPE.PICKER, title="Position:", key="Position", value="CEO", options={"CEO", "CTO", "CFO", "CXO"}}
local developerSwitch = {type=CONTROLLER_TYPE.SWITCH, title="A Developer:", key="ADeveloper", value=1}
local controls = {label, nameInput, positionPicker, developerSwitch}
local enableRemember = true;
dialog(controls, enableRemember);
alert(string.format("name:%s, birthday:%s, gender:%d", nameInput.value, positionPicker.value, developerSwitch.value))
Get the screen orientation.
local o = getOrientation();