我的博客欢迎大家来踩踩:亚丁号
本次和大家分享的apk完全免费而且代码开源我先把地址和apk地址给大家。
APK地址:https://wwa.lanzoui.com/ievHlw1rnzi
源代码地址:https://wwa.lanzoui.com/iVz1Fw1qwqh
- 核心功能
无图无真想先给大家晒晒图。
一图知千意,切记用我提供的快手否则无法阅读。
功能我就不一一说了我先说下注意的地方。
一、首先此版本是免费版本,核心技术是AutojsPro开发,所以需要开启安卓系统的无障碍服务。其次本软件【签到】是基于找图技术研发找图技术需要适配分辨率,找图截图是依据OPPOR9SK开发分辨率是1080*1920的,故非此分辨率【签到】将无法运行。谢谢理解!!!最后作者wx18141782993需要购买收费版本的请联系谢谢!
二、本版本就用到几个图片且代码是完全开源的所以大家自己替换对应的图片就行可以了。
把这几个图片用截图工具自己截图替换就行了。
三、核心技术
此次用的是autojsPro7 主要使用了找图功能。友情提醒autojs4支持找图但是会宕掉,而autojsPro8不支持快手无法进行元素分析。
四、源码
"ui"; var rootUrl = "http://www.yadinghao.com"; var storageSign = "YadinghaoDouYinJiSuBanFreeAssist" var softVersion = "1.0.0" var yadinghaoStorages = storages.create(storageSign);//创建本地存储 let appName = "抖音极速版" let rootPath = "/sdcard/亚丁号/" adenTools = require('Plugin/Tools.js'); adenComment = require('Plugin/Comment.js'); let ad_area_coordinate = [0, 0, device.width, device.height * 0.55] let threshold = 0.8 let ad_image_array = adenTools.buildADArray("./Image/AD", 13); //initializeFrendTipMessage() initializeLayout() initializeReItemList() initializeConfig() ui.btnCopyText.on("click", function () { let AppCode = "890992808"; toast("复制成功: " + AppCode); setClip(AppCode); }); ui.btnDownloadApp.on("click", function () { try { app.openUrl("https://wwa.lanzoui.com/i9aLovy0bmd"); } catch (e) { console.show() toastLog("执行脚本出错...请将此页面截图联系攻城狮" + e) } }); ui.btnStartApp.on("click", function () { let wateForTime = parseInt(ui.txtAppStartWaiteTime.getText()); let isShowConsole = ui.switchIsShowConsole.isChecked(); let timesInterval = ui.txtScreenSileTimesInterval.getText(); let IsAutoSign = ui.switchIsAutoSign.isChecked(); let IsCashOut = ui.switchIsCashOut.isChecked(); let IsClearCache = ui.switchIsClearCache.isChecked(); let IsAutoComment = ui.switchIsAutoComment.isChecked(); let IsCloseApp = ui.switchIsCloseApp.isChecked(); let probability = 10; let totalTimes = ui.txtAppExecuteTime.getText() //执行时间 let consoleMessage = "不开启控制台"; if (isShowConsole) { consoleMessage = "开启控制台"; } let timesIntervalMessage = "屏幕滑动时间" + timesInterval + "(S),"; let wateForTimeMessage = "App启动时间" + wateForTime + "(S),"; let clearCacheMessage = "不清理缓存"; if (IsClearCache) { clearCacheMessage = "清理App的缓存,"; } let autoCommentMessage = "不进行自动评论,"; if (IsAutoComment) { autoCommentMessage = "自动评论话术采用系统内预定义的,"; } let autoSignMessage = "不进行自动签到."; if (IsAutoSign) { autoSignMessage = "自动签到."; } let totalHour = parseFloat(totalTimes / 60).toFixed(2);//转成小时 let key = appName + storageSign + adenTools.getDate(); let havedRunTimes = yadinghaoStorages.get("" + key + ""); //系统存储已经执行的时间 let havedMinute = (havedRunTimes / 1000) / 60;//读取到的时间是毫秒需要转换成秒,转换成秒后在转换成分钟 let tipMessage = appName + "本次共执行:" + totalHour + "小时.已经执行" + havedMinute.toFixed(2) + "分." + wateForTimeMessage + consoleMessage + timesIntervalMessage + autoCommentMessage + clearCacheMessage + autoSignMessage; confirm(tipMessage).then(value => { if (value) { threads.start(function () { auto.waitFor(); saveConfig()//保存一下配置 threads.start(function () { if (isShowConsole) { console.show(); console.setPosition(0, device.height / 3); } }); //开启截图功能 if (!requestScreenCapture()) { toastLog("请求截图失败"); stop(); } 抖音极速版(appName, wateForTime, timesInterval, probability, totalTimes, IsAutoSign, IsAutoComment) if (IsClearCache) { clearAppCache() } if (IsCashOut) { autoCashOut() } if (IsCloseApp) { clearCach(appName) } }); } else { toastLog("操作被取消了"); } }); }); function 抖音极速版(appName, wateForTime, timesInterval, probability, execTimes, isAutoSign, isAutoComment) { app.launchApp(appName);//启动App adenTools.toastLog("当前自动阅读程序" + appName + "等待进入");//系统日志提示 adenTools.cutDownBySleep(wateForTime)//启动App时候等待时间 clickVideoMenu() adenTools.adolescentWindows();//关闭青少年窗口 adenTools.closeUpgradetWindows();//关闭升级提示框 if (isAutoSign) { autoSign(appName) } adenTools.adolescentWindows();//关闭青少年窗口 adenTools.closeUpgradetWindows();//关闭升级提示框 while (true) { try { var start = new Date().getTime();//App起始时间 let x1 = random(device.width * 0.8, device.width * 0.9); let y1 = device.height - (device.height * 0.15) let x2 = random(device.width * 0.8, device.width * 0.9); let y2 = device.height * 0.2 let pressTime = random(700, 800); keepBrush() adenTools.clickAreaForFindImage(ad_image_array) adenTools.randomHeart('like_icon', probability);//随机关注百分之一的概率 adenTools.randomFollow('series_follow', probability) if (isAutoComment) autoComment(probability) adenTools.randomUpSildeScreen(x1, y2, x1, y1, pressTime, probability); adenTools.randomDownSildeScreen(x1, y1, x2, y2, pressTime, timesInterval, probability); adenTools.slideScreenDown(x1, y1, x2, y2, pressTime, timesInterval, false); adenTools.appRunTimeRecord(appName, (new Date().getTime() - start))//记录一次时间 adenTools.computerExctueTime(appName, execTimes) } catch (error) { toastLog(appName + "刷刷刷时出现错误!" + error); sleep(timesInterval * 1000) } } } function clickVideoMenu() { adenTools.clickControlBounds(text("首页")); } function closeAD() { adenTools.clickControlBounds(text("我知道了")); if (id("tv_close").exists()) { clickControlBounds(id("tv_close")); } if (id("iv_close").exists()) { clickControlBounds(id("iv_close")); } } function keepBrush() { if (text("电影").exists()) { clickVideoMenu() } } /** * 自动签到 */ function autoSign(appName) { toastLog("开始签到") let signValue = adenTools.getSignTime(appName); if (adenTools.getDate() == signValue) { toastLog("已签到本次签到跳过..."); return; } let redpack_image_array = ["./Image/抖音艺极速版/红包1.png", "./Image/抖音艺极速版/红包2.png"] let earnmoney_image_array = ["./Image/抖音艺极速版/来赚钱.png", "./Image/抖音艺极速版/来赚钱1.png"] if (!adenTools.clickAreaForFindImage(redpack_image_array)) { if (!adenTools.clickAreaForFindImage(earnmoney_image_array)) { toastLog("查找元素失败无法签到") return } } adenTools.sleepRandom3() //是个网页加载的慢 adenTools.clickAreaForFindImage(ad_image_array)//关闭签到成功ad弹窗 adenTools.sleepRandom1() //等待弹窗 let sign_image_array = ["./Image/抖音艺极速版/立即签到.png", "./Image/抖音艺极速版/金币明细.png"] // adenTools.recordSignTime(appName); // adenTools.sleepRandom1() //等待弹窗 if (adenTools.clickAreaForFindImage(sign_image_array)) { adenTools.recordSignTime(appName); adenTools.sleepRandom1() //等待弹窗 adenTools.clickAreaForFindImage(ad_image_array)//关闭签到成功ad弹窗 adenTools.sleepRandom1() //等待弹窗 if(!adenTools.clickControlBounds(text("首页"))){ back() } } else { } } /** * 自动评论 */ function autoComment(probability) { let randomIndex = random(1, parseInt(probability)); if (randomIndex == 1) { let comment_image_array = ["./Image/爱奇艺极速版/评论1.png", "./Image/爱奇艺极速版/评论2.png"] let comment = adenComment.CommentKeyWord[Math.floor(Math.random() * adenComment.CommentKeyWord.length)]; if (adenTools.clickAreaForFindImage(comment_image_array)) { toastLog("开始评论" + comment) adenTools.sleepRandom1() if (adenTools.clickControlBounds(text("快留下你的精彩评论吧"))) { adenTools.sleepRandom1() setText(0, comment); adenTools.sleepRandom1() if (adenTools.clickControlBounds(text("发送"))) { adenTools.sleepRandom1() back(); } adenTools.clickAreaForFindImage(ad_image_array) } } else { toastLog("查找评论按钮失败...") } } } /** * 清理缓存 */ function clearAppCache() { toastLog("开始App清理缓存"); if (adenTools.clickControlBounds(text("我"))) { adenTools.sleepRandom3() //是个网页加载的慢 adenTools.swipeDown() if (adenTools.clickControlBounds(desc("更多"))) { adenTools.sleepRandom1() if (adenTools.clickControlBounds(text("设置"))) { adenTools.sleepRandom1() adenTools.swipeDown() adenTools.clickControlBounds(text("清理缓存")) adenTools.sleepRandom1() adenTools.clickControlBounds(text("清理")) back() adenTools.sleepRandom1() adenTools.clickControlBounds(text("首页")); } } else { toastLog("未发现settings") } } else { toastLog("未发现我的") } } /** * 自动提现 */ function autoCashOut() { console.hide() try { toastLog("开始提现") if (adenTools.clickControlBounds(text("赚钱"))) { adenTools.sleepRandom3() //是个网页加载的慢 let coin_image_array = ["./Image/爱奇艺极速版/金币明细.png"] if (adenTools.clickAreaForFindImage(coin_image_array)) { adenTools.sleepRandom1() if (adenTools.clickControlBounds(text("提现"))) { let cashout_image_array = ["./Image/爱奇艺极速版/立即提现.png", "./Image/爱奇艺极速版/立.png", "./Image/爱奇艺极速版/即.png", "./Image/爱奇艺极速版/提.png", "./Image/爱奇艺极速版/现.png"] if (adenTools.clickAreaForFindImage(cashout_image_array)) { back() adenTools.sleepRandom1() clickVideoMenu() } else { back() adenTools.sleepRandom1() back() adenTools.sleepRandom1() clickVideoMenu() } } }else{ toastLog("点击金币明细失败") } } } catch (error) { toastLog(error); } } function saveConfig() { yadinghaoStorages.put("isShowConsole", "" + ui.switchIsShowConsole.isChecked() + ""); yadinghaoStorages.put("timesInterval", "" + ui.txtScreenSileTimesInterval.getText() + ""); yadinghaoStorages.put("isCashOut", "" + ui.switchIsCashOut.isChecked() + ""); yadinghaoStorages.put("isAutoSign", "" + ui.switchIsAutoSign.isChecked() + ""); yadinghaoStorages.put("isClearCache", "" + ui.switchIsClearCache.isChecked() + ""); yadinghaoStorages.put("isAutoComment", "" + ui.switchIsAutoComment.isChecked() + ""); yadinghaoStorages.put("wateForTime", "" + ui.txtAppStartWaiteTime.getText() + ""); yadinghaoStorages.put("isCloseApp", "" + ui.switchIsCloseApp.isChecked() + ""); yadinghaoStorages.put("exectueTime", "" + ui.txtAppExecuteTime.getText() + ""); } function initializeLayout() { ui.layout( <vertical> <frame > <scroll> <vertical> <text text="欢迎使用" textSize="20sp" textColor="#FF7F50" gravity="center" /> <horizontal gravity="center" > <text text="{{appName}}" textSize="32sp" textColor="#FF7F50" gravity="center" /> <text text="{{softVersion}}" textSize="16sp" textColor="#FF7F50" gravity="bottom" /> <text text="辅助" textSize="20sp" textColor="#FF7F50" /> </horizontal> <text w="auto" color="#111111" size="26" text="相关软件推荐" textColor="black" padding="8 8 8 8" /> <list id="reItemList" padding="25 0 8 8" > <horizontal h="40"> <text id="appIndex" text="{{this.ProductIndex}}、" inputType="number" w="40" gravity="center" textColor="#228B22" /> <text id="txtSoftName" textSize="18sp" textColor="#000000" text="{{SoftName}}" textColor="#228B22" /> <button text="下载" id="btnDownLoad" style="Widget.AppCompat.Button.Borderless" w="52" textColor="#FF7F50" /> <button text="访问" id="btnVistorWeb" style="Widget.AppCompat.Button.Borderless" w="52" textColor="#FF7F50" /> </horizontal> </list> </vertical> </scroll> </frame> <frame id="frameSecondTab"> <scroll> <vertical> <text w="auto" color="#111111" size="26" text="系统配置" textColor="black" padding="8 8 8 8" /> <list id="reItemList" padding="25 0 8 8" > <horizontal h="40"> <text id="appIndex" text="{{this.ProductIndex}}、" inputType="number" w="40" gravity="center" textColor="#228B22" /> <text id="txtSoftName" textSize="18sp" textColor="#000000" text="{{SoftName}}" textColor="#228B22" /> <button text="下载" id="btnDownLoad" style="Widget.AppCompat.Button.Borderless" w="52" textColor="#FF7F50" /> <button text="访问" id="btnVistorWeb" style="Widget.AppCompat.Button.Borderless" w="52" textColor="#FF7F50" /> </horizontal> </list> </vertical> </scroll> </frame> <scroll> <vertical> <vertical> <horizontal > <text text="{{appName}}邀请码:890992808" textColor="#228B22" paddingLeft="14" /> <button text="复制" id="btnCopyText" style="Widget.AppCompat.Button.Borderless" w="52" textColor="#FF7F50" /> </horizontal> </vertical> {/* 下载 */} <vertical> <horizontal > <text text="下载 " textColor="#228B22" paddingLeft="14" /> <text text="{{appName}}" textColor="#228B22" /> <button text="下载" id="btnDownloadApp" style="Widget.AppCompat.Button.Borderless" w="52" textColor="#FF7F50" /> </horizontal> </vertical> {/* 无障碍服务 */} <horizontal> <horizontal h="auto" w="0" layout_weight="1"> <img margin="13" w="20" h="20" src="https://ucc.alicdn.com/images/user-upload-01/2022010614280981777.png" /> <text text="无障碍服务" marginTop="15" textSize="15sp" /> </horizontal> <Switch id="switchEnbleAutoService" marginTop="13" marginRight="6" /> </horizontal> {/* 悬浮窗权限 */} <horizontal> <horizontal h="auto" w="0" layout_weight="1"> <img margin="13" w="20" h="20" src="https://ucc.alicdn.com/images/user-upload-01/2022010614280917295.png" /> <text text="悬浮窗权限" marginTop="15" textSize="15sp" /> </horizontal> <Switch id="switchEnbleFloating" marginTop="13" marginRight="6" /> </horizontal> {/* 是否开启控制台 */} <vertical> <horizontal > <img w="50" h="50" padding="16" src="https://ucc.alicdn.com/images/user-upload-01/2022010614280999769.png"></img> <Switch id='switchIsShowConsole' text="是否开启控制台(不建议开启偶尔会遮挡点击事件" paddingTop="16" textColor="black" /> </horizontal> </vertical> {/* 是否强制停止 */} <vertical> <horizontal > <img w="50" h="50" padding="16" src="https://ucc.alicdn.com/images/user-upload-01/2022010614280989320.png"></img> <Switch id='switchIsCloseApp' text="是否强制停止(不是所有手机都支持)" paddingTop="16" textColor="black" /> </horizontal> </vertical> {/* 是否自动签到 */} <vertical> <horizontal > <img w="50" h="50" padding="16" src="https://ucc.alicdn.com/images/user-upload-01/2022010614280966137.png"></img> <Switch id='switchIsAutoSign' text="是否自动签到 " paddingTop="16" textColor="black" /> </horizontal> </vertical> {/* 是否自动提现 */} <vertical> <horizontal > <img w="50" h="50" padding="16" src="https://ucc.alicdn.com/images/user-upload-01/2022010614280966137.png"></img> <Switch id='switchIsCashOut' text="是否自动提现 " paddingTop="16" textColor="black" /> </horizontal> </vertical> {/* 是否自动评论 */} <vertical> <horizontal > <img w="50" h="50" padding="16" src="https://ucc.alicdn.com/images/user-upload-01/2022010614281018258.png"></img> <Switch id='switchIsAutoComment' text="是否自动评论" paddingTop="16" textColor="black" /> </horizontal> </vertical> {/* 是否自动清理缓存 */} <vertical> <horizontal > <img w="50" h="50" padding="16" src="https://ucc.alicdn.com/images/user-upload-01/2022010614281086610.png"></img> <Switch id='switchIsClearCache' text="是否自动清理缓存" paddingTop="16" textColor="black" /> </horizontal> </vertical> {/* 屏幕滑动时间间隔 系统内部加减2秒*/} <vertical> <horizontal > <text text="屏幕滑动时间间隔(系统内部加减2秒):" textColor="red" padding="8 8 8 8" /> <input id="txtScreenSileTimesInterval" text="10" hint="视频之间的滑动时间间隔" inputType="number" padding="8 8 8 8" /> </horizontal> </vertical> {/* App启动时间 */} <vertical> <horizontal > <text text="App启动时间(秒):" textColor="red" padding="8 8 8 8" /> <input id="txtAppStartWaiteTime" text="30" hint="App启动时间(秒)" inputType="number" padding="8 8 8 8" /> </horizontal> </vertical> {/* App执行时间 */} <vertical> <horizontal > <text text="App执行时间(分):" textColor="red" padding="8 8 8 8" /> <input id="txtAppExecuteTime" text="120" hint="App执行时间(分)" inputType="number" padding="8 8 8 8" /> </horizontal> </vertical> <horizontal> <button style="Widget.AppCompat.Button.Colored" id="btnStartApp" text="启动" padding="12dp" w="*" /> </horizontal> </vertical> </scroll> </vertical> ) } function initializeFrendTipMessage() { try { dialogs.build({ title: "友情提醒", positive: "确定", negative: "复制微信", neutral: "访问官网", items: ["首先此版本是免费版本,核心技术是AutojsPro开发,所以需要开启安卓系统的无障碍服务。\r\n其次本软件【签到】是基于找图技术研发找图技术需要适配分辨率,找图截图是依据OPPOR9SK开发分辨率是1080*1920的,故非此分辨率【签到】将无法运行。谢谢理解!!!\r\n最后作者wx18141782993需要购买收费版本的请联系谢谢!"] }).on("negative", () => { app.openUrl("www.yadinghao.com"); }).on("neutral", () => { app.openUrl("www.yadinghao.com"); }).on("show", (dialog) => { }).show(); } catch (e) { console.show() toastLog("initializeFrendTipMessage出错...请将此页面截图联系攻城狮" + e) } } function initializeReItemList() { try { var result_threads = threads.disposable(); threads.start(function () { let dict_result = [] try { var url_address = rootUrl + "/api/AppFindRecommendSoft?type=1"; response = http.post(url_address, { "type": "1" }); if (response.statusCode == 200) { var product_json = response.body.json(); if (product_json.success == "true") { var ProducCloudList = []; let recProductList = JSON.parse(product_json.data) for (let i = 0; i < recProductList.length; i++) { let row = { ProductIndex: (i + 1), SoftName: recProductList[i].PRODUCT_NAME, DownURL: recProductList[i].DOWNLOAD_URL, VistorURL: recProductList[i].VISTOR_URL }; ProducCloudList.push(row); } dict_result = [true, ProducCloudList] result_threads.setAndNotify(dict_result); } else { dict_result = [false, "读取云端信息出现问题:" + json.message] result_threads.setAndNotify(dict_result); } } else if (response.statusCode == 404) { dict_result = [false, "读取云端信息出现问题访问服务器出现错误404错误请稍后重试"] result_threads.setAndNotify(dict_result); } else { dict_result = [false, "读取云端信息出现问题无法连接服务器"] result_threads.setAndNotify(dict_result); } } catch (error) { dict_result = [false, "读取云端脚本出现问题:" + error] result_threads.setAndNotify(dict_result); } }); result_threads = result_threads.blockedGet() if (result_threads[0] == false) { toastLog(result_threads[1]) } else { ui.reItemList.setDataSource(result_threads[1]); } } catch (error) { toastLog("initializeReItemList构建推荐脚本出现错误:" + error) } ui.reItemList.on("item_bind", function (itemView, itemHolder) { itemView.btnDownLoad.on("click", function () { try { let item = itemHolder.item; let url = item.DownURL app.openUrl(url); } catch (e) { //悬浮窗爱出错On Windows Shift + Alt + F 代码格式 console.show() toastLog("btnDownLoad执行脚本出错...请将此页面截图联系攻城狮" + e) } }); itemView.btnVistorWeb.on("click", function () { try { let item = itemHolder.item; let url = item.VistorURL app.openUrl(url); } catch (e) { //悬浮窗爱出错On Windows Shift + Alt + F 代码格式 console.show() toastLog("btnVistorWeb执行脚本出错...请将此页面截图联系攻城狮" + e) } }); }); } function initializeConfig() { /** * 无障碍服务 */ ui.switchEnbleAutoService.on("check", function (checked) { // 用户勾选无障碍服务的选项时,跳转到页面让用户去开启 if (checked && auto.service == null) { app.startActivity({ action: "android.settings.ACCESSIBILITY_SETTINGS" }); } if (!checked && auto.service != null) { auto.service.disableSelf(); } }); if (auto.service == null) ui.switchEnbleAutoService.setChecked(false); else ui.switchEnbleAutoService.setChecked(true); // 当用户回到本界面时,resume事件会被触发 ui.emitter.on("resume", function () { // 此时根据无障碍服务的开启情况,同步开关的状态 ui.switchEnbleAutoService.checked = auto.service != null; }); /** * 悬浮窗权限 */ ui.switchEnbleFloating.on("check", (checked) => { //toastLog(checked); if (checked == false) {//这里autojs测试版7好像有问题只能这么写 //toastLog(1); } else { let floaty_right = floaty.checkPermission(); if (floaty_right) { //toastLog("已经开启") } else { app.startActivity({ packageName: "com.android.settings", className: "com.android.settings.Settings$AppDrawOverlaySettingsActivity", data: "package:" + context.getPackageName(), }); } } }); var isShowConsole = yadinghaoStorages.get("isShowConsole"); if (isShowConsole != null && isShowConsole == "true") { ui.switchIsShowConsole.setChecked(true); } else { ui.switchIsShowConsole.setChecked(false); } var timesInterval = yadinghaoStorages.get("timesInterval"); if (timesInterval != null) { ui.txtScreenSileTimesInterval.setText(timesInterval); } var IsAutoSign = yadinghaoStorages.get("isAutoSign"); var IsClearCache = yadinghaoStorages.get("isClearCache"); var IsAutoComment = yadinghaoStorages.get("isAutoComment"); if (IsAutoComment != null && IsAutoComment == "true") { ui.switchIsAutoComment.setChecked(true); } else { ui.switchIsAutoComment.setChecked(false); } if (IsAutoSign != null && IsAutoSign == "true") { ui.switchIsAutoSign.setChecked(true); } else { ui.switchIsAutoSign.setChecked(false); } if (IsClearCache != null && IsClearCache == "true") { ui.switchIsClearCache.setChecked(true); } else { ui.switchIsClearCache.setChecked(false); } var IsCashOut = yadinghaoStorages.get("isCashOut"); if (IsCashOut != null && IsCashOut == "true") { ui.switchIsCashOut.setChecked(true); } var WateForTime = yadinghaoStorages.get("WateForTime"); if (WateForTime != null) { ui.txtWateForTime.setText(WateForTime); } var exectueTime = yadinghaoStorages.get("exectueTime"); if (exectueTime != null) { ui.txtAppExecuteTime.setText(exectueTime); } var IsCloseApp = yadinghaoStorages.get("isCloseApp"); if (IsCloseApp != null && IsCloseApp == "true") { ui.switchIsCloseApp.setChecked(true); } else { ui.switchIsCloseApp.setChecked(false); } }
- 机型选择
我开发采用的是OppoR9SK 分辨率是1920*1080的。所以大家尽量和我机器一样,如果不一样分辨率一样也行,实在不一样就自己截图替换一下图片就行了。
我封装了几个NB的找图方法还算NBA大家可以看看。
我的博客欢迎大家来踩踩:亚丁号
主要是有自媒体和自动化的东西总有一个是你喜欢的。