跳转到内容
返回首页
返回博客
Tutorial

Workflows:在安卓上自动化开发任务,无需服务器

用 PocketCode Workflows 在安卓上自动化任务:事件触发、手机端 cron 定时、重试和可视化编辑器——无需服务器,全程在设备本地运行。

3 min
作者 Pelayo Naredo
Workflows:在安卓上自动化开发任务,无需服务器

每个开发者都会积攒同样的琐碎杂活:push 之后跑测试、部署完成后备份数据库、保存时自动格式化、构建失败时提醒自己。在笔记本上,你会用 CI runner、cron 任务和放在某台服务器上的几个 shell 脚本把这些拼在一起。而在手机上,通常的答案是"做不到"。PocketCode 用 Workflows 改变了这一点——这是一个事件驱动的自动化引擎,让你完全在设备本地在安卓上自动化任务,无需租用服务器,也不用在云端维持任何常驻进程。

一个工作流很容易描述:一个触发器(IDE 内部的某个事件,或一个定时计划)加上一串针对共享上下文运行的步骤序列。这就足以构建真正的开发工作流——那种平时你得专门搭一条 CI 流水线才能做的事——就在你的编辑器、终端和数据库管理器旁边完成。你可以在 Workflows 工具页面 了解这个模块的全貌。

三种创建方式

你永远不必从一张白纸开始。这个模块给了你三个入口:

方式如何创建示例
模板在 8 个内置模板中点击 启用"CI/CD 流水线"、"Push 自动部署"、"部署后备份数据库"
AI 生成输入一句提示词,得到一个可编辑的骨架"push 到 main 时,部署并通知"变成一个两步工作流
编辑器点击 "+" 悬浮按钮进入完整表单从零开始搭建,带绑定和重试策略

启用一个模板会把它克隆成一份带全新 ID 的可编辑副本,因此你可以随意调整而不动到原始模板。

触发器:什么会唤醒工作流

工作流会监听流经 IDE 的事件。引擎订阅了应用内部的事件总线,并把每个事件映射到一种触发器类型。一共有十种触发器类型

触发器触发时机典型过滤条件
Git push一次完成的 push分支("main"、"develop")
Git commit一次新的 commit分支
文件保存编辑器中保存文件扩展名(".kt"、".ts")
应用打开应用回到前台
终端命令结束一条终端命令执行完成命令模式
数据库查询执行一个查询结果返回表名
部署完成一次成功的部署服务商("vercel"、"railway")
部署失败一次失败的部署服务商
检测到错误另一个工作流失败工作流名称 / 错误模式
手动不由事件触发——按计划或手动运行

只有触发器类型匹配的已启用工作流才会进入评估,而一个可选的过滤条件会用不区分大小写的子串匹配进一步收窄范围——所以一个过滤到 main 的 Git-push 工作流会忽略其他所有分支。

定时:手机上的 cron,无需服务器

这正是"无服务器自动化"落到实处的地方。一个带手动触发器并附加了定时计划的工作流,就变成了一个定时任务。在底层,调度器封装了安卓的 WorkManager,并提供两种模式。

**间隔(Interval)**计划使用周期性工作请求。WorkManager 的下限是 15 分钟,所以更短的值会被向上钳制。预设有:

预设间隔
每 15 分钟15 分钟
每小时60 分钟
每 6 小时360 分钟

Cron 计划才是有意思的部分。PocketCode 自带一个五字段 cron 解析器(分钟、小时、日、月、星期)——不依赖任何外部库——支持 * 通配符、单个值、N,M 列表、N-M 区间以及 */N 步长。内置了两个 cron 预设:

  • 每天上午 9 点 —— 0 9 * * *
  • 每周一上午 9 点 —— 0 9 * * 1

由于 WorkManager 的周期性 API 无法表达真正的 cron,每次 cron 运行都被安排成一个一次性任务,并在完成时重新武装下一次触发,从而让 cron 无限期地持续下去。计划编辑器会根据你的表达式实时显示一个"下次触发"预览,并在解析失败的那一刻变红并提示"cron 表达式无效"——在你保存之前就给出即时反馈。这一版的解析器有意保持简单:不支持月份和星期的名称?L#、秒和年。若想深入了解表达式语法,可以查看 Workflows 文档

计划会被持久化保存,并在应用启动时重新排队,因此进程被杀掉也不会悄悄清空你的自动化。

可视化编辑器

编辑器是一个完整的表单:名称、描述、一个启用开关、一个带可选过滤条件的触发器下拉框,以及一列可重新排序、编辑或删除的步骤卡片。添加步骤会打开一个选择器,分为控制流(等待、If / Else)和动作——八种动作类型,每种都有一个易读的标签和一个动态配置表单:

动作表单字段
运行命令命令
通知标题、消息
AI 分析提示词、语言(可选)
AI 生成提示词、语言(可选)
Git 操作操作(commit/push/pull)、分支、消息
部署分支(可选)
数据库备份命令(可选)
打开文件文件路径、行号(可选)

