Skip to content

TonyJiangWJ/Unify-Sign

Folders and files

NameName
Last commit message
Last commit date

Latest commit

92aa5a3 · Apr 20, 2025

History

75 Commits
Mar 14, 2025
Oct 30, 2022
Apr 18, 2025
Oct 13, 2022
Apr 18, 2025
Apr 3, 2025
Sep 13, 2022
Apr 3, 2025
Apr 17, 2025
Jan 5, 2023
Aug 5, 2023
Apr 17, 2025
Jan 5, 2023
Apr 3, 2025
Jan 5, 2023
Jan 18, 2021
Apr 17, 2025
Apr 20, 2025
Apr 17, 2025
Apr 17, 2025
Feb 7, 2023
Dec 2, 2024
Feb 7, 2023
Apr 17, 2025
Sep 13, 2022

Repository files navigation

GitHub forks GitHub stars GitHub issues Page Views Count

聚合签到 (Unify-Sign)

一个聚合多个 APP 签到任务的 Auto.js 脚本,轻松薅羊毛。

⚠️ 重要提示:依赖与环境

  • 核心依赖: 本脚本需要 特定版本的 Auto.js 才能正常运行,因为部分 APP 会检测无障碍服务,且脚本使用了内置 OCR 功能。推荐使用:
  • 不兼容:
    • 原版 Auto.js: 请关闭原版 Auto.js 的无障碍权限。
    • Auto.js Pro: 由于其无障碍限制和代码审查政策,不受支持,请勿使用。
  • 权限: 需要授予 Auto.js 必要的权限,如无障碍服务、后台运行、悬浮窗等。

✨ 主要功能

  • 聚合签到: 一次配置,自动执行多个 APP 的签到任务。
  • 支持的任务 (持续增加中):
    • 京东 - 京豆签到、种豆得豆
    • 支付宝 - 蚂蚁积分签到
    • 全家 - Fa米家 APP 签到 (倒闭)
    • 米哈游 - 原神签到
    • 淘宝 - 淘金币签到
    • 叮咚买菜 - 签到 (积分、鱼塘、果园)
    • 微博 - 积分签到
    • 淘宝/支付宝 - 芭芭农场签到
    • 手机淘宝 - 现金签到
    • 一嗨租车 - 积分签到
    • 华住会 - 积分签到
    • 网上国网 - 积分签到
    • 小米商城 - 积分签到
    • 什么值得买 - 每日签到
    • 阿里云盘 - 每日签到
    • 饿了么 - 吃货豆签到
    • 支付宝商家 - 积分签到
    • 小米钱包 - 每日签到(未完善)
    • 柚番短视频 - 自动刷泡泡 (已失效)
  • 可视化配置: 通过 可视化配置.js 方便地管理签到任务、执行时间、分组等。
  • 智能执行计划:
    • 每日首次运行时自动生成 随机化 的执行计划,避免被检测。
    • 支持查看、管理和重新生成执行计划。
  • 灵活分组:
    • 可创建执行分组,将任务按需归类,实现特定时间段的批量执行。
    • 例如:设置叮咚买菜的鱼塘和果园任务在早、中、晚三个不同时间段随机执行,确保领取所有奖励。
  • 手动执行: 支持对单个任务进行立即的手动执行测试。
  • 可扩展性: 支持开发者添加自定义的签到脚本。

