前几天我的回归脚本又红了一片,原因还是那个老熟人:产品把「提交订单」改成了「确认下单」。
改选择器、加重试、写 data-testid,这套动作我闭着眼都能做。干这行久了,你会默认一件事——界面自动化就是人写规则,机器照着执行。
所以当我看到有个叫 Mika 的开源项目,说「你说一句话,它自己点手机」,我第一反应不是惊叹,是怀疑:不写脚本,那按钮改名了它怎么办?
Mika 是什么

Mika 是装在你安卓手机上的一个 App。你打开它说一句话,它就去操作手机上的其他 App——不是给你建议,是真点进去、翻页、打字、下单。
「今天群里聊了什么?」它把群聊翻一遍,再给你总结。
「30 美元以内、4.5 星以上的充电器。」它挑一个加进购物车,结账前停下。
「这个博主最近发了什么?」它打开 App 一条条读。
还有更日常的:在 BOSS 直聘上给三个岗位的 HR 打招呼、找一个城市飞另一个城市最便宜的直飞、读新闻站前五条和各自分数、点外卖把券叠满然后在付款前问你。
它干活的时候,不占你的屏幕。 你继续刷微信,它在一块你看不见的屏上操作。想看就点开对话页上那个实时小画面。
也不需要逐个 App 做适配。它像人一样看屏幕找按钮,没有 App 的 API 照样能用。
代价得先说清楚:Android 11 起能装,但操作 App 要 12+,推荐 14+。
装它,配它

装完不是立刻能用,得先过两道:配模型和配对手机操作。这两件事的地位不一样,先说清楚。
配模型是必须的。 Mika 自己不提供模型,你说话它得有个模型来接。不配这一步,打开只能干看着。
配对手机操作是可选的。 只有你要让它去点别的 App 才需要。如果只想聊天、用内置浏览器、处理文件,这一大段可以直接跳过。
第一步:下载和配模型。 从 Releases 下载 APK(仓库 wangzan101/Mika,这篇按 v0.1.33 写,这项目几乎天天发版,你下到的多半比它新)。装完打开,设置 › 模型,选服务商填 Key,或者直接账号登录。
服务商预置了 DeepSeek、通义千问、Kimi、智谱、硅基流动、火山方舟、MiniMax、阶跃星辰、腾讯混元、百度千帆、OpenRouter、Anthropic、Gemini、OpenAI、xAI、Mistral、Groq、Ollama、LM Studio 这些,还能选「自定义」接 OpenAI 兼容、Anthropic、Gemini 的地址。不想在多家之间反复折腾 Key,也可以试试 RouteFast.ai 这类统一接入方案。账号登录则支持 ChatGPT(Plus/Pro)、xAI、OpenRouter。
第二步:设置手机操作。 要让它操作 App 才做这步。进设置 › 手机操作,是个六步向导,做完一步自动打勾,不用点下一步。
第 1 步:打开开发者选项。 设置 › 关于手机 › 连点「版本号」7 次。找不到版本号就去「软件信息」里找,或者在设置里搜。
第 2 步:打开 USB 调试。 弹「允许 USB 调试吗」点确定。不用插数据线,它只是为了配对后断开 Wi-Fi 也能继续用。这个开关一直开着,关掉手机操作就停。
第 3 步:无障碍,建议跳过。 向导最上面有个「跳过(配对后 Mika 会自己打开)」,点它。
原因:Mika 是开源项目,只能自己下 APK 装,走不了应用商店。这种装法在安卓眼里是「非商店来源」,想开无障碍会被标成「受限制的设置」拦下来。配对之后由 Mika 自己去开,就不会触发这个限制。
代价是下一步配对时得自己填一次 6 位配对码。
第 4 步:打开无线调试。 先连 Wi-Fi(不用能上网,连上就行)。开发者选项里打开「无线调试」,弹框里勾上「始终允许使用此网络」再点允许。不勾的话,以后每次换 Wi-Fi 都得手动来一遍。
第 5 步:用配对码配对。 点「无线调试」这几个字(不是开关),进页面,点「使用配对码配对设备」,屏幕上弹出一个 6 位数字。
配对码只在配对窗口开着时有效。窗口一关(切到别的 App、按返回、锁屏),码就作废。
所以填码时不能切 App、不能按返回、不能锁屏。做法是:让配对窗口开着,从屏幕顶部下拉通知栏,点 Mika 那条「填配对码」的通知,在输入框里填数字发出去。下拉通知栏不会关掉配对窗口,切 App 会。
带空格、横线、全角数字都能识别。码过期了,回「无线调试」重新点一次会出新的。
第 6 步:自动连接。 不用操作,等几秒。
配对连不上的情况
有些厂商系统没有能用的无线调试,或者配对死活连不上,用装了 adb 的电脑走 USB:
adb shell sh /sdcard/Android/data/com.wangzan101.mika/files/usb-start.sh
看到 Mika helper starting... 就成。手机重启后要再跑一次,这样启动的助手不会自己回来。
装完不好用的情况
设置 › 恢复与修复 › 兼容性自检,约 1 分钟跑完 12 项。它会在自己的虚拟屏上打开测试页,试一遍读屏、点按、打字、滚动、返回,还查内置浏览器和沙箱,逐项给结论。不碰你的其他 App,不改设置,不联网。
一个 App 自带兼容性自检,还能生成报告直接提 issue——这是把「用户反馈」做成了「可复现的缺陷报告」。比让你截图说「点了没反应」强太多。
三个提醒
- 开发者选项里没写到的开关别动。有的开关会清数据,比如「以 16KB 页面大小启动设备」,看到要你「清除全部数据」的提示,点取消。
- 手机重启后无线调试可能被系统关掉,这很正常,Mika 会在连着 Wi-Fi 时自己重新打开。
- 第一次到一个新 Wi-Fi,要手动允许一次无线调试,之后就不用管了。
装完怎么用

