基于AutoJs实现的薅羊毛App专业版源码大分享

简介: 基于AutoJs实现的薅羊毛App专业版源码大分享

源代码和Apk地址链接:https://pan.baidu.com/s/1royu3pvZ0Z_KAlfqtLBBGw  密码:yeph    

专业版肯定比个人版功能强大并且要稳定。增加了很多功能的同时也测试封号的App,对于封号的App,给予剔除。虽然App数量减少了但是都是稳定的且收益比较高的。并且一天也就刷那么十几个而已。专业版比较个人版增加了按照时间刷刷刷。同时每个app的时间可以设置,时间到达后自动进入下一个App。时间是一天之内的时间,也就是说一天之内不超过100分钟,即使间断执行程序也会按照设定时间执行。最后执行的时间就是100分钟。

      专业版增加清理缓存的功能。每次看视频结束后都会清理缓存。这样保证手机内容小的的福音。同时也是对老手机防卡的一个操作。

      专业版增加自动评论功能,这个功能是最难的,操作很多且再输入的时候经常出现错误,一般使用的输入代码是setText和Input。另外有的APP没有评论功能。

      专业版签到较之前个人版签到做了个大改版,每个App的签到都和App刷刷放到了一起。无论是签到、自动清理缓存、自动答复都使用了wateFor函数。(其实要慎用)

      专业版增加最实用的功能就是自动提现。目前提现的金额是最低额度。(接受定制)

      专业版修复了一些bug,同时也增加了一些功能。如:

  1. 修复了点赞和关注的BUG
  2. 增加了点赞和关注功能的概率(个人版是将代码写成了硬代码)
  3. 自动评论也增加了概率

专业版最大的改动其实是代码的优化。对代码做了整体规划也采用了中文名称。这样对对于阅读和修改都是非常便利的。看下截图:

 

薅羊毛专业版用到技术颇多。因为打包成Apk肯定有和用户交互的地方那也就意味着有UI界面。列举一下技术有需要技术的也可以查看本文档来复制代码。

  1. AutoJs UI技术。List、button、checkbox、input、swich等控件。
  2. AutoJs UI技术复杂页面布局。抽屉、headermenu、tab页面、垂直布局、水平布局等。
  3. Image图标使用base64格式显示。
  4. AutoJs 悬浮框。
  5. AutoJs 开启无障碍权限代码。
  6. AutoJs 开启悬浮窗权限代码。
  7. 多线程。
  8. Http访问网络。
  9. 控制台。
  10. 本地存储。
  11. 按键模拟。
  12. 事件与监听。
  13. 对话框。
  14. 设备信息。
  15. App常用函数。

先不吹牛技术了,咱们直接看薅羊毛个人版APP的截图。如下:

 

这个是写的JS脚本在AutoJs里面的效果。咱们看一看薅羊毛UI版的截图。

 

薅羊毛首页,Splash页面。可以做很多东西……

薅羊毛配置页面

前2项我就不多说了,友情提醒先开启无障碍在开启悬浮否则App会挂掉。

  1. 控制台还是不建议开启,有的App签到会失败。
  2. 是否开Toast提示,其实是无所谓的。
  3. 是否自动签到,这个还是很意义的,之前我放自动刷的前面发现有的app会卡住,防止万一我把签到放到自动刷的后面了和清理内存一起
  4. 自动评论,在我看来整个app最难的就是这个,太难了…….另外不是所有的App都让评论。
  5. 自动清理缓存,整个说过了。
  6. 自动提现,目前都是最小金额。
  7. 执行天数,大于1天就行反正我们手机少,如果是工作室多几天还行不过别指望无障碍玩工作室那样你会很崩溃,
  8. 滑动屏幕间隔,这个我默认是8秒。
  9. 随机概率,默认是十分之一,该不该无所谓吧,主要是随机点赞、随机关注、随机评论、随机上滑、随机下滑。控制着几个事件的随机概率。

薅羊毛专业版系统页面:

  1. 日志,我会将更新的日志发到这里
  2. 此版本将支持在线更新
  3. 教程还是我CSDN博客地址(以后会改)
  4. 关于就是版权说明,强调一下,我之前发布的代码有很多人转载也没写版权我就不追究了,如果有人利用我的源码和Apk文件在网络上贩卖我一定会追究。
  5. 退出……没啥说的吧

接下来我把整个App比较难写的地方写贴出来给大家提个醒,可能你们认为不是问题。献丑了不要见笑。之后我会将所有代码求全部贴出。

部局的时候出现了点问题,一直找不到合理的部局且很难看(现在也不怎么好看)。后来在AutoJs中示例看到了复杂部局就学了一下,效果还可以吧。

 

代码如下:

数据绑定代码:

