简介

TM助手是一款专业的移动开发辅助工具,提供强大的Lua脚本引擎和完善的设备授权管理系统。

系统要求
  • Android 7.0 及以上
  • 需要网络连接
  • 建议2GB以上内存

安装配置

1. 下载安装

下载中心下载最新版本的TM助手APK文件,安装到Android设备上。

2. 注册登录

首次使用需要注册账号:

  • 输入手机号
  • 获取验证码
  • 完成注册

3. 设备激活

联系管理员获取授权码,在应用中激活设备。

快速上手

第一个Lua脚本

创建一个简单的Hello World脚本:

-- hello.lua
print("Hello, TM助手!")

-- 显示Toast消息
toast("欢迎使用TM助手")

-- 获取设备信息
local deviceId = getDeviceId()
print("设备ID: " .. deviceId)

运行脚本

  1. 打开TM助手应用
  2. 在IDE中编写Lua脚本
  3. 点击"运行"按钮
  4. 查看日志输出

点击模块 (TmClick)

TmClick模块提供屏幕坐标点击功能,支持ROOT和无障碍服务两种模式。

基本用法

-- 点击屏幕坐标 (500, 1000)
tmClick(500, 1000)

-- 延迟后点击
sleep(1000)  -- 等待1秒
tmClick(300, 800)

函数说明

函数 参数 返回值 说明
tmClick(x, y) x: 横坐标
y: 纵坐标
boolean 点击指定坐标,成功返回true

工作模式

  • ROOT模式:使用input tap命令,速度快,精度高
  • 无障碍模式:使用AccessibilityService,无需ROOT权限
提示

应用会自动检测设备是否ROOT,并选择最佳模式。建议在设置中手动选择模式以获得更好的性能。

示例:连续点击

-- 连续点击5次
for i = 1, 5 do
    tmClick(500, 1000)
    sleep(500)  -- 每次点击间隔0.5秒
end

toast("点击完成")

颜色比对模块 (TmCmpColor)

TmCmpColor模块用于比较屏幕指定坐标的颜色,常用于判断界面状态。

基本用法

-- 检查坐标 (100, 200) 的颜色是否为红色
if tmCmpColor(100, 200, "#FF0000") then
    print("颜色匹配")
else
    print("颜色不匹配")
end

函数说明

函数 参数 返回值 说明
tmCmpColor(x, y, color) x: 横坐标
y: 纵坐标
color: 颜色值
boolean 比较颜色,匹配返回true

颜色格式

颜色值使用十六进制格式:#RRGGBB

  • #FF0000 - 红色
  • #00FF00 - 绿色
  • #0000FF - 蓝色
  • #FFFFFF - 白色
  • #000000 - 黑色

颜色容差

系统默认颜色容差为10(RGB每个通道),即实际颜色与期望颜色的RGB值相差在10以内都会被认为匹配。

注意

颜色比对需要截图权限。首次使用时,系统会请求屏幕录制权限。

示例:等待界面加载

-- 等待按钮变为绿色(表示可点击)
local maxWait = 10  -- 最多等待10秒
local waited = 0

while waited < maxWait do
    if tmCmpColor(500, 1000, "#00FF00") then
        print("按钮已就绪")
        tmClick(500, 1000)
        break
    end
    
    sleep(500)
    waited = waited + 0.5
end

if waited >= maxWait then
    print("等待超时")
end

示例:多点颜色检测

-- 检查多个坐标的颜色
local points = {
    {x = 100, y = 200, color = "#FF0000"},
    {x = 300, y = 400, color = "#00FF00"},
    {x = 500, y = 600, color = "#0000FF"}
}

local allMatch = true
for i, point in ipairs(points) do
    if not tmCmpColor(point.x, point.y, point.color) then
        print("坐标 (" .. point.x .. ", " .. point.y .. ") 颜色不匹配")
        allMatch = false
        break
    end
end

if allMatch then
    print("所有颜色都匹配")
    -- 执行后续操作
end

更多模块

TM助手还提供了更多实用模块,持续更新中...

即将推出的模块

图像识别

在屏幕上查找指定图片

文字识别

OCR识别屏幕文字内容

手势操作

滑动、长按等手势模拟

输入模块

模拟键盘输入文字

截图保存

截取屏幕并保存图片

通知模块

发送系统通知消息