前提是模型配好了,要操作 App 的话配对也做完了。之后打开 App,就一个聊天框——不用选「我要操作哪个 App」,不用配流程,说一句话就行。
能干的活分几类
操作 App。 读长列表、翻聊天记录、点按钮、打字、把文本分享进别的 App。碰到登录、验证码、支付,它会停下来交给你。
浏览网页。 内置一个桌面级浏览器,登录状态保留,能读页面、能下载上传。碰到拦截页也会交给你。
处理你当前这块屏。 双击悬浮胶囊,把正在看的页面发过去,问「这个我该怎么回」「帮我记一下」。
定时和条件。 「明早 9:40 提醒我」「每周五干这个」。它在你原来那个对话里按时跑,不用重新交代背景。
文件和计算。 每个对话挂一个 Linux 沙箱,Python、Node、shell 都能跑,能处理你发给它的文件——不过只在 arm64 设备上才有,默认还断网。
两个可以直接照抄的开场
设置明早 9:40 和 10:00 的闹钟
每天早上 8 点查一下天气,只有要下雨才告诉我
跑起来之后,有三件事值得知道
一是你的手机还能正常用。它在后台那块屏上操作,你刷你的,互不干扰。
二是能中途插话。任务跑着的时候你继续说话,可以补条件、纠方向。还没被它接手的那条消息,长按能撤回或者改。
三是能停,也能接着干。停下来之后它会告诉你做到哪一步了,说「继续」就从那儿接上,不用从头再来。
默认是询问模式(Ask):只有花钱前才问你(下单、付款),发消息、提交、删除这些它都直接干。不想被打断可以切到自主模式(Autonomous),连付款也不先问,一般不建议,尤其你还没摸清它脾气的时候。
对测试人有什么用

这块得说实话。先说能用的。
1. 给没有自动化的 App 做临时验证。
大部分团队的主流程有 Appium 或者 Playwright 覆盖,边角页面没有。临时要验「改版之后这个入口还能不能进得去」,写脚本不划算,手点又烦。说一句话让它走一遍,比手点十遍快。
2. 验证「点完到底生效没有」。
这是我们最容易放过的地方。脚本不报错、断言不报错,用例绿着,功能其实没生效。Mika 在这块有个机制:每个动作做完会重新读一遍界面,看文字有没有进去、页面有没有变,不急着报成功。
3. 把一次人工探索变成可复现的记录。
它会把做完的任务存成 skill,下次更快更稳。对「这个 bug 怎么复现」这种事有价值:你走一遍,它记住了,下次能照着再来一遍。
4. 跨 App 的串联流程。
从微信收到订单通知 → 打开电商 App 查物流 → 截图发回去。这种跨 App 的活儿,写脚本要协调几套驱动,它天然就能做。
5. 当定时冒烟用。
「每天早上 8 点打开 App 走一遍登录」这种,配个定时任务就能跑。它跑在原对话里,不用另建一套调度。
再说不能用的,这块更重要
它不给你生成测试脚本。 你要的是能进代码库的 Playwright 或者 Appium 代码,它给不了。它自己就是个产品,不是测试框架。
进不了 CI。 跑在真机上,依赖模型调用,慢、不稳、还要花钱。500 条用例的回归它跑不动。
做不了精确断言。 它能告诉你「我点了,屏幕上变了」,但做不了「余额从 100 变成 90」这种字段级校验。
有封号风险。 自动操作第三方 App 可能违反服务条款,公司测试账号要谨慎。
要 shell 权限。 公司发的设备如果有 MDM 管控,这步可能过不去。
所以它的位置很清楚:不是替代品,是补位。 补那些「写脚本不划算、人点又太费时」的缝。
Mika vs Droidline:AI 站在哪

