Auto.js变成基础知识学习

Auto.js 基础知识详解

一、Auto.js 简介

Auto.js 是一款基于 JavaScript 的自动化脚本工具,主要运行在 Android 平台上。它不需要 root 权限即可实现许多自动化操作,如点击、滑动、输入文字等。Auto.js 最初由国内开发者开发,后来开源并衍生出多个版本,如 Auto.js Pro、AutoX.js 等。

1.1 Auto.js 的主要特点

  1. 无需 root 权限:大多数基础功能不需要 root 权限即可使用
  2. 基于 JavaScript:使用简单易学的 JavaScript 语言编写脚本
  3. 丰富的 API:提供大量针对 Android 设备的 API
  4. 可视化界面:内置编辑器,方便编写和调试脚本
  5. 多线程支持:可以同时运行多个脚本
  6. 图像识别:支持基于图像的控件识别和操作

1.2 Auto.js 的应用场景

  1. 自动化测试
  2. 游戏辅助
  3. 日常任务自动化(如微信自动回复、自动打卡等)
  4. 批量处理重复性手机操作
  5. 数据采集和监控

二、Auto.js 开发环境搭建

2.1 安装 Auto.js

Auto.js 有多个版本可供选择:

  1. Auto.js 4.1.1:最后开源的免费版本
  2. Auto.js Pro:商业化版本,功能更强大
  3. AutoX.js:社区维护的开源分支

建议从官方或可信渠道下载安装包进行安装。

2.2 开发工具配置

Auto.js 内置了代码编辑器,但也可以使用外部编辑器如 VSCode 进行开发:

  1. 使用内置编辑器

    • 打开 Auto.js 应用
    • 点击"+"号新建脚本
    • 使用内置编辑功能编写代码
  2. 使用 VSCode 开发

    • 安装 VSCode 插件"Auto.js-VSCodeExt"
    • 配置连接手机或模拟器
    • 通过 WiFi 或 USB 调试连接设备

2.3 第一个 Auto.js 脚本

// 显示一个提示框
toast("Hello Auto.js");

// 等待3秒
sleep(3000);

// 点击屏幕坐标(500, 500)
click(500, 500);

将上述代码保存为 demo.js 并运行,即可看到效果。

三、Auto.js 基础语法

3.1 JavaScript 基础

Auto.js 使用 JavaScript 作为脚本语言,因此需要掌握 JavaScript 的基本语法:

  1. 变量声明

    var a = 10;      // 传统方式
    let b = 20;      // 块级作用域
    const c = 30;    // 常量
    
  2. 数据类型

    // 基本类型
    let str = "字符串";
    let num = 123;
    let bool = true;
    let nul = null;
    let undef = undefined;
    
    // 对象类型
    let obj = {key: "value"};
    let arr = [1, 2, 3];
    
  3. 函数

    function add(a, b) {
        return a + b;
    }
    
    // 箭头函数
    const multiply = (a, b) => a * b;
    

3.2 Auto.js 特有语法

  1. 全局函数
    Auto.js 提供了许多全局函数,如 click(), swipe(), sleep() 等。

  2. 模块导入
    可以使用 require() 导入其他脚本或模块:

    const app = require('app');
    const device = require('device');
    
  3. 事件监听

    // 按键监听
    events.on("key", function(code, event){
        toast("按键码: " + code);
    });
    

四、Auto.js 常用 API

4.1 设备控制 API

  1. 屏幕操作

    // 获取屏幕尺寸
    let width = device.width;
    let height = device.height;
    
    // 点击屏幕
    click(x, y);
    
    // 长按
    press(x, y, duration);
    
    // 滑动
    swipe(x1, y1, x2, y2, duration);
    
  2. 按键操作

    // 返回键
    back();
    
    // Home键
    home();
    
    // 电源键
    power();
    
    // 按下音量上键
    keyCode("volume_up");
    
  3. 传感器

    // 获取亮度
    let brightness = device.getBrightness();
    
    // 设置亮度
    device.setBrightness(0.5);
    
    // 获取电池信息
    let battery = device.getBattery();
    