每个动作步骤还带有可折叠的可靠性条件区块(下文详述)。在你按下顶栏的保存之前,什么都不会写入数据库——应用和取消都作用于本地编辑器状态,所以你可以自由试验。只有当工作流有了名称并且至少有一个步骤时,保存才会启用。

编辑器目前暴露了等待以及一层 If/Else。引擎本身还能执行循环(Loop)、并行(Parallel)和 Try/Catch 步骤,但为它们做可视化编辑器是一个已知的后续计划,而非当前发布的界面——所以请把它们视为引擎层面的构建块,暂时还不能从选择器里拖进来。

在步骤之间传递数据

步骤并非孤立运行——它们共享一个上下文,任何取值字段都可以用 {{binding}} 引用先前的步骤。语法如下:

表达式解析为
{{var.<name>}}一个上下文变量
{{step.<id>.status}}某个步骤的状态
{{step.<id>.output.<field>}}某个步骤输出中的一个字段
{{step.<id>.error}}某个步骤的错误信息
{{item.<alias>}}循环中的当前项
{{trigger.eventName}}启动这次运行的事件

一个无法解析的表达式会有意返回空字符串,因此对一个从未运行过的步骤(比如在被跳过的条件分支里)的绑定不会让整次运行崩掉。条件建立在同样的思路上:用等于、不等于、大于、小于、包含或为空来比较解析后的值,并用常见的 与/或/非 布尔逻辑把它们组合起来。

可靠性:重试、退避和超时

你无法信任的自动化不算自动化。每个动作步骤都支持一个重试策略和一个超时,展现在那个可折叠的可靠性区块里:

设置默认值
最大尝试次数1(不重试)
退避策略指数
初始延迟500 毫秒
最大延迟初始值 × 30
超时

退避有固定线性指数三种(指数翻倍:500、1000、2000、4000……),每种都受最大延迟的封顶限制。超时是真正的超时——一旦触发,该步骤就会被标记为已超时。你还可以给单个动作附加一个轻量条件:把它绑定到某个值,当该值为空、false、0 或 null 时,这一个步骤就会被跳过——这样你就能对单个步骤设门槛,而不必把它包进一个完整的条件里。

可供检视的运行历史

每次运行都会连同其步骤结果的完整快照一起持久化保存,这意味着历史能在崩溃后依然存在。运行时间线以最新在前的方式列出各次运行,带状态图标、时间戳、步骤数、时长,以及在出错时一行错误预览。点击某次运行会打开一个逐步下钻视图:每步的状态颜色(成功、失败、跳过、超时、运行中)、该步骤的时长、以 key=value 形式呈现的输出,以及任何错误字符串。

保留是自动的——仓库为每个工作流保留最新的 100 次运行,并丢弃超过 30 天的任何记录,这样历史既保持有用,又不会无限增长。

可以起步的模板

八个内置模板覆盖了常见场景,让你一键就能拥有可用的自动化——启用一个会把它克隆成一份可编辑副本,因此调整它绝不会动到原始模板:

  • CI/CD 流水线 —— push 时,跑测试、部署并通知你
  • Push 自动部署 —— push 到 main 时,部署并通知你
  • 部署后备份数据库 —— 部署完成后,备份数据库并通知你
  • 工作流出错时,通知你并请 AI 建议修复方案
  • 文件保存时,运行 Prettier(prettier --write .
  • 文件保存时,暂存并提交(git add -A && git commit
  • push 到 main 时,跑测试并通知你该分支受保护
  • 每次 commit 时,跑测试并通知你

用大白话描述它

如果你不想手动拼装步骤,AI 生成器能把一句提示词变成一个可编辑的工作流。它读取关键词来推断触发器("push"、"deploy failed"、"error"、"save"……)和一串动作("deploy"、"backup"、"test"、"format"、"notify"……),然后展示一个预览供你 保存并启用 或丢弃。像 "push 到 main 时,部署并通知" 这样的提示词会生成一个绑定到 main 上 Git push 的两步工作流。生成器还有一条由 LLM 支撑的路径,会使用你配置的 AI 服务商,并在出现任何问题时静默回退到启发式解析器——所以你总能得到一个预览,或一条清晰的"无法推断"提示。想了解可用的 AI 能力,可以看看我们的 定价页面

你的自动化留在你的设备上

工作流定义、运行历史和定时计划都存放在你手机上的一个本地数据库里。定义可以备份到云端以便恢复,但云端的任何内容都不会被读取来运行你的自动化——引擎在本地执行,就这样。运行历史和定时计划完全不同步:历史是设备本地的,而计划是 WorkManager 的状态,特定于每台设备。你的自动化属于你自己,它就在你所在的地方运行。

PocketCode 即将登陆 Google Play,把一整套自动化引擎——触发器、手机端 cron 定时、重试和可视化编辑器——带进你编写和交付代码的同一个应用里。加入预注册,成为最早在自己设备上试用它的人之一。

本文背后的工具

工作流

准备好试用 PocketCode 了吗?

下载应用,开始用手机编程。