function initializeFirstFrame() {
    for (let i = 0; i < videoArray.length; i++) {
        let appName = videoArray[i];
        let signMessage = "未签";
        let signValue = getSignTime(appName);
        let signColor = "#FF0000";
        if (getDate() == signValue) {
            signMessage = "已签";
            signColor = "#228B22";
        }
        //今日薅羊毛时间 1440 1400 1605-20=1585-1440=145-60=85-20=65-60
        let execTimesMessage = "";
        let key = appName + storageSign + getDate();
        let havedRunTimes = woolStorage.get("" + key + "");
        if (havedRunTimes == null) {
            execTimesMessage = ("已刷:0分");
        } else {
            if (parseInt(havedRunTimes) < 1000 * 60) {
                execTimesMessage = ("已刷时间小于1分钟");
            }
            let havedMinute = (havedRunTimes / 1000) / 60;//读取到的时间是毫秒需要转换成秒,转换成秒后在转换成分钟
            execTimesMessage = ("已刷:" + havedMinute.toFixed(2) + "分");
        }
        if (appName == "微视") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "65", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "抖音极速版") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "30", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "快手极速版") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "180", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "火山极速版") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "120", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "闪电盒子极速版") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "50", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "欢乐盒子") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "50", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "火火视频极速版") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "120", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "刷宝短视频") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "60", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "彩蛋视频") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "120", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "快音") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "120", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "中青看点") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "100", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "趣铃声") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "120", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "爱走路") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "120", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "闪鸭短视频") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "60", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else if (appName == "长豆短视频") {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "80", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        } else {
            let row = { SignColor: signColor, AppName: videoArray[i], AppIndex: (i + 1), ExecTimes: "15", IsSign: signMessage, done: false, ExecTimesMessage: execTimesMessage };
            videoItems.push(row);
        }
    }
    ui.videoList.setDataSource(videoItems);
    //小视频绑定check事件 火火视频极速版 长豆短视频 
    ui.videoList.on("item_bind", function (itemView, itemHolder) {
        itemView.done.on("check", function (checked) {
            let item = itemHolder.item;
            item.done = checked;
            let appName = item.AppName;
            let appIndex = itemView.appIndex.getText();
            item.AppIndex = appIndex;
            item.ExecTimes = itemView.execTimes.getText();
            let brushTimes = itemView.execTimes.getText();
            if (checked) {
                havedVideoChecked.put(appName, appIndex);
                havedVideoTimes.put(appName, brushTimes);
            } else {
                havedVideoChecked.remove(appName);
                havedVideoTimes.remove(appName);
            }
        });
    });
    ui.videoList.on("item_click", function (item, i, itemView, listView) {
        itemView.done.checked = !itemView.done.checked;
    });
}

 

保存配置采用的是storage,这个是不安全的只要知道名称就可以访问,敏感数据不建议使用它。保存配置代码:

ui.btnSaveWoolConfig.click(function () {
        woolStorage.put("isShowConsole", "" + ui.switchIsShowConsole.isChecked() + "");
        woolStorage.put("timesInterval", "" + ui.txtScreenSileTimesInterval.getText() + "");
        woolStorage.put("IsAutoSign", "" + ui.switchIsAutoSign.isChecked() + "");
        woolStorage.put("IsClearCache", "" + ui.switchIsClearCache.isChecked() + "");
        woolStorage.put("IsCashOut", "" + ui.switchIsCashOut.isChecked() + "");
        woolStorage.put("IsAutoComment", "" + ui.switchIsAutoComment.isChecked() + "");
        woolStorage.put("IsShowToast", "" + ui.switchIsShowToast.isChecked() + "");
        woolStorage.put("ForeachDays", "" + ui.txtForeachDays.getText() + "");
        //txtForeachDays
        toast("薅羊毛专业版配置保存成功!");
    });

具体业务代码在我之前的文章里面已经写过了,我现在把完整代码贴一下,服务器信息是我的大家别乱搞就好了哈。

 

附赠Apk地址链接:https://pan.baidu.com/s/1royu3pvZ0Z_KAlfqtLBBGw  密码:yeph

最后再次强调:我提供的是源代码,Apk是附属产品。源码和Apk的用途本人概不负责。

目录
相关文章
|
11天前
|
监控 数据可视化 安全
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
环境实时数据、动态监测报警,实时监控施工环境状态,有针对性地预防施工过程中的环境污染问题,打造文明生态施工,创造绿色的生态环境。
10 0
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
游戏直播APP平台开发多少钱成本:定制与成品源码差距这么大
开发一款游戏直播APP平台所需的费用是多少?对于计划投身这一领域的投资者来说,首要关心的问题之一就是。本文将探讨两种主要的开发模式——定制开发与成品源码二次开发的成本差异及其优劣势。
|
1月前
|
传感器 人工智能 数据可视化
Java智慧工地监管一体化云平台APP源码 SaaS模式
高支模监测:高支模立杆及倾斜角度,高支模立杆的荷载,架体的水平位移以及模板沉降情况,当检测数据超过预警值时,实时报警。
30 2
|
1月前
|
人工智能 监控 前端开发
Java智慧城管系统源码 数字城管APP系统源码 城市管理综合执法监督系统源码
Java编写的智慧城管系统源码,包含数字城管APP和综合执法监督系统,运用物联网、云计算等技术实现城市全面智慧管理。系统采用微服务架构,Java开发,结合vue前端框架和SpringBoot后端框架,支持MySQL数据库和uniapp移动端。功能模块包括执法办案、视频分析、统计分析等,提升案件办理和监管效能,促进行政执法创新,实现电子送达和非接触执法。
19 1
|
1月前
|
编解码 小程序 算法
短剧系统开发(网页版/APP/小程序)丨短剧系统开发运营版及源码出售
短剧系统开发功能旨在为用户提供观看、分享和交流短剧作品的平台,涉及多种功能和特性,
|
1月前
|
移动开发 负载均衡 小程序
代驾app开发丨代驾系统开发玩法详情丨代驾系统开发网页版/H5/小程序及源码部署
**司机/代驾员端**:司机可以通过APP接收订单,查看订单详情、路线和导航,提供现场服务并进行确认。
|
1月前
|
设计模式 测试技术 数据库
基于Android的食堂点餐APP的设计与实现(论文+源码)_kaic
基于Android的食堂点餐APP的设计与实现(论文+源码)_kaic
|
29天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
83 3
|
30天前
|
Android开发 开发者 UED
个人开发 App 成功上架手机应用市场的关键步骤
个人开发 App 成功上架手机应用市场的关键步骤
|
30天前
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?

热门文章

最新文章