🚀 使用入门

  1. 环境准备:
    • 下载并安装上文提到的 困鱼 (AutoJS.fake) 或其最新版本。
    • 将整个脚本项目文件夹放置到设备的 /sdcard/脚本/ 目录下。
  2. 授权与设置:
    • 打开 AutoJS 应用,下拉刷新列表,找到本项目。
    • 授予 AutoJS 后台弹出界面显示悬浮窗自启动电量无限制 等必要权限。
    • 保持 AutoJS 应用在后台运行(加入电池优化白名单)。
    • (可选) 通过 ADB 授权脚本自动开启无障碍权限
  3. 配置定时任务 (关键!):
    • 点击 main.js 右侧的菜单按钮,选择 更多 -> 定时任务
    • 必须main.js 设置一个 每天 0 点 左右执行的定时任务。此任务用于生成当天的随机执行计划。
  4. 配置签到任务:
    • 运行 可视化配置.js
    • 进入 签到设置,勾选你想要自动执行的签到任务。
    • 设置执行时间: 选中任务项 右滑,点击 设置执行时间,可以单独设置,也可以绑定到预设的分组。
    • 配置图像/参数 (如需): 对于需要特定配置的任务 (如叮咚签到),选中任务项 左滑,点击 更多设置,根据提示配置图像节点或其他参数。
    • 管理分组: 在 管理执行分组 中创建和配置执行分组。
  5. 生成与查看计划:
    • 配置完成后,在 签到设置 界面点击 查看执行计划
    • 首次使用或修改配置后,点击 生成执行计划 来创建或更新计划。之后可以查看当天的任务安排。
  6. 运行: 完成以上步骤后,脚本将根据生成的执行计划自动在后台执行签到任务。

⚙️ 配置与管理详解

  • 可视化配置 (可视化配置.js):
    • 签到设置: 核心管理界面。
      • 勾选/取消勾选任务。
      • 右滑 设置执行时间或绑定分组。
      • 左滑 进入更多设置 (配置图像、参数等) 或手动执行。
    • 管理执行分组: 创建、编辑、删除执行分组,并为分组设置随机时间段。
    • 查看执行计划: 查看当天已生成的任务列表和预定执行时间,可手动重新生成。
  • 执行逻辑:
    • main.js 的 0 点定时任务负责调用内部逻辑,生成一整天的、时间点随机打散的签到计划。
    • Auto.js 的定时任务调度器会根据计划在相应时间点唤起对应的签到子脚本。
  • 分组应用示例 (叮咚买菜):
    1. 管理执行分组 中创建三个分组,分别设置随机时间段:分组A (7-9点),分组B (10-12点),分组C (16-18点)。
    2. 签到设置 中:
      • 将 "叮咚签到 - 积分签到" 子任务绑定到默认分组 (或其他你希望的时间)。
      • 将 "叮咚签到 - 鱼塘" 子任务绑定到分组 A、B、C。
      • 将 "叮咚签到 - 果园" 子任务绑定到分组 A、B、C。
    3. 这样,鱼塘和果园任务每天会在早、中、晚三个时间段内各随机执行一次。

自动开启无障碍权限

  • 需要 ADB 或 Shizuku 授权 WRITE_SECURE_SETTINGS 权限给 AutoJS。

  • ADB 命令 (请将包名替换为你使用的 AutoJS 版本,可通过 context.getPackageName() 获取):

    adb shell pm grant org.autojs.autojs.modify android.permission.WRITE_SECURE_SETTINGS
  • 详细教程: 通过ADB授权脚本自动开启无障碍权限

🔧 开发自定义签到脚本

如果你想添加列表中没有的签到任务,可以按照以下步骤进行:

1. 定义任务信息

  • 创建文件 extends/CustomConfig.js (可参考 extends/CustomConfig-demo.js)。
  • 在此文件中定义你的任务编号、名称、脚本文件名等。
// extends/CustomConfig.js 示例
module.exports = {
  supported_signs: [
    // ... 你可以添加多个自定义任务
    {
      name: '我的应用签到',        // 任务显示名称
      taskCode: 'MyAppSign',     // 任务唯一标识符 (英文数字)
      script: 'MyAppSign.js',    // 对应的签到脚本文件名 (需放在 core/ 目录下)
      enabled: true,             // 默认是否启用
      // 如果有子任务 (例如一个应用内有多个签到点)
      subTasks: [
        {
          taskCode: 'dailyCheckin', // 子任务唯一标识符
          taskName: '每日签到',     // 子任务显示名称
          enabled: true,          // 默认是否启用子任务
        },
        {
          taskCode: 'bonusPoints',
          taskName: '领额外积分',
          enabled: false,
        }
      ]
    },
    // ... 其他自定义任务
  ]
}