要回答开头那个问题,光看 Mika 不够。我把 Droidline 摆在一起比了比,才看清这俩根本不是一类东西——差别不是有没有 AI,是 AI 站在哪。
Mika 里,AI 就是产品本身:你说一句话,它替你看屏、找按钮、点下去,中间怎么判断全交给模型。Droidline 反过来,它本体是「手机能被代码一行行驱动」,写一行动一下,不判断、不猜测,找不到就报错;AI 来了也只是又一个发号施令的客户端,不是主角。
一句话:Mika 是「AI 会操作手机」,Droidline 是「手机能被操作,AI 可以来操作」。前者是产品,后者是接口。
干测试这行,我更在意的是「这活儿失败了会怎样」。两边其实都在读安卓给的那棵控件树,差别不在看屏幕还是读结构:Mika 把界面整理成带编号的元素交给模型,模型自己决定点哪儿,读不出来的自绘界面才靠图像补;Droidline 把同一棵树交给我,按字段匹配,我自己写死点哪儿。一个把判断交给模型,一个把判断交给人——往下就分出两条路:
| 对比维度 |
Mika |
Droidline |
| 我怎么交代任务 |
说一句话 |
写一行代码 |
| 谁决定点哪儿 |
模型临场判断 |
我写死在脚本里 |
| 失败了会怎样 |
它换个法子再试 |
报错,还告诉我值不值得重试 |
| 能不能进回归 |
不能 |
能,塞进 CI 天天跑 |
| 界面改版之后 |
它自己适应 |
我得改脚本 |
反过来,Mika 有 Mika 的位置:不写代码,一句话去干,碰到登录、验证码、付款停下来问我;纯图像、没有元素树的界面它照样能点,这条 Droidline 做不到,只能退到坐标硬点。Droidline 那边,手上已有的自动化脚本还能接着用,界面改版得有人改脚本——听着是缺点,可回归要的就是「红了一定是代码变了」。
最让我意外的不是它能接 AI,是它没打算让 AI 一直干活:先让 AI 把没人写过脚本的角落摸一遍,把走过的路固化成能天天跑的脚本。摸路用 AI,守路用脚本,这个分寸比「AI 替你测试」实在得多。
所以这俩不是谁替代谁,是分层的。回归要确定性,这次红了一定是代码变了,不是模型今天状态不好;探索要覆盖,那些不知道会不会坏的角落,AI 比人快得多。AI 负责发现,脚本负责守住,中间那道桥现在还得人搭。
回头看我开头那个问题,答案其实变了。不是「按钮改名了 AI 怎么办」,是「按钮改名了,你的脚本红不红」。红了说明还有人在守,一直绿着才可怕。
三句话带走

第一,它能替你跑腿,不能替你判断。 你说一句话它去点,但活儿怎么想、验哪一条、算不算通过,还得你来。这点换成 Droidline 也一样,只不过它连「替你想」都省了,全靠你写清楚。
第二,AI 操作界面的不确定性,不能靠模型自觉兜。 Mika 在动作核查这一层的思路就一句:判断要靠界面证据,不靠模型自述。这句话能用到你手上所有 AI 功能上。
第三,这俩都还在 0.x,别急着往流程里塞。 Mika 是 v0.1.x,Droidline 自述还在 0.1,真机验证才刚开始。先用它们跑跑自己的日常,摸清脾气,再想能不能用到工作里。
最后留个问题给你:你们团队现在是怎么分工的——脚本守主流程、AI 补边角,还是反过来?有没有试过把 AI 探出来的一次性操作,固化成能天天跑的脚本?这些话题在云栈社区里也有不少测试同行在聊。