ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Auto.js实战:从刷宝脚本入门Android自动化

2026/10/5 12:46:52 拓冰建站 浏览量
Auto.js实战:从刷宝脚本入门Android自动化 1. 项目概述为什么拿“刷宝”练手Auto.js到底能干什么看到这个标题估计很多人第一反应和我当初一样刷宝是个看视频给金币的App用脚本自动刷视频就能“躺赚”金币。但真把脚本跑起来之后你会发现金币收益远没有想象中高真正让我觉得“值”的反而是把Auto.js这套自动化能力彻底搞明白了。这篇文章就拿“刷宝”当一个实战案例从环境搭建、权限配置、控件识别到完整脚本代码和避坑经验一条龙拆给你看。适合刚入手Auto.js、想搞懂手机自动化到底怎么玩的新手也适合那些只想找一段能直接跑的脚本、先体验一下自动化流程的朋友。先说清楚一个现实刷宝这类App的金币发放核心逻辑就是你刷完一个视频、停留足够时间然后发放少量金币。金币攒到一定额度才能提现实际折算下来一天人工刷也就几毛钱到几块钱。脚本能做的就是把“上滑下一个视频 → 等待播放完成 → 领取金币/开宝箱 → 再来一次”这个循环自动化。所以别指望靠它发家致富拿它当Auto.js入门项目性价比反而很高。1.1 刷宝的奖励机制与自动化切入点刷宝的界面很典型底部有“视频”“任务”“我的”等页签主页面是短视频流直接上滑就能切换视频。金币奖励分为两种一是看视频过程中随机弹出“金币到账”提示二是任务中心里一些“看视频N秒”的宝箱任务。只要脚本能稳定模拟上滑、等待、偶尔点击“开宝箱”和“领取”就可以把整个流程接管过来。自动化切入的难点不在于“滑动”本身而在于“等多久”。这类App风控意识很强如果每5秒就滑一下很快会被判定为机器行为轻则金币减半重则封禁账号。所以脚本里最核心的反而不是滑动代码而是“随机等待”。等视频播完、等金币弹窗出来、等页面加载完成每个等待都要给足余量同时加入随机值让行为更像真人刷视频的节奏。明白这一点后我们再去看Auto.js提供的坐标点击、控件点击、文本匹配等功能就会发现所有操作都是围绕“怎么更稳定地识别页面状态”展开的。下面我先讲环境因为90%的新手不是代码写不对而是权限没开全、环境没搭好脚本一运行就报错。1.2 为什么选Auto.js而不是其他自动化工具市面上能做手机自动化的路子不少iOS上有快捷指令但控制粒度太粗Android上可以用按键精灵脚本但它对控件层级和文本读取能力偏弱遇到App更新很容易废也有一些基于PC连接手机的RPA工具部署重量太大不适合手机上跑个轻量脚本。Auto.js的优势在于三件事第一它不需要Root基于Android自带的无障碍服务AccessibilityService读取屏幕控件普通手机就能用第二脚本用JavaScript编写语法接近通用编程语言会一点前端或后端的人都能快速上手第三它支持悬浮窗调试、控件器、布局分析等工具写脚本时可以实时查看界面结构不用像坐标脚本那样瞎猜。当然Auto.js也有自己的坑比如无障碍权限在部分国产品牌手机上容易被系统杀掉、Android 10以上对悬浮窗限制变多、App更新后控件ID可能变化等。这些问题在后面都会讲到。先把工具装好、权限开对后面写代码才顺。2. 环境准备安装、权限与第一个原理Demo2.1 安装Auto.js与版本选择Auto.js本身是一个Android应用安装包可以从官方GitHub或应用商店下载。这里要说一下版本问题老版本4.x是开源免费的适合学习新版本7.x开始商业化功能更丰富但部分功能需要付费。我日常用4.x版本跑基础脚本完全够用除非你需要Pro版的加密、表达式插件、打包成独立App等功能否则没必要一上来就上付费版。安装时需要注意Android版本兼容性。Auto.js 4.x在Android 7~11上运行稳定在Android 12以上的设备上无障碍服务和悬浮窗的授权流程会多些步骤但基本不影响使用。安装完成后第一次打开Auto.js会提示你需要开启无障碍服务跟着引导走就行。还有一个小建议装上Auto.js之后顺手把它的“日志”和“控制台”面板打开。脚本跑挂了能看到报错位置比如“TypeError: Cannot read property click of null”大概率是控件没找到这时候看日志比瞎猜快得多。2.2 必须开好的三个权限悬浮窗、无障碍、电池优化Auto.js运行脚本前脚本里一般会写一行auto.waitFor();这行代码的作用是等待无障碍服务连接成功。如果没有开启无障碍服务脚本会一直卡在等待状态或者在日志里明确告诉你“无障碍服务未开启”。悬浮窗权限同样重要。Auto.js的悬浮窗上会显示一个“运行/停止”按钮方便你随时控制脚本。申请悬浮窗权限时部分手机会弹出“是否允许悬浮窗”的选项直接允许即可。国产手机小米、华为、OPPO、vivo通常还要去“权限管理”里手动打开“悬浮窗”开关否则申请了也可能显示不出来。第三个容易被忽略的是电池优化。很多手机默认会把Auto.js加入“省电策略”一旦屏幕熄灭或者App退到后台系统就把它杀了。我踩过最狠的一次坑是脚本跑着跑着手机熄屏第二天看日志发现脚本只运行了不到10分钟就没了。解决办法是把Auto.js的“电池优化”设为“不限制”部分手机上还要在“最近任务”里给Auto.js加锁防止一键清理时被划掉。2.3 第一个Demotext(...).findOne().bounds().click() 的原理很多新手在网上搜Auto.js代码时会看到这样一行代码text(微信).findOne().bounds().click();这行代码的意思是在屏幕上查找文本为“微信”的控件找到后获取它的bounds()控件在屏幕上的矩形边界然后调用click()点击这个矩形中心。注意bounds()是正确的写法网上很多人会手误打成bouds()一旦拼错脚本立刻报错。我之前也被这个坑过排查了半天才发现是少写了一个字母。更推荐的做法是直接用click()var wx text(微信).findOne(5000); if (wx) { wx.click(); }这段代码先找文本为“微信”的控件最多等5秒如果找到了就点击。findOne(5000)比不带参数的findOne()更安全因为它有超时时间不会因为某个控件一直不出现就把脚本挂死。理解了这行代码其实自动化脚本的核心就理解了一半Auto.js通过无障碍服务拿到当前界面的控件树再用文字、ID、正则表达式等方式定位控件最后对控件执行点击、滑动、长按等操作。这和我们在浏览器里用document.querySelector找元素、再执行element.click()是同一个思路只是平台不一样。3. 脚本核心实现刷宝自动刷视频的四步流程3.1 整体流程设计刷宝脚本的流程可以拆成四步启动刷宝App等待首页加载完成上滑切换到下一个视频根据视频长度随机等待15~35秒检测并点击“开宝箱”“领取”等奖励控件如果有广告弹窗则尝试关闭。这个流程从技术上看不复杂难的是在真实手机上稳定运行。比如冷启动时App会有开屏广告如果没等首页加载完就开始滑动很容易误触广告跳转到应用商店再比如视频加载过程中上滑可能触发“加载失败”提示导致后续流程错乱。所以脚本里的等待时间必须给足而且最好用“寻找控件成功”代替“固定sleep”来判断页面状态。我在设计时会把“滑动”和“等待”封装成单独的函数避免主循环里堆满代码。下面给出的完整脚本就是一个可运行的示例你在自己的手机上调整一下App图标名称就能用。3.2 完整代码与逐段解析下面这段代码是完整的刷宝自动刷视频脚本我用的是Auto.js 4.x版本Android 10上实测可以跑。// 等待无障碍服务连接 auto.waitFor(); // 启动刷宝App这里“刷宝”是App名称改成你手机上显示的名字 app.launchApp(刷宝); sleep(6000); // 通用函数根据文本查找控件并点击找到返回true否则返回false function clickByText(t, timeout) { timeout timeout || 5000; var target text(t).findOne(timeout); if (target) { target.click(); return true; } return false; } // 通用函数根据包含文本查找控件并点击 function clickByContainsText(t, timeout) { timeout timeout || 3000; var target textContains(t).findOne(timeout); if (target) { target.click(); return true; } return false; } // 随机等待模拟真人观看视频间隔在min和max之间 function randomWait(min, max) { var waitTime random(min, max); log(等待 waitTime 毫秒); sleep(waitTime); } // 滑动切换视频从屏幕下半部分滑向上半部分 function swipeUp() { var x device.width / 2; var y1 device.height * 0.7; var y2 device.height * 0.3; swipe(x, y1, x, y2, 200); } // 等待首页加载完成找到“视频”页签就算成功 clickByText(视频, 10000); sleep(3000); // 主循环循环刷30个视频你可以改成自己想要的次数 for (var i 0; i 30; i) { log(开始处理第 (i 1) 个视频); // 1. 上滑切视频 swipeUp(); randomWait(3000, 6000); // 2. 等待视频播放并随机停留15~35秒 randomWait(15000, 35000); // 3. 顺手点掉可能的“跳过”广告按钮 clickByText(跳过, 1000); // 4. 如果有“开宝箱”“领取”控件点击领取 clickByContainsText(开宝箱, 1000); clickByContainsText(领取, 1000); // 5. 如果弹出了“继续观看”或“关闭”按钮尝试点掉 clickByText(继续观看, 1000); clickByText(关闭, 1000); } toast(脚本执行完毕);这段代码逻辑比较直白但有几处需要注意。第一app.launchApp(刷宝)需要传入手机上显示的App名称如果你改过桌面名称就先改成原名称或者用包名启动。包名启动的方法是app.launchPackage(com.example.shuanbao)包名可以通过Auto.js的“当前应用”面板查看。第二clickByText(视频, 10000)这一步很关键。刷宝启动后可能会有开屏广告直接上滑可能误触所以我先找“视频”页签只有找到它才说明进入了主界面。如果你打开App后底部没有“视频”两个字换成“首页”或者其他你实际看到的页签名。第三主循环里我先swipeUp()然后随机等3~6秒再随机等15~35秒。前面那个3~6秒是给视频加载留的时间后面那段是模拟“完整看完一个短视频”的停留时间。如果滑动后立刻再滑动两个视频都没看够时长金币收益会变得非常低也容易触发风控。3.3 等待、滑动和随机化为什么你的脚本总像机器人很多新手写完脚本后跑起来发现金币几乎不涨或者跑几分钟后就被系统限制。原因往往不是脚本没滑动而是行为太规律了。真人刷视频有几个特点滑动的力度和位置不固定停留时间有长有短偶尔会点进评论区偶尔会双击点赞。但脚本如果每次都用固定坐标、固定间隔必然会暴露。我的做法是尽量把等待时间和滑动坐标都随机化。比如上面的randomWait(min, max)函数利用Auto.js的random(a, b)生成一个介于a和b之间的随机数让每个视频的停留时间都不一样。swipeUp()里的滑动坐标也用了device.width和device.height这样在不同屏幕分辨率的手机上都能用而不是写死像素值。另外滑动速度200表示200毫秒完成滑动手势这个值可以根据手机性能微调。如果手机卡顿可以改成300如果想要滑动更自然可以再加一个随机系数比如swipe(x, y1, x, y2, random(180, 260))。这些都是细节但细节决定脚本能不能长期跑。还有一点不要一上来就追求“每小时刷几百个视频”。我实测下来比较稳妥的节奏是每30~40秒一个视频一小时不到100个。这种频率既不会让手机过度发热也不会让账号行为显得过于异常。脚本本身是工具怎么用、用多久自己心里要有数。3.4 代码优化把重复逻辑封装成函数上面的完整代码已经把很多操作封装成了函数这是我在写脚本时比较坚持的习惯。因为自动化项目很少只写一次就完事后面往往会根据地界面变化反复修改。如果所有逻辑都堆在for循环里改一个按钮文字就要翻半天。我常用的一个封装思路是function findObj(selector, timeout) { timeout timeout || 5000; try { return selector.findOne(timeout); } catch (e) { return null; } } function clickObj(selector, timeout) { var obj findObj(selector, timeout); if (obj) { obj.click(); return true; } return false; }这样在刷宝脚本里我可以把text(跳过)这个选择器作为参数传进去需要改匹配规则时只改一行调用不用动主逻辑。熟练之后新写一个App的自动化脚本可能只需要十几分钟因为框架都是现成的。4. 常见问题与避坑实录不管代码写得再顺真机上跑起来总会遇到各种奇怪的问题。下面这几个是我在刷宝脚本上踩过、也帮朋友排查过的高频问题整理成一份避坑清单不一定能覆盖所有情况但至少能解决80%的报错。4.1 脚本提示找不到控件怎么办找不到控件是Auto.js最常见的问题。报错信息一般是“TypeError: Cannot read property click of null”意思是findOne()返回值是null也就是说屏幕上没找到匹配的控件。排查思路分三步走打开Auto.js的“布局分析”工具查看当前页面控件树。如果发现App页面里的文字根本不在控件树里有些App用Flutter或者自绘界面渲染控件信息被屏蔽那text()就抓不到只能退而求其次用坐标点击或图片识别。检查是否有弹窗或开屏广告遮挡。有时候控件其实存在但被一个透明的广告弹窗挡住click()点上去没有效果。这种需要先关掉弹窗再执行主流程。给findOne()加超时时间比如findOne(3000)这样找不到时不会无限等下去还能返回null让代码走容错分支。遇到App更新导致控件文字变化时用textContains()比text()更稳。比如“领取金币”可能变成“领取奖励”直接用textContains(领取)就能覆盖两种情况。但注意不要太宽泛否则容易误点。4.2 金币不涨、卡在广告页的排查思路刷宝这类App会有很多激励视频广告广告播放完才能拿奖励但广告页的控件和主界面完全不同。脚本如果滑到广告视频上只在那里干等金币自然不涨。我早期遇到过几次“卡死”情况日志显示脚本一直在等待15~35秒但实际屏幕停在广告落地页根本没有回到视频流。后来我加了一个“广告检测”步骤在每次随机等待前先查找text(跳过)、text(关闭)、text(知道了)等广告相关按钮有就点掉。点掉之后再等待几秒让页面恢复正常。如果广告页完全找不到关闭按钮最稳妥的方法是强制返回上一页。代码可以写back(); sleep(1000);但要注意不能乱用否则可能直接把刷宝退到桌面。我的建议是遇到实在关不掉的广告就让脚本暂停等广告超时后自动恢复不要强行点屏幕上的未知区域。4.3 手机发热、脚本被杀怎么办长时间跑自动化脚本手机发热是避免不了的。发热严重时手机系统会主动降低性能甚至关闭Auto.js服务。我的做法是在脚本主循环里加入log输出和异常捕获方便随时观察状态同时把屏幕亮度调到最低关闭后台其他App减少发热。还有一个更重要的操作把Auto.js加入白名单关闭电池优化并在最近任务里锁定它。否则屏幕熄灭后脚本很可能被系统回收。如果你需要锁屏运行Auto.js里面有一个“保持唤醒”或者“屏幕常亮”的设置需要提前开启否则锁屏后触摸事件和控件事件都会失效。不过屏幕常亮也会增加发热建议跑一段时间就停一会儿。4.4 关于封号风险与合规说点实在的这部分我必须说清楚用脚本自动刷视频本质上是在绕过App的正常用户行为违反用户协议。平台有反作弊系统轻则限制金币、降低收益重则封禁账号。我自己周边就有朋友因为脚本24小时挂机第二天账号被限制登录了。所以我的态度一直是这样Auto.js这门技术是中立的好工具可以用来做无障碍测试、自动签到、批量复制数据、辅助日常操作这些场景都值得认真学。但拿它去薅羊毛、与平台规则对抗风险要自己承担。本文的代码和思路仅供学习自动化原理和练手使用不建议长时间、多账号挂机刷量。5. 进阶扩展一套脚本框架的更多玩法刷宝脚本只是Auto.js的入门项目。当你把环境搭建、权限配置、控件定位、异常处理这套基础流程跑顺之后完全可以把它泛化到更多自动化场景里。5.1 从刷视频到定时任务Auto.js支持定时任务你可以把脚本设置成每天某个时间自动执行。比如每天早上去京东领签到红包、去支付宝收能量这些操作本身也是固定流程只要把点击路径和控件匹配方式写对就能靠脚本自动完成。定时任务通常借助Auto.js的“定时”功能或外部工具触发。如果你写的是后台循环可以在脚本里加上setInterval或while循环控制执行频率。要注意的是手机如果锁屏定时任务可能无法执行所以需要配合“息屏运行”“保持唤醒”等方案或者在固定时间内让手机亮屏放在桌上。5.2 封装一套自己的自动化脚本库跑过几个项目之后你会发现很多代码是可以复用的。我现在手机里维护着一个简单的脚本库里面包含了这些函数clickByText(text, timeout)按文本点击。clickByContainsText(text, timeout)按包含文本点击。clickByDesc(desc, timeout)按控件描述点击。swipeUp() / swipeDown() / swipeLeft() / swipeRight()封装好方向滑动。randomWait(min, max)随机等待。safeRun(fn, errorMsg)统一异常捕获脚本挂掉时打印日志而不直接退出。有了这套库我新写一个App的自动化脚本时只需要去App里分析控件树然后把对应的文本、ID和操作顺序填进去就行。整个流程比从零写代码快得多也稳定得多。5.3 最后分享一点心得我写刷宝脚本最大的收获不是刷了多少金币而是学会了怎么去“拆解一个重复动作”。看视频领金币拆开来就是启动App、等待、滑动、等待、点击每个动作再对应到Auto.js的API最终变成一段可运行、可调试的代码。这个过程和写任何程序是一样的你需要的是耐心和不断调试。如果你试着跑完这个脚本发现效果不理想先别急着放弃。打开Auto.js日志按上面说的排查思路一步步来控件找不到就开布局分析滑动无效就换随机坐标金币不涨就调等待时长。当你亲手把一个脚本调通、让它稳定运行一整天的时候那种成就感远比脚本本身值钱。最后再分享一个小技巧在脚本里加一个计数变量每处理完一个视频就通过console输出进度这样手机熄屏后你也能通过日志知道它跑到哪一步了。很多时候“脚本到底跑没跑”这个不确定感比脚本本身更让人焦虑而日志就是解决这种焦虑的最好工具。