{"id":15035299,"url":"https://github.com/tonyjiangwj/ant-forest","last_synced_at":"2025-10-09T06:32:52.110Z","repository":{"id":37664535,"uuid":"226867772","full_name":"TonyJiangWJ/Ant-Forest","owner":"TonyJiangWJ","description":"基于AutoJS的蚂蚁森林收能量脚本","archived":false,"fork":false,"pushed_at":"2025-09-28T13:57:38.000Z","size":16985,"stargazers_count":1487,"open_issues_count":7,"forks_count":222,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-09-28T15:52:57.919Z","etag":null,"topics":["autojs","javascript"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TonyJiangWJ.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-12-09T12:37:25.000Z","updated_at":"2025-09-28T13:57:43.000Z","dependencies_parsed_at":"2024-03-11T17:02:44.008Z","dependency_job_id":"3b8a3058-7625-45a0-866e-93bfc90c7777","html_url":"https://github.com/TonyJiangWJ/Ant-Forest","commit_stats":{"total_commits":691,"total_committers":4,"mean_commits":172.75,"dds":0.08538350217076696,"last_synced_commit":"5abe717bc0429fb555a7621f77437c78ef7d5f54"},"previous_names":[],"tags_count":265,"template":false,"template_full_name":null,"purl":"pkg:github/TonyJiangWJ/Ant-Forest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TonyJiangWJ%2FAnt-Forest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TonyJiangWJ%2FAnt-Forest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TonyJiangWJ%2FAnt-Forest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TonyJiangWJ%2FAnt-Forest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TonyJiangWJ","download_url":"https://codeload.github.com/TonyJiangWJ/Ant-Forest/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TonyJiangWJ%2FAnt-Forest/sbom","scorecard":{"id":142886,"data":{"date":"2025-08-11","repo":{"name":"github.com/TonyJiangWJ/Ant-Forest","commit":"d7c911c9f459f8b591ce947f3f629e370e89b470"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Code-Review","score":1,"reason":"Found 3/27 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"16 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":3,"reason":"binaries present in source code","details":["Warn: binary detected: lib/autojs-common.dex:1","Warn: binary detected: lib/color-region-center.dex:1","Warn: binary detected: lib/download.dex:1","Warn: binary detected: lib/encrypt.dex:1","Warn: binary detected: lib/webview-bridge.dex:1","Warn: binary detected: modules/kill-pro.dex:1","Warn: binary detected: resources/for_update/download.dex:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 6 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T08:35:21.385Z","repository_id":37664535,"created_at":"2025-08-16T08:35:21.385Z","updated_at":"2025-08-16T08:35:21.385Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000836,"owners_count":26082950,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autojs","javascript"],"created_at":"2024-09-24T20:28:06.926Z","updated_at":"2025-10-09T06:32:52.098Z","avatar_url":"https://github.com/TonyJiangWJ.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GitHub forks](https://img.shields.io/github/forks/TonyJiangWJ/Ant-Forest?style=flat-square)](https://github.com/TonyJiangWJ/Ant-Forest/forks)\n[![GitHub stars](https://img.shields.io/github/stars/TonyJiangWJ/Ant-Forest?style=flat-square)](https://github.com/TonyJiangWJ/Ant-Forest/stargazers)\n[![GitHub issues](https://img.shields.io/github/issues/TonyJiangWJ/Ant-Forest?style=flat-square)](https://github.com/TonyJiangWJ/Ant-Forest/issues)\n[![Page Views Count](https://badges.toozhao.com/badges/01HV8RHHZDJW7G9JFE65B6DZZJ/green.svg)](https://badges.toozhao.com/stats/01HV8RHHZDJW7G9JFE65B6DZZJ \"Get your own page views count badge on badges.toozhao.com\")\n\n# 蚂蚁森林自动收能量脚本\n\n基于 Auto.js 实现的蚂蚁森林自动化脚本。\n\n## **觉得本项目好用的话请给个 Star 吧~**\n\n## ⚠️ 重要提示：依赖与环境\n\n* **核心依赖**: 本脚本基于 **[AutoJS Modify](https://github.com/TonyJiangWJ/Ant-Forest/releases/download/v1.1.1.4/AutoJS.modify.latest.apk)** 或 **[困鱼 (AutoJS.fake)](https://github.com/TonyJiangWJ/Ant-Forest/releases/download/v1.1.1.4/AutoJS.fake.latest.apk)** 开发和运行。建议直接使用困鱼，因为目前市面上大部分应用检测autojs关键字，会导致黑号。\n  * **不兼容**: 不再支持原版 4.1.1（已删库且问题多）、官方 Pro 版（限制无障碍、代码审查）。\n  * **更多版本下载**: `https://wwxs.lanzouq.com/b042le51i` (密码: `b034`)\n  * **修改版 Auto.js 源代码**: [TonyJiangWJ/Auto.js](https://github.com/TonyJiangWJ/Auto.js)\n* **系统要求**:\n  * 安卓 7.0 及以上版本 (无需 ROOT)。\n  * 安卓 5.0 - 6.x 版本 (需要 ROOT 权限)。\n* **显示要求**: 脚本依赖图像识别，请**关闭**手机的**护眼模式**、**深色模式 (暗色模式)** 等可能影响屏幕颜色的功能。\n* **项目渊源**: 本项目是在 [Nick-Hopps/Ant-Forest-autoscript](https://github.com/Nick-Hopps/Ant-Forest-autoscript) (原作者 [Nick-Hoops](https://github.com/Nick-Hopps) 已不再维护) 的基础上发展而来，虽然代码已大幅重构，但仍感谢原作者的开创性工作。解锁模块参考自 [e1399579/autojs](https://github.com/e1399579/autojs)。\n\n## ✨ 主要功能\n\n* **自动收能量**:\n  * 通过“逛一逛”高效收集好友能量。\n  * 识别并跳过开启能量护罩的好友。\n  * 识别能量球倒计时，智能安排下次收取时间。\n* **多种运行模式**:\n  * **计时模式**: 根据识别到的最小倒计时启动，可设置最大等待时间。\n  * **循环模式**: 按设定次数不间断执行。\n  * **永不停止模式**: 无倒计时或超过设定时间则按设定间隔启动，实现全天候运行。\n* **智能解锁**:\n  * 自动识别屏幕锁定方式 (图形、PIN、密码)。\n  * 支持支付宝手势解锁。\n  * 支持扩展自定义解锁方式。\n* **多账号支持**:\n  * 自动切换小号进行能量收集、能量雨、同步步数。\n  * 能量雨自动按顺序赠送机会给配置的其他账号。\n* **辅助功能**:\n  * 自动使用双击卡 (可配置时间段)。\n  * 自动浇水回馈 (可配置阈值、数量、黑名单)。\n  * 自动执行能量雨 (支持赠送好友机会)。\n  * 自动执行保护地巡护。\n  * 自动收集神奇海洋能量 (需关闭 3D 模式)。\n* **高级特性**:\n  * **YOLO 目标检测**: (实验性) 更智能地识别能量球 (需下载模型)。\n  * **Shizuku 支持**: (实验性) 通过 Shizuku 获取更高权限 (如自动开启无障碍)。\n  * **可视化配置**: 通过 `可视化配置.js` 轻松管理所有设置。\n  * **配置导入/导出**: 方便备份和恢复配置。\n  * **自定义扩展**: 支持添加自定义解锁和锁屏逻辑。\n  * **运行状态显示**: 悬浮窗实时展示脚本状态和收集结果。\n  * **运行控制**: 音量键可延迟或终止脚本。\n  * **能量统计**: 图表化展示每日/每小时能量收集情况。\n* **健壮性**:\n  * 通话状态监听 (来电时自动延迟)。\n  * 设备姿态检测 (防止锁屏状态下误触)。\n  * 自动开启无障碍服务 (需 ADB 或 Shizuku 授权)。\n\n## 🚀 使用入门\n\n1. **环境准备**:\n    * 下载并安装 **[AutoJS Modify](https://github.com/TonyJiangWJ/Ant-Forest/releases/download/v1.1.1.4/AutoJS.modify.latest.apk)** 或 **[困鱼](https://github.com/TonyJiangWJ/Ant-Forest/releases/download/v1.1.1.4/AutoJS.fake.latest.apk)**。\n    * 将整个脚本项目文件夹放置到设备的 **`/sdcard/脚本/`** 目录下。\n2. **授权与设置**:\n    * 打开 AutoJS 应用，下拉刷新列表，找到本项目。\n    * 授予 AutoJS **`后台弹出界面`**、**`显示悬浮窗`**、**`自启动`**、**`电量无限制`** 等必要权限。\n    * 保持 AutoJS 应用在后台运行（加入电池优化白名单）。\n    * 关于截图权限，对于安卓12及以下的，脚本会尝试自动获取权限，但是推荐通过ADB授权，避免频繁弹出询问，对于安卓13及以上的需要ADB授权的同时停用屏幕共享保护。具体参见：[ADB授权截图权限，不再弹窗询问](https://github.com/TonyJiangWJ/Ant-Forest/issues/130)\n    * (可选) [通过 ADB 授权脚本自动开启无障碍权限](#自动开启无障碍权限)。\n3. **首次配置 (重要!)**:\n    * **必须**: 首次运行前，请务必运行 `可视化配置.js` 进行个性化设置，特别是图像相关的配置，否则脚本很可能无法正常工作。详见 [配置](#⚙️-配置) 小节。\n4. **运行脚本**:\n    * 直接运行项目或 `main.js`。\n5. **定时任务**:\n    * 如需定时自动运行，点击 `main.js` 右侧的菜单按钮，选择 `更多` -\u003e `定时任务` 进行配置。\n6. **单脚本运行**:\n    * 如果遇到提示“有任务正在队列中”，请运行 `可视化配置.js` -\u003e `高级设置` -\u003e 勾选 `单脚本运行`。\n\n## ⚙️ 配置\n\n通过运行 `可视化配置.js` 进行所有设置。\n\n* **基本操作**:\n  * 配置项按类别分组，点击进入相应菜单。\n  * 列表项可 **左滑** 进行删除或修改。\n  * 部分输入框 (如区域、颜色) 可 **左滑** 触发高级编辑控件。\n  * 右上角菜单可 **重置所有配置** 为默认值。\n* **配置管理**:\n  * 右上角菜单可 **导出/导入** 配置到 `local_config.cfg` 文件。\n  * 默认使用设备 Android ID 加密，仅本机可用。\n  * 跨设备或跨版本同步，需手动获取 `device.getAndroidId()` (运行 `setClip(device.getAndroidId())` 复制) 并在导入时输入。\n  * 运行时数据 (如统计) 的导出/导入方式同上。\n* **图像识别配置 (核心)**:\n  * **注：** 当开启YOLO识别后，可以跳过该配置，但是也可以配置部分图片用于YOLO识别失败时的保底\n  * **重要**: 由于手机分辨率和界面差异，**必须** 前往 `查找图片设置`，按照说明截取你手机上对应的图片，特别是 **逛一逛按钮** 等关键识别点。\n  * **好友能量球区域**: 前往 `图像识别相关配置` 进行设置。\n    * 点击 `实时查看可视化配置信息` 按钮可预览当前框选区域。\n    * 运行 `test/全局悬浮窗显示-配置信息.js` 可在支付宝界面上叠加显示配置区域，方便调整。\n    * 可在 `resources` 目录下放置截图 `region_check.jpg` 作为 `可视化配置.js` 的背景参考。\n    * 区域输入框可左滑使用拖动控件调整。\n  * **一键收能量**: 需要自行配置对应图片才能生效。\n* **OCR 配置**:\n  * 用于识别倒计时等文字信息。\n  * **优先级**: mlkit-ocr (需[插件](https://github.com/TonyJiangWJ/Ant-Forest/releases/download/v1.1.1.4/mlkit-ocr-plugin-latest.apk)或修改版AutoJS) \u003e PaddleOCR (需修改版AutoJS且耗电) \u003e 百度OCR (需API Key且有次数限制)。\n  * **mlkit-ocr**: 速度快，准确性尚可，基本满足需求。\n  * **PaddleOCR**: 准确性高，速度慢，**必须使用修改版 AutoJS** 并设置电量无限制。\n  * 可在 `可视化配置.js` 中调整 OCR 相关设置。\n\n## 🧩 功能详解\n\n### 核心运行模式说明\n\n* **计时模式 (默认)**:\n  * 关闭 `循环模式` 和 `永不停止模式` 时启用。\n  * 识别好友列表中的倒计时，取最小值。\n  * 如果最小值 \u003c `最大等待时间` (可在配置中修改，默认60分钟)，则按最小值等待后启动。\n  * 否则，脚本停止执行 (等待下一次定时任务)。\n* **循环模式**:\n  * 在配置中启用 `循环模式` 并设置次数。\n  * 脚本会不间断地执行指定次数后停止。\n* **永不停止模式**:\n  * 关闭 `循环模式` 并启用 `永不停止模式`。\n  * 需要设置 `重新激活时间` (可设为固定值或随机范围)。\n  * 如果识别到的最小倒计时 \u003c `重新激活时间`，则按倒计时等待。\n  * 如果识别到的最小倒计时 \u003e= `重新激活时间` (或无倒计时)，则按 `重新激活时间` 等待后启动。\n  * 实现全天候不间断运行。\n* **自定义模式脚本**:\n  * `unit` 目录下提供了预设模式的快捷启动脚本，执行后会中断当前任务并按新模式启动：\n    * `自定义1永不停止.js`: 25-35分钟随机轮询，适合白天 (如设置每天9点定时任务)。\n    * `自定义2计时停止.js`: 按倒计时执行 (最长等60分钟)，适合早晚收尾 (如设置7点、23点、0点定时任务)。\n    * `自定义3循环千次只收自己.js`: 循环收自己能量，适合能量生成前运行 (如生成前1分钟定时启动，2分钟后用 `自定义2` 停止)。\n  * 可参考这些文件创建自己的模式。\n\n### 多账号功能\n\n1. **配置**: 运行 `可视化配置.js` -\u003e `多账号管理`，添加支付宝账号并设置 **昵称** (用于能量雨赠送)，并勾选一个 **主账号**。确保添加的账号在当前设备可免密登录切换。\n2. **运行脚本**:\n    * **自动收集**: `unit/循环切换小号并收集能量.js` (支持小号给大号浇水)。\n    * **自动能量雨**: `unit/循环切换小号并执行能量雨收集.js` (建议关闭主脚本的自动能量雨)。能量雨会按 A-\u003eB-\u003eC-\u003eA 的顺序自动赠送机会。\n    * **自动同步步数**: `unit/循环切换小号用于同步数据.js`。\n    * **森林集市**: `unit/循环切换小号执行森林集市.js`\n3. **定时任务**: 为需要的脚本设置定时任务。\n\n### 能量雨收集\n\n* **手动启动**: 运行 `unit/能量雨收集.js` (或在可视化配置中开启对应开关)，然后进入能量雨界面手动点击开始，脚本会自动接管。\n* **自动启动 (无小号)**: 对 `unit/自动启动并执行能量雨.js` 创建定时任务。\n* **自动启动 (有小号)**: 使用 `unit/循环切换小号并执行能量雨收集.js` 的定时任务。\n* **配置**:\n  * 可配置自动赠送好友机会 (支持正则匹配好友名)。\n  * 开启TTS语音提醒：默认关闭，需在可视化配置-能量雨设置中开启。开启后可以在脚本遇到人机验证时，触发TTS语音提醒人工介入。\n* **效果**: 暴力点击，基本保证满分。\n\n### 拼手速脚本\n\n* **手动启动**: 运行 `unit/拼手速.js` 然后进入打地鼠攒能量界面。等倒计时开始时手动点击开始，脚本会自动点击9秒，基本拿满15次。\n* **配置**:\n  * 首次运行时，请先截图打地鼠界面，在相册中根据截图来配置具体点击的位置。点击 `更改点击区域` 即可通过拖动条控制点击的位置，操作简单不赘述，自行摸索即可。\n  * 演示视频：https://b23.tv/Zazmcwc\n* **效果**: 暴力点击，基本保证15次拿满。\n\n### 森林寻宝\n\n* **手动启动**: 运行 `unit/森林寻宝.js` 点击 `自动获取并执行任务` 将通过接口获取互助码，自动给其他人助力获取抽奖机会。\n* **自动运行**: 给该脚本设置每日两次的定时任务，避免第一次运行时，互助任务未完成。当定时任务触发时，将自动互助、领取奖励、执行逛一逛、自动消耗抽奖。\n* **配置**:\n  * 无需特别配置，但是可以分享自己的互助码，点击分享任务，分享到微信，将自动复制互助码，然后通过 `上传新的互助码` 将互助码上传即可。也可以在 `可视化配置` - `寻宝助力` 中上传或者获取互助码。可以查看当日被获取的次数、剩余有效期等。如果当日被报告无效次数大于0，建议更新互助码，当达到3次，将自动被删除。\n  * 注意互助码目前有效期是一个月，且在当前活动期内有效。请自己注意更新互助码。另外如果你每日活跃使用，你的互助码将会优先被获取，当前逻辑是活跃用户的互助码每日保底被获取3次。\n* **效果**: 每天大概能获取13次的抽奖机会，完成当期任务完全没问题。\n\n### 自动巡护\n\n* **运行**: 运行 `unit/自动巡护.js` 或为其创建定时任务。\n* **功能**: 自动将当日步数兑换为 5 次巡护机会，并执行巡护 (每日保底 3+5 次)。\n\n### 森林集市\n\n* **运行**: 运行 `unit/森林集市.js` 或为其创建定时任务。\n* **功能**: 自动浏览森林集市中的商品以获取相应的奖励能量\n\n### 神奇海洋收集\n\n* **运行**: 对 `unit/神奇海洋收集.js` 创建每天 7 点后的定时任务。\n* **配置**:\n  * `可视化配置` -\u003e `图像识别相关配置` -\u003e `神奇海洋相关配置`，按提示配置 OCR 区域、垃圾球角标位置等。\n  * 需要 OCR 支持 (至少安装 MlKitOCR 插件或使用修改版 AutoJS)。\n* **重要**: 默认无法通过无障碍点击收集，请**务必**在支付宝的神奇海洋设置中 **关闭 3D 模式** (入口: 神奇海洋右上角三点菜单 -\u003e 设置 -\u003e 关闭“3D模式”)。\n* 脚本会尝试 Shizuku 点击，若已关闭 3D 模式，忽略日志中的相关提示即可。\n\n### 自动开启无障碍权限\n\n* 需要 ADB 或 Shizuku 授权 `WRITE_SECURE_SETTINGS` 权限给 AutoJS。\n* **ADB 命令** (请将包名替换为你使用的 AutoJS 版本，可通过 `context.getPackageName()` 获取):\n\n    ```shell\n    adb shell pm grant org.autojs.autojs.modify android.permission.WRITE_SECURE_SETTINGS\n    ```\n\n* **详细教程**: [通过ADB授权脚本自动开启无障碍权限](https://github.com/TonyJiangWJ/AutoScriptBase/blob/master/resources/doc/ADB%E6%8E%88%E6%9D%83%E8%84%9A%E6%9C%AC%E8%87%AA%E5%8A%A8%E5%BC%80%E5%90%AF%E6%97%A0%E9%9A%9C%E7%A2%8D%E6%9D%83%E9%99%90.md)\n\n### 能量统计\n\n* 脚本会自动记录能量收集数据。\n* 可在 `可视化配置.js` 中查看图表化的统计信息。\n* \n  \u003cimg src=\"./resources/hourly_summary.jpg\" alt=\"hourly_summary\" height=\"400\"/\u003e\n  \u003cimg src=\"./resources/daily_summary.jpg\" alt=\"daily_summary\" height=\"400\"/\u003e\n\n## 🔧 高级定制\n\n在脚本根目录下新建 `extends` 文件夹，进行以下自定义：\n\n### 自定义设备解锁\n\n* **获取控件信息**: 运行 `unit/获取锁屏界面控件信息.js`，根据提示操作获取布局信息。\n* **创建文件**: `extends/ExternalUnlockDevice.js`\n* **编写代码**: 参考 `extends/ExternalUnlockDevice-demo.js` 实现 `unlock` 方法。\n* **测试**: 运行 `test/测试解锁.js`。\n\n```javascript\n// ExternalUnlockDevice.js 示例结构\nmodule.exports = function (obj) {\n  this.__proto__ = obj; // 继承原型\n\n  this.unlock = function(password) {\n    // 在此处编写你的设备解锁逻辑代码\n    // 例如：滑动、输入密码等\n\n    // 必须返回解锁检查结果\n    return this.check_unlock();\n  };\n};\n```\n\n### 自定义锁屏代码\n\n* **前提**: 非 ROOT 设备安卓 9 以上通常可通过无障碍服务锁屏，无需此定制。若无障碍锁屏失败，可使用此方法。\n* **创建文件**: `extends/LockScreen.js`\n* **编写代码**: 参考 `extends/LockScreen-demo.js` 实现自定义锁屏逻辑。\n* **测试**: 运行 `test/TestLockScreen.js`。\n\n```javascript\n// LockScreen.js 示例结构\nlet { config: _config } = require('../config.js')(runtime, global); // 注意 global 可能需要根据上下文调整\n\nmodule.exports = function () {\n  // 在此处编写你的锁屏逻辑代码\n  // 例如：下拉通知栏点击锁屏按钮\n  // swipe(800, 10, 800, 1000, 500); // 示例：下拉\n  // sleep(500);\n  // click(parseInt(_config.lock_x), parseInt(_config.lock_y)); // 示例：点击锁屏按钮坐标\n};\n```\n\n### 分享你的配置\n\n* 欢迎将你的自定义扩展代码 (如解锁脚本) 提交到 **[share_configs 分支](https://github.com/TonyJiangWJ/Ant-Forest/tree/share_configs)** 的 `extends` 目录下。\n* 命名建议: `ExternalUnlockDevice-手机型号.js`。\n* 其他用户可前往该分支下载使用。\n\n## 💡 实验性功能\n\n### YOLO 目标检测\n\n* **优势**: 理论上可以更智能地识别能量球，减少对固定图片和区域配置的依赖。\n* **前提**:\n  * 使用最新版 **[AutoJS Modify](https://github.com/TonyJiangWJ/Ant-Forest/releases/download/v1.1.1.4/AutoJS.modify.latest.apk)** 或 **[困鱼](https://github.com/TonyJiangWJ/Ant-Forest/releases/download/v1.1.1.4/AutoJS.fake.latest.apk)**。\n  * 运行 `独立工具/模型下载.js` 下载 YOLO 模型 (`forest_lite.onnx`)。若下载失败，请手动下载 (`https://wwxs.lanzoup.com/b042le51i` 密码: `b034`) 并解压到 `./config_data/` 目录下。\n* **启用**: `可视化配置` -\u003e `图像识别相关配置` -\u003e 打开 `使用YOLO模型识别能量球`。若环境不支持或模型未下载，将自动降级。\n* **性能**: YOLO 识别速度约 100ms，传统方案约 30-40ms，请自行取舍。默认关闭。\n\n### Shizuku 支持\n\n* **优势**: 可通过 Shizuku 获取更高权限，实现如自动授权无障碍等功能。\n* **前提**:\n  * 安装并激活 Shizuku (详见 Shizuku 官方文档)。\n  * 使用最新版 **修改版 AutoJS** 或 **困鱼**。\n  * 在 AutoJS 的抽屉菜单中启用 Shizuku 并授权。\n* **示例**: `独立工具/shizuku示例工具.js` 包含通过 Shizuku 授权媒体权限、写入 Secure 设置 (用于自动开无障碍) 等示例。\n    \u003cimg src=\"./resources/shizuku.jpeg\" alt=\"shizuku\" height=\"400\"/\u003e\n\n## 🔄 脚本更新\n\n* 运行 `update/检测更新.js` 检查并更新脚本。\n* 也可在 `可视化配置.js` 的右上角菜单中进行更新。\n* 支持覆盖更新或备份后更新。\n\n## ❓ 常见问题 (FAQ)\n\n* **可视化配置.js 异常/白屏/加载失败**:\n  * 尝试运行 `unit/功能测试-重置默认配置.js`。\n  * 确保使用的是推荐的 AutoJS 版本 (Modify 或 困鱼)。\n  * 强制关闭 AutoJS 应用后重试，可能是网络资源加载问题。\n* **报错 `Function importClass must be called with a class;...`**:\n  * 强制关闭 AutoJS 应用再打开。通常发生在跨版本更新后，新版脚本已尝试解决。\n* **运行异常/卡顿**:\n  * 强制关闭 AutoJS 应用后重试。\n  * 建议定期强制关闭 AutoJS，避免内存占用过高。\n* **图像识别遗漏/不准**:\n  * 检查是否关闭了**护眼模式/深色模式**。\n  * 尝试在 `可视化配置` 中调低 `颜色相似度` (默认已改为 20)。\n  * 确保关键图片 (如逛一逛) 已按自己手机截图替换。\n* **报错 `获取截图失败多次`**:\n  * 在 `可视化配置` -\u003e `高级设置` 中，尝试增加 `获取截图等待时间` (默认 500ms)，或取消勾选 `是否异步等待截图`（但是脚本可能会一直卡死，这个是autojs底层的bug，目前无合适解决方案）。\n* **定时任务不准时**:\n  * 检查系统电池优化设置，将 AutoJS 设为无限制/允许自启动/后台运行。\n  * 系统限制严格时，可考虑使用 Tasker 等工具通过广播触发脚本执行 (需自行研究)。\n* **基于图像分析收取不正常**:\n  * 若开启 `是否直接基于图像分析收取和帮助好友` 后运行异常，先取消勾选。\n  * 尝试勾选 `区域点击来收取能量`，并根据需要扩展自定义区域点击代码 (目前无直接扩展接口，需修改源码或等待后续支持)。\n\n## 🐞 问题反馈\n\n1. **开启日志**: 在 `可视化配置.js` -\u003e `高级设置` 中，勾选 `保存日志到文件`，并将 `日志文件大小` 调整为 1024KB 或更大。\n2. **复现问题**: 重新运行脚本直到问题出现。\n3. **收集信息**:\n    * 详细描述问题现象、操作步骤。\n    * 提供使用的脚本版本、AutoJS 版本、手机型号、安卓版本。\n    * 长截图AutoJS软件中的日志，可以的话再附上日志文件 (`logs/log-verboses.log`)。日志默认保存 100k，旧日志在 `logs/logback`。\n    * 如有截图或录屏更有助于定位问题。\n4. **提交**:\n    * **[创建 ISSUE](https://github.com/TonyJiangWJ/Ant-Forest/issues/new)** (推荐)。\n    * **[前往论坛反馈](https://autoscripts.flarum.cloud)** 邮箱注册即可，常见的问题后续会逐渐完善上去\n    * 如果日志包含隐私信息，可删除敏感部分或通过邮件发送给开发者: `tonyjiangwj@gmail.com`。\n\n## ⚠️ 已知问题\n\n* 收集完一个好友后，可能因未能立即获取其新生成的能量球倒计时而导致少量漏收。\n* 部分系统 (如 MIUI) 的省电策略可能导致 AutoJS 定时任务不准时 (非脚本问题)。\n* 通话状态监听功能可能不稳定，且 Pro 版无法使用。\n\n## 🔗 相关项目\n\n* **[蚂蚁庄园脚本](https://github.com/TonyJiangWJ/Ant-Manor)**\n* **[聚合签到-签到薅羊毛](https://github.com/TonyJiangWJ/Unify-Sign)**\n* **[AutoScriptBase](https://github.com/TonyJiangWJ/AutoScriptBase)**: 用于快速开发 AutoJS 脚本的基础项目。\n\n## 📜 更新记录\n\n* 详细的历史版本更新记录请查看 **[RELEASES 页面](https://github.com/TonyJiangWJ/Ant-Forest/releases)**。\n* 更早的记录可参考旧仓库 [RELEASES(旧仓库)](https://github.com/TonyJiangWJ/Ant-Forest-autoscript/releases)。\n\n## ☕ 支持开发者\n\n如果觉得项目对你有帮助，欢迎请我喝杯咖啡！\n\n* 一元喝速溶、五元喝胶囊、十二买全家、三十三买星巴克，感激不尽！\n\n| 支付宝 | 微信 | 也欢迎支付宝扫码领红包，你领我也得，双赢！ |\n| :----: | :----: | :----: |\n| ![alipay_qrcode](./resources/alipay_qrcode.png) | ![wechat_qrcode](./resources/wechat_qrcode.png) | ![扫码领红包](./resources/hongbao_qrcode.png) |\n\n* 也可以运行 `unit/支持作者.js` 在线获取红包口令，通过支付宝直接打开领取，每使用一个红包我都可以获取一分钱的收益。如果你不嫌烦的话可以给 `unit/支持作者自动版.js` 设置定时任务，每天自动领取。\n\n### 🙏 感谢名单 (部分)\n\n\u003cdetails\u003e\n  \u003csummary\u003eAlipay\u003c/summary\u003e\n  \u003cdiv\u003e*剑\u003c/div\u003e\n  \u003cdiv\u003e**杰\u003c/div\u003e\n  \u003cdiv\u003e**佑\u003c/div\u003e\n  \u003cdiv\u003e**豪\u003c/div\u003e\n  \u003cdiv\u003e**旸\u003c/div\u003e\n  \u003cdiv\u003e**渔\u003c/div\u003e\n  \u003cdiv\u003e**真\u003c/div\u003e\n  \u003cdiv\u003e**刚\u003c/div\u003e\n  \u003cdiv\u003e**刚\u003c/div\u003e\n  \u003cdiv\u003e**亚\u003c/div\u003e\n  \u003cdiv\u003e**成\u003c/div\u003e\n  \u003cdiv\u003e*毅\u003c/div\u003e\n  \u003cdiv\u003e**杰\u003c/div\u003e\n  \u003cdiv\u003e*之\u003c/div\u003e\n  \u003cdiv\u003e**旸\u003c/div\u003e\n  \u003cdiv\u003e*硕\u003c/div\u003e\n  \u003cdiv\u003e**杰\u003c/div\u003e\n  \u003cdiv\u003e**宏\u003c/div\u003e\n  \u003cdiv\u003e**鲁\u003c/div\u003e\n  \u003cdiv\u003e*赟\u003c/div\u003e\n  \u003cdiv\u003e*鹏\u003c/div\u003e\n  \u003cdiv\u003e**杰\u003c/div\u003e\n  \u003cdiv\u003e**恒\u003c/div\u003e\n  \u003cdiv\u003e*鹏\u003c/div\u003e\n  \u003cdiv\u003e**光**彬\u003c/div\u003e\n  \u003cdiv\u003e**胜\u003c/div\u003e\n  \u003cdiv\u003e**庭\u003c/div\u003e\n  \u003cdiv\u003e**光\u003c/div\u003e\n  \u003cdiv\u003e**杰\u003c/div\u003e\n  \u003cdiv\u003e**俊\u003c/div\u003e\n  \u003cdiv\u003e*森\u003c/div\u003e\n  \u003cdiv\u003e*悦\u003c/div\u003e\n  \u003cdiv\u003e*森\u003c/div\u003e\n  \u003cdiv\u003e*剑\u003c/div\u003e\n  \u003cdiv\u003e**亮\u003c/div\u003e\n  \u003cdiv\u003e*伟\u003c/div\u003e\n  \u003cdiv\u003e**飞\u003c/div\u003e\n  \u003cdiv\u003e**骞\u003c/div\u003e\n  \u003cdiv\u003e**旻\u003c/div\u003e\n  \u003cdiv\u003e**锟\u003c/div\u003e\n  \u003cdiv\u003e**锟\u003c/div\u003e\n  \u003cdiv\u003e**锟\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eWeChat\u003c/summary\u003e\n  \u003cdiv\u003ez*g\u003c/div\u003e\n  \u003cdiv\u003e*鸟\u003c/div\u003e\n  \u003cdiv\u003e*鸟\u003c/div\u003e\n  \u003cdiv\u003e*明\u003c/div\u003e\n  \u003cdiv\u003e*妖\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003e*济\u003c/div\u003e\n  \u003cdiv\u003e*🧸\u003c/div\u003e\n  \u003cdiv\u003eA*g\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003e*信\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003e*涛\u003c/div\u003e\n  \u003cdiv\u003eJ*k\u003c/div\u003e\n  \u003cdiv\u003e*🍅\u003c/div\u003e\n  \u003cdiv\u003e*🧸\u003c/div\u003e\n  \u003cdiv\u003eF*sW\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003eF*sW\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003e*z\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003e**昌\u003c/div\u003e\n  \u003cdiv\u003e*🍃\u003c/div\u003e\n  \u003cdiv\u003ew*x\u003c/div\u003e\n  \u003cdiv\u003e*邱\u003c/div\u003e\n  \u003cdiv\u003eG*n\u003c/div\u003e\n  \u003cdiv\u003e*河\u003c/div\u003e\n  \u003cdiv\u003e*己\u003c/div\u003e\n  \u003cdiv\u003e*漏\u003c/div\u003e\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonyjiangwj%2Fant-forest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftonyjiangwj%2Fant-forest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonyjiangwj%2Fant-forest/lists"}