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,避免无效等待
  • 复杂操作建议拆分为函数,提升可维护性
  • 多用日志输出,便于调试和排查

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

相关推荐
_r0bin_2 小时前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
IT瘾君2 小时前
JavaWeb:前端工程化-Vue
前端·javascript·vue.js
potender2 小时前
前端框架Vue
前端·vue.js·前端框架
站在风口的猪11083 小时前
《前端面试题:CSS预处理器(Sass、Less等)》
前端·css·html·less·css3·sass·html5
程序员的世界你不懂3 小时前
(9)-Fiddler抓包-Fiddler如何设置捕获Https会话
前端·https·fiddler
MoFe13 小时前
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
java·前端·.netcore
去旅行、在路上4 小时前
chrome使用手机调试触屏web
前端·chrome
CYRUS_STUDIO4 小时前
FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
android·安全·逆向
Aphasia3114 小时前
模式验证库——zod
前端·react.js
lexiangqicheng5 小时前
es6+和css3新增的特性有哪些
前端·es6·css3