Auto.js 入门指南(三)第一个 Auto.js 脚本

前言

大家好,我是鲫小鱼。是一名不写前端代码的前端工程师,热衷于分享非前端的知识,带领切图仔逃离切图圈子,欢迎关注我,微信公众号:《鲫小鱼不正经》。欢迎点赞、收藏、关注,一键三连!!

第三章:第一个 Auto.js 脚本


一、理论讲解:Auto.js 脚本基础

Auto.js 脚本基于 JavaScript 语法,结合 Android 系统的无障碍服务,实现对手机界面和应用的自动化操作。初学者只需掌握基本 JS 语法和 Auto.js 常用 API,即可快速上手。

1.1 脚本结构

  • 脚本入口:从上到下顺序执行
  • 常用 API:toast、auto、app、text、click、sleep 等
  • 支持模块化、异步、UI 交互等高级特性

1.2 运行方式

  • 在 Auto.js App 内新建脚本,粘贴代码后点击"运行"
  • 支持定时、快捷方式、悬浮窗等多种触发方式

二、代码示例:Hello World 与基础操作

2.1 Hello World

javascript 复制代码
// 最简单的弹窗
toast("Hello, Auto.js!");

2.2 自动点击与查找控件

javascript 复制代码
// 自动查找并点击"设置"按钮
auto.waitFor(); // 等待无障碍服务
if (text("设置").exists()) {
    text("设置").findOne().click();
    toast("已点击设置");
} else {
    toast("未找到设置按钮");
}

2.3 自动启动 App

javascript 复制代码
// 启动微信
app.launchApp("微信");
toast("已启动微信");

2.4 组合操作:自动打开设置并切换 WiFi

javascript 复制代码
// 自动打开设置并切换 WiFi
app.launchApp("设置");
sleep(2000);
if (text("WLAN").exists()) {
    text("WLAN").findOne().click();
    toast("已进入 WLAN 设置");
}

2.5 自动输入文本

javascript 复制代码
// 自动输入内容到输入框
app.launchApp("备忘录");
sleep(2000);
if (className("android.widget.EditText").exists()) {
    className("android.widget.EditText").findOne().setText("自动输入内容示例");
    toast("已输入内容");
}

2.6 滑动操作

javascript 复制代码
// 向上滑动屏幕
swipe(device.width/2, device.height*0.8, device.width/2, device.height*0.2, 500);
toast("已滑动屏幕");

2.7 截图并保存

javascript 复制代码
// 需要在设置中开启截图权限
if (requestScreenCapture()) {
    var img = captureScreen();
    images.save(img, "/sdcard/autojs_screenshot.png");
    toast("截图已保存");
}

2.8 循环查找与条件判断

javascript 复制代码
// 循环查找某个按钮并点击,最多尝试5次
for (let i = 0; i < 5; i++) {
    let btn = text("同意").findOne(1000);
    if (btn) {
        btn.click();
        toast("已点击同意");
        break;
    } else {
        sleep(1000);
    }
}

2.9 处理弹窗

javascript 复制代码
// 检查并自动关闭弹窗
if (text("关闭").exists()) {
    text("关闭").findOne().click();
    toast("已关闭弹窗");
}

2.10 定时任务

javascript 复制代码
// 每隔10秒执行一次任务
setInterval(function() {
    toast("定时任务执行中");
}, 10000);

2.11 模块化调用

javascript 复制代码
// modules/utils.js
function sayHello(name) {
    toast("你好," + name + "!");
}
module.exports = { sayHello };

// main.js
let utils = require("./modules/utils.js");
utils.sayHello("鲫小鱼");

2.12 长按操作

javascript 复制代码
// 长按某个控件(如按钮)
var btn = text("删除").findOne(3000);
if (btn) {
    longClick(btn.bounds().centerX(), btn.bounds().centerY());
    toast("已长按删除按钮");
}

2.13 下拉刷新

javascript 复制代码
// 下拉刷新操作
swipe(device.width/2, device.height*0.3, device.width/2, device.height*0.7, 500);
toast("已下拉刷新");

2.14 获取剪贴板内容

javascript 复制代码
// 获取剪贴板内容
var clip = getClip();
toast("剪贴板内容:" + clip);

2.15 设置剪贴板内容

javascript 复制代码
// 设置剪贴板内容
setClip("Auto.js 赋值测试");
toast("已设置剪贴板内容");

2.16 发送通知

