1. 项目背景与核心价值
去年年底,行业里出现了一个让人眼前一亮的产品——某大厂联合手机厂商推出的AI手机助手,能够自动操作手机完成各种复杂任务。不过首批工程机数量有限,市场上很难买到,二手价格也被炒得老高。作为一个喜欢折腾技术的开发者,我看着这个情况就在想:能不能做一个完全开源、人人都能用的解决方案?
这就是「肉包」项目的由来。我选择用Kotlin和视觉语言模型技术,在Android原生环境下重构手机自动化方案,彻底摆脱对电脑和数据线的依赖。名字起得也很随意,就是因为我个人不太爱吃素,觉得「肉包」比较接地气又好记。
在实际开发过程中,我发现现有的开源方案大多依赖Python和电脑端ADB,用起来特别麻烦。而商业方案要么价格昂贵,要么就是闭源的黑盒子。肉包想要解决的就是这些问题——做一个真正能在手机上独立运行、完全开源、而且性能足够好的自动化助手。
2. 技术架构设计理念
2.1 双层架构的核心思想
肉包最核心的设计理念,是把复杂的GUI自动化过程拆解成两个正交的维度:原子能力(How)和用户意图(What)。这种设计借鉴了Claude Code的架构思路,但在移动端做了很多适配和优化。
Tools层就像是我们的"手和眼睛",负责执行最底层的物理操作。比如截取屏幕画面、模拟点击滑动、执行系统命令、调用HTTP接口等等。这些操作都是原子化的,每个工具只做好一件事,不关心为什么要做这件事。
Skills层则更像是"大脑",负责理解用户的自然语言指令,然后把抽象的需求转换成具体的执行策略。比如说当用户说"帮我点个汉堡"时,Skill需要决定是打开外卖App直接下单,还是先打开地图找附近的餐厅。
2.2 两种执行模式的巧妙设计
在实际实现中,我设计了两种不同的执行模式来应对不同场景。委托模式(Delegation)是我个人最喜欢的设计,它特别聪明地利用了现有App的AI能力。比如当用户想要处理图片时,肉包不会自己去实现所有的图像处理逻辑,而是直接通过DeepLink调用其他专业的AI应用来完成工作。
另一种是GUI自动化模式,这是比较传统的"所见即所得"方式。肉包会先截取屏幕画面,然后用VLM模型分析当前界面有什么可操作的元素,接着模拟用户点击和输入,最后再截图确认操作结果。这种模式虽然慢一些,但适用性更广,几乎能在任何App上使用。
3. 与Python方案的性能对比
3.1 运行效率的显著提升
很多开发者可能好奇,为什么我要选择Kotlin而不是Python来做这个项目。其实最开始我也尝试过Python方案,但在实际测试中发现了几个致命问题。首先是启动速度——Python运行时在移动端的冷启动需要2-3秒,而Kotlin原生应用几乎瞬间就能响应。
内存占用也是个大问题。一个典型的Python自动化脚本运行时需要占用200-300MB内存,再加上模型推理的开销,在中低端手机上很容易出现OOM崩溃。而肉包的Kotlin实现优化后,常驻内存控制在50MB以内,峰值也不超过150MB。
响应延迟方面的对比更加明显。Python方案完成一次"截图-分析-操作"循环平均需要1.5-2秒,而肉包只需要800毫秒左右。这主要得益于Native代码的执行效率和更好的线程调度机制。
3.2 开发体验的差异
从开发角度来说,Kotlin带来的体验提升更加明显。首先是与Android系统的深度集成——直接使用官方的Accessibility API和InputManager,不需要通过ADB转发指令。这意味着更稳定的操作性能和更精确的控件定位。
调试也变得更加容易。在Python方案中,如果自动化脚本出问题,经常需要在电脑和手机之间来回切换查看日志。而肉包内置了完整的调试界面,可以实时显示VLM模型的思考过程、操作决策和执行结果,所有日志都在手机端直接可见。
维护成本也低了很多。Python方案需要用户自行配置ADB环境、安装Python解释器、管理依赖包,普通用户根本搞不定。而肉包就是一个普通的APK文件,安装就能用,自动处理所有运行依赖。
4. 视觉语言模型的实际应用
4.1 多模型后端的灵活支持
肉包在设计之初就考虑了模型后端的多样性,目前支持通义千问、GPT-4V、Claude以及本地Ollama等多种VLM模型。这种设计让用户可以根据自己的需求和经济情况灵活选择——追求效果就用GPT-4V,考虑成本就用通义千问,注重隐私就部署本地模型。
我在实际测试中发现,不同模型在不同场景下各有优势。GPT-4V在复杂界面理解和多步推理方面表现最好,但API调用成本较高。通义千问在中文界面理解和本地化服务推荐方面更胜一筹。Claude则是在逻辑推理和任务分解方面特别出色。
本地模型虽然精度稍逊,但完全离线运行的特性对隐私敏感型用户很有吸引力。我目前正在试验用蒸馏和量化的方式减小模型尺寸,争取在下一代版本中实现端侧模型的全功能运行。
4.2 提示词工程的优化技巧
让VLM模型准确理解手机界面需要精心设计的提示词模板。经过大量试验,我总结出了一套有效的提示词结构:首先是角色设定,明确告诉模型它是一个手机自动化助手;然后是当前屏幕的详细描述,包括界面元素、文本内容、布局结构等信息。
接下来是任务指令,这里要用非常明确的语言说明用户想要实现什么目标。最后是操作约束,比如不允许进行支付操作、优先选择免费选项、注意隐私保护等等。这种结构化的提示词让模型的准确率提升了40%以上。
我还实现了动态提示词优化机制,会根据历史交互记录自动调整提示词的重点。比如如果模型多次误解某个类型的指令,系统会自动增加相关说明来避免再次出错。
5. 安全与隐私保护机制
5.1 Shizuku的优雅解决方案
Android系统出于安全考虑,普通应用无法直接模拟点击操作或读取其他应用的界面内容。传统方案都需要连接电脑开启ADB调试,但这显然违背了"随时随地自动化"的初衷。
肉包采用Shizuku来解决这个难题,这是一个特别巧妙的方案。用户只需要通过无线调试模式启动一次Shizuku服务,之后肉包就能在非Root的情况下获得ADB级别的操作权限。整个过程完全合规,不需要破解系统或者安装Magisk模块。
Shizuku的另一个好处是权限隔离——用户需要明确授权每个权限请求,肉包只能获得用户明确同意的权限范围。这比完整的Root权限安全得多,不会出现恶意应用滥用权限的情况。
5.2 敏感信息的多重保护
所有API Key和敏感配置都采用AES-256-GCM加密存储,密钥由Android KeyStore系统管理,即使手机被恶意应用入侵,也不会泄露关键信息。我还在代码层面实现了自动检测机制,一旦识别到支付界面、银行App或者密码输入框,会自动暂停操作并提示用户确认。
网络通信方面,所有与模型API的交互都强制使用HTTPS加密,中间人攻击也无法窃取传输内容。对于特别注重隐私的用户,我还提供了完全离线的本地模型方案,所有数据处理都在设备端完成。
6. 实际使用体验与技巧
6.1 快速上手指南
使用肉包前需要准备三样东西:Android 8.0以上的设备、已启动的Shizuku服务、一个可用的VLM API Key。国内用户我推荐使用阿里云百炼,注册简单而且价格实惠,响应速度也很快。
安装过程比想象中简单很多。从GitHub下载最新的APK文件,安装后打开应用,按照引导完成Shizuku授权和API Key配置,整个过程不超过5分钟。不需要电脑,不需要数据线,更不需要复杂的开发环境配置。
第一次使用时会有一个简短的教程,展示几个典型的使用场景。我建议新用户先尝试一些简单指令,比如"打开设置并进入Wi-Fi页面"或者"在我的相册里找到最近一张截图",熟悉基本的交互模式后再尝试复杂任务。
6.2 高效使用技巧
经过几个月的实际使用,我总结出了一些提升效率的技巧。首先是指令的表述方式——尽量使用明确的操作动词和对象名词。比如说"打开微信并找到置顶聊天"比"处理我的微信消息"效果要好得多。
多步任务最好分解成多个单步指令。虽然肉包支持复杂指令,但分解执行的成功率更高,也更容易排查问题。比如"先打开美团,然后搜索附近的火锅店,最后按评分排序"可以分成三个指令顺序执行。
定时任务和自动化工作流是另一个高效用法。我每天早上会让肉包自动打开天气App查看温度,然后根据天气情况推荐穿衣建议,最后播放我喜欢的晨间新闻。这种自动化流程大大提升了生活效率。
7. 开发实践与代码解析
7.1 核心模块的实现
肉包的代码结构清晰模块化,主要分为四个核心模块:UI层负责交互界面和用户指令输入,Core层封装了主要的自动化逻辑,Model层处理VLM的调用和结果解析,Tool层提供各种原子操作能力。
最值得关注的是Skill引擎的实现。我设计了一个灵活的插件系统,每个Skill都是一个独立的Kotlin类,实现统一的接口规范。开发者可以很容易地添加自定义Skill,只需要实现指令匹配、参数解析和执行逻辑三个核心方法。
class WeatherSkill : BaseSkill() {
override fun canHandle(intent: String): Boolean {
return intent.contains("天气") || intent.contains("weather")
}
override fun execute(context: Context, intent: String): SkillResult {
// 解析城市和日期参数
val params = parseWeatherParams(intent)
// 打开天气App或直接查询API
return openWeatherApp(params)
}
}
Tool层的实现同样精彩。每个Tool都是无状态的单例对象,提供原子级的操作能力。比如ClickTool封装了各种点击操作,支持坐标点击、文本匹配点击、图标识别点击等多种模式,内部自动处理了屏幕密度适配和点击延迟优化。
7.2 异步处理与状态管理
移动端自动化最复杂的就是异步状态管理。肉包使用了Kotlin协程和StateFlow构建了响应式的状态管理系统。每个自动化任务都是一个独立的协程作用域,可以随时取消和重启。
执行过程中的状态变化通过StateFlow推送到UI层,实现实时进度显示和错误处理。这种设计不仅保证了流畅的用户体验,还让代码的可维护性大大提升。我特别设计了状态回溯机制,任何时候出现错误都能恢复到上一个稳定状态,避免出现界面卡死或者状态混乱。
错误处理是另一个精心设计的部分。肉包定义了详细的错误码体系,从网络超时到界面元素找不到,每种错误都有对应的处理策略和用户提示。重试机制智能地根据错误类型决定是否自动重试,还是需要用户介入。
8. 未来规划与社区贡献
8.1 技术路线图
接下来的开发重点主要集中在三个方向。首先是混合操作模式的完善,结合无障碍服务的界面树分析和视觉分析,提升复杂界面的操作准确率。实测显示这种混合方案比纯视觉方案的准确率提升30%以上。
宏脚本系统是另一个重点功能。我正在设计一种易于使用的脚本语言,支持操作录制和回放,让普通用户也能创建复杂的自动化流程。这个系统还会支持条件判断、循环控制和变量操作,实现真正意义上的编程自动化。
长期来看,多应用协作是最终目标。想象一下这样一个场景:你说"帮我规划周末出游",肉包自动打开地图找景点、用美团查门票价格、用天气App查看预报、最后用日历App创建行程安排。这种跨应用联动才是自动化的终极形态。
8.2 如何参与开源贡献
肉包项目完全开源,采用MIT许可证,任何人都可以自由使用和修改代码。Git仓库中有详细的贡献指南,从环境配置到代码规范都有详细说明。我特别欢迎以下几种类型的贡献:新Skill的开发、界面翻译优化、测试用例补充、文档改进。
对于刚接触项目的开发者,我标注了一些"good first issue",这些都是相对简单但很有价值的功能改进。从这些issue入手可以快速熟悉代码结构,逐步深入核心模块的开发。每个PR都会经过详细的代码审查和测试验证,确保代码质量。
社区交流主要在GitHub Discussions进行,我每天都会抽时间回答问题和讨论技术方案。遇到使用问题可以先查看看Wiki中的常见问题解答,大部分常见问题都有解决方案。特别期待看到大家用肉包实现的各种创意自动化场景
1139



被折叠的 条评论
为什么被折叠?