需要新功能?

如果您有新的模块需求,欢迎通过邮件或社区反馈给我们。我们会根据需求优先级进行开发。

Lua基础

变量和数据类型

-- 变量定义
local name = "TM助手"
local version = 1.0
local isActive = true

-- 表(数组/字典)
local arr = {1, 2, 3, 4, 5}
local dict = {
    name = "张三",
    age = 25,
    city = "杭州"
}

函数定义

-- 函数定义
function greet(name)
    return "Hello, " .. name
end

-- 调用函数
local message = greet("TM助手")
print(message)

条件语句

local score = 85

if score >= 90 then
    print("优秀")
elseif score >= 60 then
    print("及格")
else
    print("不及格")
end

循环语句

-- for循环
for i = 1, 10 do
    print(i)
end

-- while循环
local count = 0
while count < 5 do
    print(count)
    count = count + 1
end

Lua API

基础API

函数 说明 示例
toast(message) 显示Toast消息 toast("Hello")
sleep(ms) 延迟执行(毫秒) sleep(1000)
getDeviceId() 获取设备ID local id = getDeviceId()
log(message) 输出日志 log("Debug info")

HTTP请求

-- GET请求
local response = http.get("https://api.example.com/data")
print(response.body)

-- POST请求
local data = {
    name = "张三",
    age = 25
}
local response = http.post("https://api.example.com/user", data)
print(response.statusCode)

文件操作

-- 读取文件
local content = file.read("/sdcard/test.txt")
print(content)

-- 写入文件
file.write("/sdcard/test.txt", "Hello World")

-- 检查文件是否存在
if file.exists("/sdcard/test.txt") then
    print("文件存在")
end

示例代码

示例1:自动签到

-- 自动签到脚本
function autoCheckIn()
    toast("开始自动签到")
    
    -- 模拟点击签到按钮
    click(500, 1000)
    sleep(2000)
    
    -- 检查签到结果
    local result = getText()
    if string.find(result, "签到成功") then
        toast("签到成功!")
        return true
    else
        toast("签到失败")
        return false
    end
end

-- 执行签到
autoCheckIn()

示例2:数据采集

-- 数据采集脚本
function collectData()
    local data = {}
    
    -- 采集数据
    for i = 1, 10 do
        local item = {
            id = i,
            title = getText(100, 200 + i * 100),
            time = os.time()
        }
        table.insert(data, item)
        sleep(500)
    end
    
    -- 保存数据
    local json = JSON.encode(data)
    file.write("/sdcard/data.json", json)
    
    toast("数据采集完成")
end

collectData()

示例3:定时任务

-- 定时任务脚本
function scheduleTask()
    while true do
        local hour = os.date("%H")
        
        -- 每天早上8点执行
        if hour == "08" then
            toast("开始执行任务")
            -- 执行任务逻辑
            doTask()
            -- 等待1小时
            sleep(3600000)
        end
        
        -- 每分钟检查一次
        sleep(60000)
    end
end

function doTask()
    -- 任务逻辑
    print("执行任务...")
end

scheduleTask()

WebSocket

TM助手内置WebSocket服务,用于IDE与设备之间的实时通信。

连接WebSocket

WebSocket服务地址:ws://设备IP:8081

消息格式

{
  "type": "execute",
  "code": "print('Hello')"
}
提示

WebSocket主要用于IDE与设备的通信,一般情况下不需要手动处理。

HTTP服务

TM助手内置HTTP服务,用于接收IDE的脚本执行请求。

服务地址

HTTP服务地址:http://设备IP:8080

执行脚本

POST /execute
{
  "code": "print('Hello World')"
}

调试技巧

日志输出

-- 使用print输出日志
print("调试信息")

-- 使用log函数
log("Debug: " .. tostring(value))

-- 输出表内容
function printTable(t)
    for k, v in pairs(t) do
        print(k .. " = " .. tostring(v))
    end
end

错误处理

-- 使用pcall捕获错误
local success, error = pcall(function()
    -- 可能出错的代码
    local result = riskyOperation()
    return result
end)

if not success then
    print("错误: " .. error)
    toast("操作失败")
end

性能优化

  • 避免在循环中进行耗时操作
  • 合理使用sleep()控制执行频率
  • 及时释放不需要的资源
  • 使用局部变量提高性能