安卓自动化签到方案:Auto.js 实战指南
📑 Table of Contents
安卓自动化签到方案:Auto.js 实战指南
*2026-03-19 移动开发 预计阅读 15 分钟*
引言
在移动互联网时代,各类 App 的签到任务成为许多用户日常的一部分。然而,每天手动打开多个 App 完成签到、观看视频、领取金币等操作耗时耗力。本文将介绍基于 Auto.js 的安卓自动化解决方案,帮助你实现”躺赚”金币。
一、Auto.js 简介
1.1 什么是 Auto.js
Auto.js 是一款基于 无障碍服务 的安卓自动化工具,特点:
- 无需 Root:依靠系统无障碍 API 实现自动化
- JavaScript 语法:类似 Node.js,学习曲线低
- 可视化编程:支持拖拽生成代码(Auto.js Pro)
- 丰富的 API:模拟点击、滑动、输入、截图等
1.2 Auto.js vs 其他方案
| 工具 | Root 需求 | 学习成本 | 稳定性 | 价格 |
|---|---|---|---|---|
| Auto.js | ❌ 不需要 | ⭐⭐⭐ | ⭐⭐⭐⭐ | 免费 |
| Tasker | ❌ 不需要 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 付费 |
| ADB | ❌ 不需要 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 免费 |
| Root 工具 | ✅ 需要 | ⭐⭐ | ⭐⭐⭐⭐⭐ | 免费 |
推荐: Auto.js 适合大多数用户,平衡了功能和易用性。
二、环境搭建
2.1 安卓端配置
- 安装 Auto.js
- 下载地址: https://github.com/kkevsekk1/Auto.js
- 或使用增强版: AutoX.js (https://github.com/KeiQ-AutoX/AutoX.js)
- 开启权限
- 设置 → 应用管理 → Auto.js
- 开启”无障碍服务”
- 开启”悬浮窗”
- 关闭电池优化
- 允许安装应用
- 设置 → 更多设置 → 允许安装未知来源应用
2.2 电脑端配置
- 安装 Node.js (用于编写和测试)
- 安装 VS Code
- 安装插件:
- Auto.js 语法高亮
- JavaScript/TypeScript
- 连接设备(可选)
# 手机和电脑同一 WiFi # Auto.js 内开启服务 → WiFi 连接 # VS Code 会自动发现设备
三、脚本结构设计
3.1 项目组织
my-autojs-project/
├── main.js # 主入口
├── config.js # 配置文件
├── utils/ # 工具函数
│ ├── common.js
│ ├── ad.js
│ └── navigation.js
├── apps/ # App 模块
│ ├── douyin.js
│ ├── kuaishou.js
│ ├── taobao.js
│ └── ...
├── libs/ # 第三方库
├── logs/ # 日志(自动生成)
└── README.md
3.2 核心架构
// main.js - 主控脚本
auto.waitFor(); // 等待无障碍服务启用
const apps = {
douyin: require('./apps/douyin'),
kuaishou: require('./apps/kuaishou'),
taobao: require('./apps/taobao')
};
function runAll() {
log('开始执行签到任务');
for (let [name, script] of Object.entries(apps)) {
try {
log(`▶ ${name}`);
script.run();
log(`✓ ${name} 完成`);
} catch (e) {
logError(name, e);
} finally {
goHome(); // 返回桌面
sleep(2000);
}
}
sendNotification('签到完成', '所有任务已执行完毕');
}
// 配置定时任务
schedule({
hour: 7, // 早上 7 点
minute: 30,
second: 0,
day: null // 每天
}, runAll);
// 或手动触发
runAll();
四、App 脚本示例
4.1 抖音极速版
// apps/douyin.js
const CONFIG = require('../config');
function run() {
launchApp('com.ss.android.ugc.aweme.lite');
waitForPackage('com.ss.android.ugc.aweme.lite');
sleep(5000);
// 关闭广告
closeAd();
// 进入"来赚钱"
if (clickWhenExists(text('来赚钱'), 5000)) {
sleep(3000);
// 每日签到
if (clickWhenExists(descContains('签到'), 3000)) {
log('签到成功');
sleep(2000);
pressBack();
}
// 观看视频任务
watchVideo(3);
// 返回
goHome();
}
}
function closeAd() {
const adTexts = ['跳过广告', '关闭', 'Skip'];
for (let text of adTexts) {
if (clickWhenExists(textContains(text), 2000)) {
sleep(1000);
return true;
}
}
return false;
}
function watchVideo(count) {
for (let i = 0; i < count; i++) {
log(`观看视频 ${i + 1}/${count}`);
sleep(15000); // 观看 15 秒
swipe(500, 1500, 500, 500, 500); // 上滑
sleep(2000);
}
}
module.exports = { run };
4.2 淘宝
// apps/taobao.js
const CONFIG = require('../config');
function run() {
launchApp('com.taobao.taobao');
waitForPackage('com.taobao.taobao');
sleep(6000);
closeAd();
// 签到(淘宝人生)
if (clickWhenExists(text('淘宝人生'), 5000)) {
sleep(3000);
signIn();
pressBack();
}
// 农场
if (clickWhenExists(desc('芭芭农场'), 5000)) {
farmTasks();
pressBack();
}
goHome();
}
function signIn() {
if (clickWhenExists(descContains('签到'), 3000)) {
log('淘宝签到');
sleep(2000);
return true;
}
return false;
}
function farmTasks() {
// 浇水、施肥等
const tasks = [desc('浇水'), desc('施肥')];
for (let task of tasks) {
if (clickWhenExists(task, 2000)) {
sleep(2000);
}
}
}
module.exports = { run };
4.3 通用模块
// utils/common.js - 通用函数
function clickWhenExists(selector, timeout = 5000) {
let start = Date.now();
while (Date.now() - start < timeout) {
if (selector.exists()) {
selector.click();
return true;
}
sleep(500);
}
return false;
}
function textContains(str) {
return textMatches(new RegExp(str, 'i'));
}
function descContains(str) {
return descMatches(new RegExp(str, 'i'));
}
function goHome() {
pressBack();
sleep(1000);
pressBack();
sleep(500);
pressHome();
}
function randomDelay(min = 1000, max = 3000) {
sleep(random(min, max));
}
function log(msg) {
console.log(`[${new Date().toLocaleTimeString()}] ${msg}`);
}
module.exports = {
clickWhenExists,
textContains,
descContains,
goHome,
randomDelay,
log
};
五、配置文件详解
// config.js
const CONFIG = {
// 全局参数
global: {
delay: {
min: 1000, // 最小延迟
max: 3000 // 最大延迟
},
retry: {
max: 3, // 最大重试次数
interval: 2000 // 重试间隔
},
timeout: {
waitActivity: 10000,
findElement: 5000
}
},
// App 配置
apps: {
douyin: {
package: 'com.ss.android.ugc.aweme.lite',
mainActivity: '.main.MainActivity',
tasks: ['checkin', 'watch', 'share'],
watchMinutes: 30
},
kuaishou: {
package: 'com.kuaishou.nebula',
tasks: ['checkin', 'watch']
},
taobao: {
package: 'com.taobao.taobao',
tasks: ['checkin', 'farm', 'tree']
}
},
// 通知配置
notification: {
enabled: true,
title: '自动签到',
sound: false
},
// 日志配置
log: {
enabled: true,
path: '/sdcard/autojs/logs',
keepDays: 30
}
};
module.exports = CONFIG;
六、调试与优化
6.1 调试技巧
// 1. 查看当前页面信息
console.log('当前包名:', currentPackage());
console.log('当前 Activity:', currentActivity());
// 2. 截图分析
let screenshot = captureScreen();
images.save(screenshot, '/sdcard/screenshot.png');
// 3. 打印 UI 层级
// 使用 UI 自动测试工具查看控件树
// 4. 逐步执行
// 在 VS Code 中设置断点 → WiFi 连接设备 → 调试
6.2 稳定性优化
- 使用图像识别
// 更加稳定的识别方式 let btn = findImage(buttonImage); if (btn) btn.click(); - 智能等待
// 避免固定 sleep waitForComponent(text('签到'), 10000); - 异常恢复
try { // 你的代码 } catch (e) { logError(e); restartApp(); // 重启应用 } - 模拟真人行为
// 随机延迟 randomDelay(1000, 5000); // 随机滑动轨迹 gesture([ [500, 1200], [500, 800], [500, 400] ], 1000);
七、进阶功能
7.1 OCR 文字识别
// 使用 OCR 识别屏幕文字
const ocr = require('com.starpie.autojs.ocr');
function findTextOnScreen(targetText) {
let screen = captureScreen();
let results = ocr.recognizeText(screen);
for (let item of results) {
if (item.text.includes(targetText)) {
return item.bounds; // 返回位置
}
}
return null;
}
7.2 数据统计
// 生成日报
function generateReport() {
const logs = readLogs();
const stats = analyze(logs);
let report = `=== 签到日报 ${new Date().toLocaleDateString()} ===\n`;
report += `总任务数: ${stats.total}\n`;
report += `成功: ${stats.success}\n`;
report += `失败: ${stats.fail}\n`;
report += `成功率: ${(stats.success/stats.total*100).toFixed(1)}%\n`;
saveReport(report);
sendNotification('签到报告', report);
}
7.3 多设备协同
// 使用 WebSocket 与服务器通信
const ws = new WebSocket('ws://your-server:8080');
ws.on('message', (msg) => {
if (msg === 'sync') {
uploadLogs(); // 同步日志
}
});
八、常见问题解决
Q1: 找不到控件?
A: 可能是 UI 更新,需要:
- 截图分析控件属性
- 改用图片识别
- 使用坐标点击(不推荐)
// 用图像识别替代 text()
let checkinBtn = findImage('签到按钮图片路径');
if (checkinBtn) {
checkinBtn.click();
}
Q2: 脚本运行一会儿就停止?
A: 检查:
- 是否开启了”保持唤醒”选项
- 电池优化是否关闭
- 添加防休眠代码:
device.keepScreenOn(); // 保持屏幕常亮
// 或
powerManagement.setWakeLock(true); // 保持 CPU 唤醒
Q3: 某些 App 检测到自动化?
A: 降低”人肉”度:
- 增加随机等待时间
- 使用真实滑动轨迹(贝塞尔曲线)
- 避免过于规律的操作间隔
Q4: 如何降低封号风险?
A:
- 使用小号测试
- 每个 App 间隔 1-2 小时
- 不要刷太快(模拟正常速度)
- 定期手动签到,打破规律
九、持续更新策略
9.1 版本管理
# 使用 Git 管理脚本
git init
git add .
git commit -m "feat: 新增抖音签到"
git tag v1.0
9.2 自动检测更新
// 从服务器检查脚本版本
function checkUpdate() {
let remoteVersion = getRemoteVersion();
if (remoteVersion > localVersion) {
downloadNewScript();
restartAutoJS();
}
}
十、安全与隐私
⚠️ 重要提醒:
- 不要泄露账号密码: 脚本中不要硬编码密码
- 使用加密存储:
const encrypted = encrypt('你的密码'); // 或使用钥匙串 Keychain - 权限最小化: 只申请必要的权限
- 定期清理日志: 避免敏感信息泄露
总结
Auto.js 为安卓自动化签到提供了强大的能力。通过合理的架构设计和稳定性优化,可以实现稳定、高效的自动签到系统。
核心要点:
- ✅ 使用模块化设计,每个 App 独立脚本
- ✅ 加入异常处理和重试机制
- ✅ 模拟真人操作,降低风控风险
- ✅ 完善的日志系统,便于问题排查
- ✅ 考虑使用图片识别替代文字定位
下一步: 你可以根据实际需要,添加更多 App 的签到模块。建议先从 1-2 个简单的开始测试,逐步扩展功能。