2. 定义任务配置 (可选)

  • 如果你的签到任务需要额外的配置项 (如特定坐标、账号密码、图片识别区域等),创建 extends/CustomSignConfig.js (可参考 extends/CustomSignConfig-demo.js)。
// extends/CustomSignConfig.js 示例
module.exports = function (binder) {
  /**
   * 绑定自定义配置
   * @param {string} prefix - 配置前缀 (需唯一, 建议与 taskCode 相关)
   * @param {object} initialValues - 配置项的初始值 (如果只有图片配置, 可传 {})
   * @param {string[]} imageFields - 需要配置的图片字段列表 (可选)
   */
  binder.bindCustomSignConfig(
    'my_app_sign', // 配置前缀 (将在 config 对象中以 my_app_sign_config 访问)
    { // 初始值
      username: '',
      click_point: { x: 500, y: 1500 },
      some_option: true,
    },
    [ // 需要配置的图片 (会在“更多设置”中显示图片配置项)
      'login_button_image',
      'signin_success_image',
    ]
  );
}

// 在你的签到脚本 (core/MyAppSign.js) 中获取配置:
// let { config } = require('../config.js')(runtime, global);
// let username = config.my_app_sign_config.username;
// let loginBtnImg = config.my_app_sign_config.login_button_image;

3. 编写签到脚本

  • core/ 目录下创建与步骤 1 中 script 字段同名的 JS 文件 (例如 core/MyAppSign.js)。
  • 脚本需要继承 BaseSignRunner 并实现 exec 方法。
// core/MyAppSign.js 示例
let { config } = require('../config.js')(runtime, global);
let singletonRequire = require('../lib/SingletonRequirer.js')(runtime, global);
let FloatyInstance = singletonRequire('FloatyUtil'); // 悬浮窗工具
let widgetUtils = singletonRequire('WidgetUtils');   // 控件操作工具
let automator = singletonRequire('Automator');       // 自动化操作封装
let commonFunctions = singletonRequire('CommonFunction'); // 常用函数
// let localOcrUtil = require('../lib/LocalOcrUtil.js'); // 本地OCR (如果需要)

let BaseSignRunner = require('./BaseSignRunner.js'); // 引入基类

function MyAppSignRunner() {
  BaseSignRunner.call(this); // 调用父类构造函数

  // 实现签到执行逻辑
  this.exec = function () {
    FloatyInstance.setFloatyInfo('开始执行我的应用签到...');
    commonFunctions.launchPackage(config.my_app_sign_config.package_name); // 假设配置了包名

    // --- 无子任务的简单示例 ---
    if (!this.isTaskExecuted()) { // 检查今天是否已执行过
      // ... 在这里编写打开APP、查找按钮、点击签到等逻辑 ...
      // let loginBtn = widgetUtils.widgetGetOne(config.my_app_sign_config.login_button_image, 5000);
      // if (loginBtn) { automator.clickWidget(loginBtn); }
      // ... 更多逻辑 ...

      let success = true; // ... 判断是否签到成功 ...
      if (success) {
        this.setExecuted(); // 标记任务已完成
        FloatyInstance.setFloatyInfo('我的应用签到完成');
      } else {
        FloatyInstance.setFloatyWarning('我的应用签到失败');
      }
    }

    // --- 有子任务的示例 ---
    // 检查并执行子任务 'dailyCheckin'
    if (!this.isSubTaskExecuted({ taskCode: 'dailyCheckin' })) {
      if (this.doDailyCheckin()) { // 假设 doDailyCheckin 是签到逻辑函数
        this.setSubTaskExecuted({ taskCode: 'dailyCheckin' }); // 标记子任务完成
      }
    }
    // 检查并执行子任务 'bonusPoints'
    if (!this.isSubTaskExecuted({ taskCode: 'bonusPoints' })) {
      if (this.doBonusPoints()) {
        this.setSubTaskExecuted({ taskCode: 'bonusPoints' });
      }
    }

    commonFunctions.recycle(); // 回收资源
  };

  // (可选) 封装子任务逻辑
  this.doDailyCheckin = function() {
    FloatyInstance.setFloatyInfo('执行每日签到子任务...');
    // ... 每日签到具体逻辑 ...
    return true; // 返回是否成功
  }

  this.doBonusPoints = function() {
    FloatyInstance.setFloatyInfo('执行领额外积分子任务...');
    // ... 领积分具体逻辑 ...
    return true;
  }
}
// 设置继承关系
MyAppSignRunner.prototype = Object.create(BaseSignRunner.prototype);
MyAppSignRunner.prototype.constructor = MyAppSignRunner;

