基于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的用途本人概不负责。

目录
相关文章
|
24天前
|
传感器 人工智能 监控
Uni-app智慧工地数据大屏可视化监管平台源码带APP
智慧工地的核心是数字化,它通过传感器、监控设备、智能终端等技术手段,实现对工地各个环节的实时数据采集和传输,如环境温度、湿度、噪音等数据信息,将数据汇集到云端进行处理和分析,生成各种报表、图表和预警信息,帮助管理人员了解工地的实时状况,及时做出决策和调整,
43 0
|
24天前
|
监控 安全 数据可视化
java基于微服务的智慧工地管理云平台SaaS源码 数据大屏端 APP移动端
围绕施工现场人、机、料、法、环、各个环节,“智慧工地”将传统建筑施工与大数据物联网无缝结合集成多个智慧应用子系统,施工数据云端整合分析,提供专业、先进、安全的智慧工地解决方案。
31 1
|
3天前
浅蓝色的APP下载界面HMTL源码
浅蓝色的APP下载界面HMTL源码
14 0
浅蓝色的APP下载界面HMTL源码
|
6天前
|
人工智能 监控 数据可视化
Java智慧工地云平台源码带APP SaaS模式 支持私有化部署和云部署
智慧工地是指应用智能技术和互联网手段对施工现场进行管理和监控的一种工地管理模式。它利用传感器、监控摄像头、人工智能、大数据等技术,实现对施工现场的实时监测、数据分析和智能决策,以提高工地的安全性、效率和质量(技术架构:微服务+Java+Spring Cloud +UniApp +MySql)。
21 4
|
19天前
|
前端开发
app下载介绍页HTML源码
APP下载页前端自适应HTML源码,可以作为自己的软件介绍页或者app下载页,喜欢的朋友可以拿去研究
17 2
app下载介绍页HTML源码
|
23天前
|
监控 数据可视化 安全
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
环境实时数据、动态监测报警,实时监控施工环境状态,有针对性地预防施工过程中的环境污染问题,打造文明生态施工,创造绿色的生态环境。
15 0
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
游戏直播APP平台开发多少钱成本:定制与成品源码差距这么大
开发一款游戏直播APP平台所需的费用是多少?对于计划投身这一领域的投资者来说,首要关心的问题之一就是。本文将探讨两种主要的开发模式——定制开发与成品源码二次开发的成本差异及其优劣势。
|
24天前
|
移动开发 小程序
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
95 3