4.2 UI 操作 API

  1. 选择器 API

    // 通过文本查找控件
    let btn = text("确定").findOne();
    btn.click();
    
    // 通过ID查找
    id("com.example:id/button").click();
    
    // 通过类名查找
    className("android.widget.Button").findOne().click();
    
  2. 控件操作

    // 获取控件信息
    let bounds = btn.bounds();
    let text = btn.text();
    let desc = btn.desc();
    
    // 操作控件
    btn.click();
    btn.longClick();
    btn.setText("新文本");
    
  3. 等待控件出现

    // 等待最多10秒直到控件出现
    let btn = text("确定").waitFor();
    
    // 超时处理
    try {
        let btn = text("确定").timeout(5000).findOne();
    } catch(e) {
        toast("未找到按钮");
    }
    

4.3 应用管理 API

  1. 启动和关闭应用

    // 启动应用
    app.launch("com.tencent.mm");  // 微信
    
    // 关闭应用
    app.forceStop("com.tencent.mm");
    
  2. 获取应用信息

    // 获取当前应用包名
    let current = currentPackage();
    
    // 获取所有安装的应用
    let appList = app.getInstalledApps();
    
    // 获取应用版本
    let version = app.getAppVersion("com.tencent.mm");
    
  3. 剪贴板操作

    // 设置剪贴板内容
    setClip("文本内容");
    
    // 获取剪贴板内容
    let content = getClip();
    

4.4 文件系统 API

  1. 文件读写

    // 读取文件
    let content = files.read("/sdcard/1.txt");
    
    // 写入文件
    files.write("/sdcard/1.txt", "内容");
    
    // 追加内容
    files.append("/sdcard/1.txt", "追加内容");
    
  2. 文件管理

    // 检查文件是否存在
    let exists = files.exists("/sdcard/1.txt");
    
    // 创建目录
    files.create("/sdcard/new_dir");
    
    // 删除文件
    files.remove("/sdcard/1.txt");
    
  3. 路径操作

    // 连接路径
    let path = files.join("/sdcard", "dir", "file.txt");
    
    // 获取文件名
    let name = files.getName("/sdcard/1.txt");
    

4.5 多线程 API

  1. 启动线程

    // 启动新线程
    threads.start(function(){
        while(true){
            log("子线程运行中");
            sleep(1000);
        }
    });
    
  2. 线程间通信

    // 在主线程中
    let thread = threads.start(function(){
        events.on("message", function(msg){
            toast("收到消息: " + msg);
        });
    });
    
    // 向线程发送消息
    thread.postMessage("Hello");
    
  3. 线程池

    // 使用线程池
    let pool = threads.disposable();
    pool.execute(function(){
        // 任务代码
    });
    

五、图像识别与颜色匹配

5.1 基础图像识别

  1. 截图操作

    // 截取屏幕
    let img = captureScreen();
    
    // 保存截图
    images.save(img, "/sdcard/screenshot.png");
    
  2. 找图找色

    // 在屏幕中找图
    let result = findImage(captureScreen(), "/sdcard/template.png");
    if(result){
        click(result.x, result.y);
    }
    
    // 找色
    let point = findColor(captureScreen(), "#ff0000");
    
  3. 颜色判断

    // 获取某点颜色
    let color = images.pixel(captureScreen(), 100, 200);
    
    // 判断颜色相似度
    let similar = images.isSimilar(color, "#ff0000", 10);
    

5.2 高级图像处理

  1. 图像处理函数

    // 灰度化
    let grayImg = images.grayscale(img);
    
    // 二值化
    let binaryImg = images.threshold(img, 100);
    
    // 裁剪
    let cropImg = images.clip(img, 0, 0, 100, 100);
    
  2. 模板匹配

    // 带阈值的模板匹配
    let result = images.matchTemplate(img, template, {
        threshold: 0.8
    });
    
  3. 特征匹配

    // 特征点匹配
    let detector = new images.FeatureDetector();
    let keyPoints = detector.detect(img);
    

六、实战案例

6.1 微信自动点赞

// 启动微信
app.launch("com.tencent.mm");

// 等待朋友圈加载
sleep(3000);

// 点击发现
click(device.width / 2, device.height - 100);

// 点击朋友圈
sleep(1000);
click(device.width / 2, 500);

// 循环点赞
while(true){
    // 查找未点赞的朋友圈
    let like = desc("已点赞").findOne(1000);
    if(!like){
        // 查找点赞按钮
        let btn = desc("赞").findOne(1000);
        if(btn){
            btn.click();
            toast("点赞成功");
        }
    }
    
    // 下滑
    swipe(device.width / 2, device.height * 0.8, 
          device.width / 2, device.height * 0.2, 500);
    sleep(2000);
}