// 导出实例
module.exports = new MyAppSignRunner();

4. 测试签到脚本

  • 修改 test/测试签到功能.js 文件,将其中的 require 指向你刚创建的脚本。
// test/测试签到功能.js 修改示例
// ... 其他代码 ...

// 将 'core/DingDong.js' 替换为你自己的脚本路径
let signRunner = require('../core/MyAppSign.js');

// 设置任务名称 (用于日志和悬浮窗显示) 并执行
signRunner.setName('测试我的应用签到').exec();

// ... 其他代码 ...
  • 将所有修改后的文件复制到手机的脚本目录下。
  • 运行 test/测试签到功能.js 来单独测试你的签到逻辑是否正常工作。

5. 配置执行时间

  • 测试通过后,回到 可视化配置.js -> 签到设置
  • 找到你添加的自定义任务,右滑 设置执行时间或绑定分组。
  • 进入 查看执行计划,点击 生成执行计划,你的新任务就会被纳入自动执行计划中。

🖼️ 界面预览

  • 签到设置 签到设置
  • 执行时间设置 执行时间设置
  • 执行计划管理 执行计划管理

🔄 脚本更新

  • 运行 update/检测更新.js 检查并更新脚本。
  • 可以选择 覆盖更新备份后更新
  • 更多说明请参考 update/说明-重要.txt 文件。

🐞 问题反馈

  1. 开启日志: 在 可视化配置.js -> 高级设置 中,勾选 保存日志到文件,并将 日志文件大小 调整为 1024KB 或更大。
  2. 复现问题: 重新运行脚本直到问题出现。
  3. 收集信息:
    • 详细描述问题现象、操作步骤。
    • 提供使用的脚本版本、AutoJS 版本、手机型号、安卓版本。
    • 长截图AutoJS软件中的日志,可以的话再附上日志文件 (logs/log-verboses.log)。日志默认保存 100k,旧日志在 logs/logback
    • 如有截图或录屏更有助于定位问题。
  4. 提交:
    • 创建 ISSUE (推荐)。
    • 前往论坛反馈 邮箱注册即可,常见的问题后续会逐渐完善上去
    • 如果日志包含隐私信息,可删除敏感部分或通过邮件发送给开发者: tonyjiangwj@gmail.com

🔗 其他的脚本

☕ 支持开发者

如果觉得项目对你有帮助,欢迎请我喝杯咖啡!

  • 一元喝速溶、五元喝胶囊、十二买全家、三十三买星巴克,感激不尽!
支付宝 微信 也欢迎支付宝扫码领红包,你领我也得,双赢!
alipay_qrcode wechat_qrcode 扫码领红包
  • 也可以运行 unit/支持作者.js 在线获取红包口令,通过支付宝直接打开领取,每使用一个红包我都可以获取一分钱的收益。