javascript 复制代码
// 发送系统通知
importClass(android.app.NotificationManager);
importClass(android.app.Notification);
var manager = context.getSystemService(context.NOTIFICATION_SERVICE);
var notification = new Notification.Builder(context)
    .setContentTitle("Auto.js 通知")
    .setContentText("这是一个自动化脚本通知")
    .setSmallIcon(android.R.drawable.ic_dialog_info)
    .build();
manager.notify(1, notification);

2.17 监听按键

javascript 复制代码
// 监听音量下键退出脚本
events.observeKey();
events.onKeyDown("volume_down", function(event) {
    toast("检测到音量下键,脚本退出");
    exit();
});

2.18 弹出输入框

javascript 复制代码
// 弹出输入框获取用户输入
var input = rawInput("请输入要搜索的内容:");
toast("你输入的是:" + input);

2.19 判断网络状态

javascript 复制代码
// 判断当前是否有网络连接
if (device.isWifiConnected() || device.isDataEnabled()) {
    toast("网络已连接");
} else {
    toast("无网络连接");
}

2.20 打开网页

javascript 复制代码
// 调用系统浏览器打开网页
app.openUrl("https://www.autojs.org/");

2.21 调用系统分享

javascript 复制代码
// 调用系统分享面板
app.sendBroadcast({
    action: "android.intent.action.SEND",
    type: "text/plain",
    packageName: "com.android.chrome",
    extras: {
        "android.intent.extra.TEXT": "Auto.js 分享测试"
    }
});

2.22 录音与播放音频

javascript 复制代码
// 录音和播放音频(需相关权限)
media.playMusic("/sdcard/Music/test.mp3");
sleep(5000);
media.stopMusic();

2.23 震动反馈

javascript 复制代码
// 震动 300 毫秒
device.vibrate(300);

2.24 获取当前应用包名

javascript 复制代码
// 获取当前前台应用包名
toast(currentPackage());

2.25 获取屏幕分辨率

javascript 复制代码
// 获取屏幕宽高
toast("分辨率:" + device.width + "x" + device.height);

三、实战项目:自动亮屏并解锁手机

3.1 需求分析

  • 自动点亮屏幕
  • 自动滑动解锁
  • 兼容不同机型的解锁方式

3.2 代码实现

javascript 复制代码
// 自动亮屏并解锁
if (!device.isScreenOn()) {
    device.wakeUp();
    sleep(1000);
}
swipe(device.width/2, device.height*0.8, device.width/2, device.height*0.2, 500); // 向上滑动解锁

四、常见问题与解决方案

问题 解决方案
脚本无反应 检查无障碍服务、悬浮窗权限是否开启
控件找不到/点击无效 尝试 text/desc/id 多种查找方式,或增加等待时间
脚本报错 查看日志输出,定位具体报错行
运行后界面无变化 检查目标 App 是否已启动,控件是否在当前页面

五、性能优化建议

  • 控件查找建议加超时,避免死循环
  • 合理使用 sleep,避免无效等待
  • 复杂操作建议拆分为函数,提升可维护性
  • 多用日志输出,便于调试和排查

最后感谢阅读!欢迎关注我,微信公众号:《鲫小鱼不正经》。欢迎点赞、收藏、关注,一键三连!!!

相关推荐
用户693717500138412 小时前
曾经安卓开发人手一个的 EventBus,为什么现在没人爱用了?
android·android studio
光影少年12 小时前
react navite 安卓iOS 打包、签名、环境区分
前端·react native·react.js
coderCN13 小时前
Nodejs 第三十四章 数据库(表达式和函数、子查询和连表)
前端·node.js
ssshooter13 小时前
AI 时代你不能不知道的 git worktree
前端·后端·面试
观测云14 小时前
AI时代的用户访问监测:观测云带你身临其境体验用户与前端UI交互旅程
前端·可观测性·观测云·rum
喵本喵叁肆14 小时前
06-M6-部门过滤与综合研判-从问答机到研判助手
前端·javascript·jquery
九皇叔叔14 小时前
MySQL ORDER BY 性能优化详解:Using filesort、联合索引、ASC/DESC 与覆盖索引
android·adb
TomEval14 小时前
【Web UI 自动化】05 - KDT 模式原理与实现
前端·ui·自动化
南雨北斗15 小时前
vue3项目状态持久化方案Pinia
前端
OriginCoding15 小时前
用 AI Agent 协作完成一个 Android TOTP 应用:从需求边界到 v1.0.0
android·ai编程