6.2 自动刷短视频

// 启动抖音
app.launch("com.ss.android.ugc.aweme");

// 等待加载
sleep(5000);

// 循环刷视频
for(let i = 0; i < 50; i++){
    // 随机观看时间3-8秒
    let watchTime = random(3000, 8000);
    sleep(watchTime);
    
    // 上滑
    swipe(device.width / 2, device.height * 0.8, 
          device.width / 2, device.height * 0.2, 300);
    
    // 随机点赞
    if(random(0, 10) > 7){
        click(device.width - 100, device.height - 300);
        sleep(500);
    }
}

6.3 自动化签到脚本

// 多个应用签到
function signInAll(){
    // 微博签到
    signInWeibo();
    
    // 贴吧签到
    signInTieba();
    
    // 其他应用签到...
}

function signInWeibo(){
    app.launch("com.sina.weibo");
    sleep(5000);
    
    // 查找签到按钮
    let signBtn = text("签到").findOne(3000);
    if(signBtn){
        signBtn.click();
        toast("微博签到成功");
    } else {
        toast("微博已签到或未找到按钮");
    }
    
    // 返回桌面
    home();
}

function signInTieba(){
    app.launch("com.baidu.tieba");
    sleep(5000);
    
    // 进入我的贴吧
    click(device.width - 100, device.height - 100);
    sleep(2000);
    
    // 一键签到
    let signAll = text("一键签到").findOne(3000);
    if(signAll){
        signAll.click();
        toast("贴吧签到成功");
    } else {
        toast("贴吧已签到或未找到按钮");
    }
    
    // 返回桌面
    home();
}

// 执行签到
signInAll();

七、调试与优化

7.1 调试技巧

  1. 日志输出

    console.log("调试信息");
    console.show();  // 显示控制台
    
  2. 截图调试

    // 在出错时截图
    try {
        // 可能出错的代码
    } catch(e){
        images.save(captureScreen(), "/sdcard/error.png");
    }
    
  3. 性能分析

    // 计时
    console.time("操作");
    // 执行操作...
    console.timeEnd("操作");  // 输出耗时
    

7.2 脚本优化

  1. 减少不必要的操作

    // 优化前
    click(100, 100);
    sleep(1000);
    click(200, 200);
    
    // 优化后 - 只在需要时等待
    click(100, 100);
    let btn = id("next").findOne(1000);
    if(btn) btn.click();
    
  2. 使用选择器代替坐标

    // 不推荐 - 容易因分辨率变化失效
    click(500, 500);
    
    // 推荐 - 使用控件选择器
    text("确定").findOne().click();
    
  3. 合理使用多线程

    // 主线程处理UI
    // 子线程处理耗时操作
    threads.start(function(){
        let data = fetchData();
        ui.post(() => {
            updateUI(data);
        });
    });
    

7.3 异常处理

  1. try-catch 捕获异常

    try {
        autoOperation();
    } catch(e) {
        console.error("出错:", e);
        // 恢复操作
        home();
    }
    
  2. 超时处理

    // 设置操作超时
    function withTimeout(action, timeout) {
        let done = false;
        threads.start(function(){
            action();
            done = true;
        });
        
        let start = new Date().getTime();
        while(!done && new Date().getTime() - start < timeout){
            sleep(200);
        }
        
        if(!done) throw new Error("操作超时");
    }
    
  3. 自动恢复机制

    function retry(action, maxRetry) {
        let lastError;
        for(let i = 0; i < maxRetry; i++){
            try {
                return action();
            } catch(e) {
                lastError = e;
                sleep(1000);
                // 恢复状态
                home();
            }
        }
        throw lastError;
    }
    

八、安全与权限

8.1 权限管理

  1. 必要权限

    • 无障碍服务权限
    • 悬浮窗权限
    • 存储权限
    • 通知监听权限(可选)
  2. 检查权限

    // 检查无障碍服务
    if(!auto.service) {
        toast("请开启无障碍服务");
        app.startActivity({
            action: "android.settings.ACCESSIBILITY_SETTINGS"
        });
        exit();
    }
    
  3. 请求权限

    // 请求存储权限
    if(!requestPermission("storage")){
        toast("存储权限被拒绝");
        exit();
    }
    

