本指南详细说明如何在 Tasker 中配置 Clash Meta for Android (CMFA) 的自动化控制。
使用 BroadcastReceiver 方式可以实现完全后台控制,不会弹出任何界面!
- 已安装 CMFA(编译包含 ExternalControlReceiver 的版本)
- 已安装 Tasker
- 已授予 Tasker 必要的权限
- 首次使用前,必须在 CMFA 中手动启动一次 VPN 并授予权限
- 确认你的应用包名(见下方说明)
非常重要:不同的编译版本和配置会有不同的包名。请使用以下方法确认你的应用包名:
方法 1:通过 ADB(推荐)
adb shell pm list packages | grep clash方法 2:通过应用信息
- 长按 CMFA 应用图标
- 点击"应用信息"
- 查看应用详情中的"包名"字段
常见的包名:
- 自定义构建版本:
com.github.kr328.clash.tasker(或其他自定义名称) - Alpha 官方版本:
com.github.kr328.clash.alpha - Meta 官方版本:
com.github.metacubex.clash.meta
在下面的配置中,请将 YOUR_PACKAGE_NAME 替换为你实际的包名!
在使用 Tasker 自动化之前,必须:
- 打开 CMFA 应用
- 手动启动一次代理(会弹出 VPN 权限请求)
- 授予 VPN 权限并勾选"记住选择"
- 停止代理
之后的 Tasker 自动化才能正常工作!
- ✅ 完全后台运行,不会触发任何界面
- ✅ 适用于所有 ROM(包括 Flyme、MIUI、ColorOS 等国产 ROM)
- ✅ 无需 Root 权限
- ✅ 不受系统"后台启动限制"影响
-
打开 Tasker,点击底部 "TASKS" 标签
-
点击右下角 "+" 按钮,创建新任务
-
输入任务名称:
启动 Clash -
点击 "+" 添加动作
-
选择 System → Send Intent
-
填写以下参数:
参数 值 Action com.github.metacubex.clash.meta.action.START_CLASHCat 留空 Mime Type 留空 Data 留空 Extra 留空 Package YOUR_PACKAGE_NAME⚠️ (替换为你的实际包名,例如com.github.kr328.clash.tasker)Class 留空(重要!) Target Broadcast Receiver(非常重要!) -
点击 返回 保存
示例:如果你的包名是 com.github.kr328.clash.tasker,则 Package 字段应填写:com.github.kr328.clash.tasker
重复步骤 1,但修改以下内容:
- 任务名称:
停止 Clash - Action:
com.github.metacubex.clash.meta.action.STOP_CLASH - 其他参数保持不变
如果你想要一个单键切换开关:
- 任务名称:
切换 Clash - Action:
com.github.metacubex.clash.meta.action.TOGGLE_CLASH - 其他参数保持不变
- 点击底部 "PROFILES" 标签
- 点击右下角 "+" 创建新 Profile
- 选择 State → Net → Wifi Connected
- 在 SSID 字段输入你的家庭 Wi-Fi 名称(例如:
My Home WiFi) - 点击返回
- 在弹出的任务选择窗口中,选择
停止 Clash - 完成!当连接到指定 Wi-Fi 时,Clash 会自动停止
- 长按上面创建的 Profile
- 点击 "Add Exit Task"(添加退出任务)
- 选择
启动 Clash - 完成!当断开指定 Wi-Fi 时,Clash 会自动启动
充电时启动:
- 创建新 Profile:State → Power → Power
- 选择 Any(任何充电方式)
- 关联任务:
启动 Clash
拔电时停止:
- 长按上面的 Profile
- 点击 "Add Exit Task"
- 选择
停止 Clash
晚上 11 点自动关闭:
- 创建新 Profile:Time → 设置时间为
23:00 - 关联任务:
停止 Clash
早上 7 点自动启动:
- 创建新 Profile:Time → 设置时间为
07:00 - 关联任务:
启动 Clash
- 手动运行任务:在 TASKS 界面,点击任务名称旁的播放按钮
- 观察手机屏幕:应该不会弹出任何界面
- 打开 CMFA 应用,检查服务状态是否改变
- 触发 Profile 条件(如连接/断开 Wi-Fi),验证自动化是否生效
注意: 此方式在 Flyme 等国产 ROM 上可能会短暂弹出界面,不推荐使用。
与方案一基本相同,只需修改:
- Target:Activity(而非 Broadcast Receiver)
- Class:
com.github.kr328.clash.ExternalControlActivity
A: 请确认以下几点:
- 你编译的 APK 包含了
ExternalControlReceiver - Tasker 中 Target 设置为 Broadcast Receiver(不是 Activity)
- Class 字段留空(非常重要!)
A: 检查:
- Package 是否正确:
com.github.metacubex.clash.meta - Action 是否正确(区分大小写)
- CMFA 是否已正确安装
- 是否使用了包含 BroadcastReceiver 的版本
A: 排查步骤:
- 在 Tasker 中手动运行任务,看是否能控制 Clash
- 检查 Profile 的触发条件是否正确
- 确认 Tasker 有足够的权限(电池优化白名单、后台运行权限等)
- 查看 Tasker 的日志(运行日志功能)
A: 这是正常的。Android 要求用户首次授予 VPN 权限时必须有用户交互。解决方法:
- 首次手动在 CMFA 中启动一次,授予 VPN 权限
- 勾选"记住选择"或"不再提示"
- 之后的自动化控制就不会再弹窗了
A:
- 运行 Tasker 任务
- 如果屏幕完全没有任何反应(不闪屏、不弹窗),说明使用的是 BroadcastReceiver
- 如果短暂看到 CMFA 界面,说明还是在使用 Activity 方式
你可以在 Profile 中添加多个条件(AND 逻辑):
例如:工作日早上 8-18 点,且不在家庭 Wi-Fi 时,启动 Clash
- 创建 Profile
- 添加条件 1:Time → 08:00 to 18:00
- 点击左上角 "+" 添加条件 2:Day → 选择周一到周五
- 再添加条件 3:State → Wifi Connected → Invert(反选)→ 输入家庭 Wi-Fi SSID
- 关联任务:
启动 Clash
- 长按任务
- 选择 "Create Widget"
- 拖动到桌面
- 点击桌面图标即可一键控制 Clash
| 特性 | BroadcastReceiver | Activity |
|---|---|---|
| 后台运行 | ✅ 完全后台 | |
| ROM 兼容性 | ✅ 所有 ROM | |
| 实现复杂度 | 简单 | 简单 |
| 需要改源码 | ✅ 是(已完成) | ❌ 否(官方已支持) |
| 用户体验 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
使用 BroadcastReceiver 方式,你可以在任何 ROM上实现完全后台的 Clash 自动化控制,不会有任何界面干扰。配置完成后,Clash 会根据你设定的条件(Wi-Fi、时间、充电状态等)自动启停,真正做到"无感知"自动化。
如果遇到任何问题,请检查:
- Tasker 配置是否正确(特别是 Target 字段)
- CMFA 版本是否包含
ExternalControlReceiver - 系统权限是否充足
祝你使用愉快!🎉