ARTICLE · 1312851
Mika开源手机私人AI助理实践
现在的手机端 AI 助手普遍存在一个让人头疼的体验痛点。每当用户下达一个跨应用指令,AI 就会立刻霸占整个手机屏幕,自动点击、滑动、跳转页面。在这几分钟里,用户完全没法回微信、刷视频,只能眼睁睁看着手机自己乱跳。遇到应用弹窗音效或者误触返回键,整个任务还会直接中断。

Mika 项目拿出了一套纯本地驱动(无自有后端服务器)的终端 AI Agent 解决方案。它在 Android 手机内部开辟出独立的后台虚拟屏幕、离屏 WebView 与完整的 Linux 容器沙箱。AI 所有的点击、滑动、网页抓取与代码执行全部在后台隐身完成,用户在前台聊微信、打游戏丝毫不受干扰。本文将从核心功能特性、跨进程协同架构,到一份完整的京东选购显示器真实运行日志,全方位拆解这款手机端 AI Agent 的工程实现。


普通 Android 应用受限于系统沙箱,无法直接创建受信任的虚拟屏幕或跨屏幕挪动任务栈。Mika 巧妙利用了 Android 系统自带的 shell 特权身份(UID 2000),通过一次无线调试引导,在手机内部孵化出一个脱离 adbd、由系统 init 进程(PID 1)直接收养常驻的特权助手进程。

在真机运行态下,系统内部的实时进程分工如下表所示:
进程名称 | 实时 PID | 运行身份 (UID) | 父进程 (PPID) | 核心职责与运行状态 |
com.wangzan101.mika(Mika 主进程) | 30272 | u0_a463(UID 10463) | 1450(zygote64) | 承载 MainActivity、MikaAccessibilityService(无障碍与悬浮胶囊)、HelperHub、TaskCenter 及 5 个 ContentProvider。 |
com.wangzan101.mika:helper(内置特权手机助手) | 18606 | shell(UID 2000) | 1(init) | 脱离 adbd 常驻后台,直接映射加载主进程 base.apk,持有 ShellService (IMikaShell) 特权 Binder 服务端。 |
system_server(Android 系统服务) | 2330 | system(UID 1000) | 1450(zygote64) | 绑定 Mika 无障碍服务,向特权助手暴露 DisplayManager、ActivityTaskManager、InputManager、AppOps 等底层服务。 |

主进程与特权助手进程之间构建了严密的安全交接与双向保活拓扑:

这套双核架构在运行期包含三个精巧的工程细节: 1. 一次性口令交接:特权助手启动后,通过 HelperHandoffProvider 将 ShellService 的 Binder 句柄、进程信息与一次性 Nonce 口令交接给主进程的 HelperHub。 2. 磁盘口令自动销毁:一旦 HelperHub 确认连接成功,UsbStartScript.kt 会立即把外置存储 /sdcard/Android/data/com.wangzan101.mika/files/usb-start.sh 重写为不含口令的提示文本,防止启动口令残留在磁盘上造成安全泄露。 3. 双向 linkToDeath 保活自愈:主进程与特权助手互相注册了 Binder 死亡监听。当主进程被系统清理且超过 8 秒未能恢复时,常驻后台的 18606 特权助手会根据 RestoreWish 先修复无障碍服务设置,随后访问 HelperHandoffProvider 将主进程重新拉起。


为了直观展现 Mika 在真实复杂应用中的运行状态,我们以帮我在京东上选一款 2K 27 寸的显示器,要求综合评价比较高。用于办公。作为测试指令,同时在系统记忆层预设了用户偏好1. 用户不想要分辨率太高的,因为那样字体太小。。结合真机 App 内的「运行过程」实拍截图与底层 Trace 日志,我们分成三个小节深度拆解任务启动后的前 5 步核心操作。
全局运行账单与第1步:按需挂载的轻量冷启动

从第一张运行过程截图可以看到,Mika 在端侧提供了极高透明度的可观测面板: * 全局性能指标:整个选购任务总耗时 5 分 3 秒,和模型来回交互 16 次,总计消耗 108 万 Token,最终结局标记为「办成了」。 * 第一次反馈耗时拆解(22.9 秒):截图显示第 1 步总耗时约 23.2 秒,其中模型耗时 22.9 秒,端侧操作仅耗时 337 毫秒(含重试 7 毫秒)。对照底层 trace.pb 日志,这 22.9 秒 的模型耗时包含了两部分:前置 IntentGate 意图门禁耗时 7.67 秒(消耗 355 输入 / 7 输出 Tokens),加上主循环 Step 01 的大模型首轮推理耗时 15.21 秒。 * 极简初始上下文:在 第 1 步 启动瞬间,为了节省首轮 Token 开销,Mika 仅向模型挂载了 22 个基础工具(手机相关仅有 phone_list_apps 和 phone_launch_app 以及日历闹钟接口,尚未挂载任何屏幕点击与观察工具),
后台虚拟屏静默拉起京东与实时画面回传

第二张截图展示了 第 2 步 启动目标应用并回传虚拟屏画面的全过程: * 精准定位与启动耗时:模型从第 1 步返回的包名列表中定位到 {“package”:“com.jingdong.app.mall”,“label”:“京东”},随即输出京东 app 已安装,我打开它开始搜索。并调用 phone_launch_app。 * 后台特权静音与首屏稳定等待:后台 UID 2000 的 ShellService 先通过 AppOpsManager 将京东的音频播放权限设为静默,随后在独立的 AgentDisplay 虚拟屏中拉起京东首页,并持续监测画面帧直至首屏渲染完全稳定。 * 主副屏互不干扰的视觉验证:截图中点开「收起画面」下方的预览框,就能看到后台虚拟屏实时截取回传的京东首页画面。此时用户的主屏幕依然稳稳停留在 Mika 的白色「运行过程」页面。
第3至第5步:工具集动态解锁、借力搜索与滚动寻路

第三张截图连续呈现了 第 3 步至第 5 步 在京东应用内的核心交互推进:
* 第 3 步:动态解锁 31 个屏幕工具 + 借力默认词直接搜索 一旦第 2 步调用了 phone_launch_app,Mika 在第 3 步立即触发架构级的 tools_opened 动态扩容机制:一次性向模型上下文注入 phone_observe、phone_tap、phone_find、hand_to_user 等 31 个手机屏幕交互工具(工具总数从 22 个扩充至 53 个),同时向 messages[0] 追加 13,126 字符的屏幕操作规。
* 第 4 步:遵循首项命中原则锁定高销量商品 模型严格遵循系统规范中从列表选择第一个满足条件商品的准则,耗时 18.2 秒 完成多候选商品规格核对。
* 第 5 步:核实当前选中规格并调用滚动查找 进入包含 11 个子款式的商品详情页后,模型首先核实当前已选中的款式 @e225 正是 [新]27”2K180Hz/硬(价格 ¥949,已售 200 万+)。为了核查真实口碑,模型耗时 10.9 秒 发起滚动查找调用:
端侧执行器收到指令后,由 GesturePacing.kt 生成拟人化的加减速滑动轨迹向虚拟屏注入触摸事件,仅向下滚动 1 次(耗时 3.0 秒)便精准捕获到 @e336(“好评率98%”)节点。

从后台免打扰的虚拟屏双核架构,到按需解锁工具、实时画面透视与拟人化触控交互,Mika 让手机端 AI Agent 彻底告别了抢屏幕玩具阶段,成为一个能在手机后台安静思考并可靠交付结果的实用生产力工具。














































