8.2 脚本安全

  1. 代码混淆

    // 使用工具对脚本进行混淆
    // 防止简单反编译
    
  2. 敏感信息保护

    // 不要将密码等敏感信息直接写在脚本中
    // 使用外部加密配置文件
    let config = files.read("/sdcard/config.enc");
    
  3. 脚本签名

    // 对重要脚本进行签名
    // 验证脚本来源
    

8.3 使用限制

  1. 防检测机制

    // 随机化操作间隔
    function randomClick(x, y){
        sleep(random(300, 1500));
        click(x, y);
    }
    
  2. 操作随机化

    // 随机滑动路径
    function randomSwipe(x1, y1, x2, y2){
        let steps = random(5, 20);
        let points = [];
        // 生成随机路径点...
        gesture(random(500, 1500), points);
    }
    
  3. 使用代理

    // 设置网络代理
    if(needProxy){
        $http.setProxy("127.0.0.1", 8888);
    }
    

九、进阶主题

9.1 插件开发

  1. 创建插件

    // plugin.js
    module.exports = {
        add: function(a, b) { return a + b; },
        version: "1.0.0"
    };
    
    // 使用插件
    const plugin = require("./plugin.js");
    plugin.add(1, 2);
    
  2. 发布插件

    • 将插件代码打包
    • 提供文档和示例
    • 发布到社区或私有仓库

9.2 原生交互

  1. 调用 Android API

    // 通过JavaAdapter调用Java方法
    let Uri = android.net.Uri;
    let intent = new android.content.Intent(Intent.ACTION_VIEW, 
        Uri.parse("http://www.example.com"));
    app.startActivity(intent);
    
  2. 编写 Java 扩展

    // 通过Rhino引擎扩展Java功能
    public class MyExtension {
        public static String getDeviceInfo() {
            return Build.MODEL;
        }
    }
    

9.3 网络请求

  1. HTTP 请求

    // GET请求
    let res = http.get("http://www.example.com");
    console.log(res.body.string());
    
    // POST请求
    let res = http.post("http://www.example.com", {
        data: {key: "value"}
    });
    
  2. WebSocket

    let ws = new WebSocket("ws://example.com/ws");
    ws.on("open", () => {
        ws.send("Hello");
    });
    ws.on("message", (msg) => {
        toast("收到消息: " + msg);
    });
    

9.4 OCR 识别

  1. 使用 OCR 插件

    const ocr = require("ocr");
    let result = ocr.recognize(captureScreen());
    console.log(result.text);
    
  2. 离线 OCR

    // 使用Tesseract等引擎
    let tess = new Tesseract("/sdcard/tessdata/chi_sim.traineddata");
    let text = tess.recognize(img);
    

十、资源与社区

10.1 学习资源

  1. 官方文档

    • Auto.js 官方文档(GitHub)
    • Auto.js Pro 文档
    • AutoX.js 文档
  2. 开源项目

    • GitHub 上的 Auto.js 相关项目
    • 脚本仓库
  3. 教程与博客

    • CSDN、简书等技术社区
    • B站、YouTube 视频教程

10.2 常见问题

  1. 脚本不执行

    • 检查无障碍服务是否开启
    • 检查 Auto.js 是否被系统杀死
    • 检查脚本是否有语法错误
  2. 控件找不到

    • 使用控制台查看布局层次
    • 尝试不同的选择策略
    • 增加等待时间
  3. 性能问题

    • 减少不必要的截图和找图操作
    • 优化选择器
    • 使用多线程分担任务

10.3 社区支持

  1. 论坛与群组

    • Auto.js 官方论坛
    • QQ、Telegram 交流群
    • GitHub Issues
  2. 贡献代码

    • 参与开源项目开发
    • 提交问题和建议
    • 编写文档和教程
  3. 商业支持

    • 定制脚本开发
    • 企业级解决方案
    • 培训服务

结语

Auto.js 是一个功能强大且灵活的 Android 自动化工具,通过 JavaScript 脚本可以实现各种自动化操作。本教程详细介绍了 Auto.js 的基础知识、常用 API、实战案例以及进阶主题,希望能够帮助读者快速掌握 Auto.js 的使用。

评论 103
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百锦再@新空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值