
Android应用中的AI:ML Kit、云API和端侧LLM对比
Android应用中AI的三条路径。Google ML Kit用于常见任务,云API用于完整LLM能力,llama.cpp端侧模型用于成本和隐私。面向Kotlin开发者的实用比较。
Android开发者有三种不同的方法为应用添加AI。Google ML Kit处理常见任务。云API提供前沿模型能力。通过llama.cpp的端侧LLM让你获得完整的文本生成能力,无需API成本或网络依赖。
每种服务于不同的目的。本指南从Kotlin开发者的视角进行比较。
路径1:Google ML Kit
ML Kit是Google的移动端机器学习SDK。它为常见ML任务提供生产就绪的API,无需任何ML专业知识。
ML Kit能做什么
ML Kit为特定任务提供预构建模型:
- 文本识别(OCR),支持拉丁文、中文、日文、韩文和梵文字母
- 人脸检测,带有关键点追踪和分类
- 条码扫描,支持所有常见条码格式
- 图像标注,包含400+类别
- 物体检测和追踪,支持实时相机画面
- 姿态检测,用于身体关键点追踪
- 数字墨水识别,用于手写体
- 翻译,支持59种语言,模型按需下载
- 智能回复建议,用于对话场景
- 实体提取,识别文本中的日期、地址、电话号码
集成模式
// 文本识别示例
val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
val image = InputImage.fromBitmap(bitmap, 0)
recognizer.process(image)
.addOnSuccessListener { text ->
Log.d("MLKit", "Recognized: ${text.text}")
}
.addOnFailureListener { e ->
Log.e("MLKit", "Recognition failed", e)
}
ML Kit不能做什么
ML Kit不支持运行大型语言模型。没有内置的开放式文本生成、对话AI、内容起草或复杂推理能力。Smart Reply提供短消息的建议回复,但它不是一个通用聊天模型。
成本
免费。ML Kit完全在设备上运行。没有API调用,没有按请求的费用,没有使用限制。
最适合
OCR、条码扫描、人脸检测、姿态估计、图像标注。Google提供优化的预构建解决方案的任务。
路径2:云API
从Android应用调用OpenAI、Anthropic、Google Gemini或其他供应商。模型在远程服务器上运行。
集成模式
suspend fun chat(message: String): String = withContext(Dispatchers.IO) {
val client = OkHttpClient()
val body = """
{"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "$message"}]}
""".trimIndent()
val request = Request.Builder()
.url("https://api.openai.com/v1/chat/completions")
.post(body.toRequestBody("application/json".toMediaType()))
.addHeader("Authorization", "Bearer $apiKey")
.build()
val response = client.newCall(request).execute()
// 解析JSON响应
parseResponse(response.body!!.string())
}
对于Google Gemini,Android有一个专用SDK(Google AI Client SDK),提供更原生的集成:
val model = GenerativeModel(modelName = "gemini-2.0-flash", apiKey = apiKey)
val response = model.generateContent("Your prompt here")
println(response.text)
成本
按令牌计费。Gemini Flash是主要供应商中最便宜的选择,$0.10/$0.40每百万令牌。GPT-4o-mini $0.15/$0.60。在规模化后,成本从数百到数千美元每月不等。
Gemini Nano:中间选项
Google为端侧推理提供Gemini Nano,但限制很大。它只在特定设备上运行(Pixel 8/9系列、Samsung Galaxy S24/S25系列),且只通过AICore系统服务。你不能使用自己的模型。不能微调它。能力仅限于Google批准的特定任务。
对于需要跨全部Android设备使用端侧AI的开发者,Gemini Nano不是一个通用解决方案。
最适合
与iOS相同:原型验证、功能验证、非常低用量,或需要前沿推理的任务。
路径3:通过llama.cpp的端侧LLM
在Android设备上本地运行完整的语言模型。llama.cpp提供推理引擎。你微调的GGUF模型提供智能。
在Android上如何工作
llama.cpp项目包含llama.android,一个预构建的Android库,通过JNI提供Kotlin绑定。它在所有设备上支持CPU推理,在支持的硬件上通过Vulkan进行GPU加速。
// 使用llama.android的概念模式
class AiViewModel : ViewModel() {
private val llamaModel = LlamaModel()
fun loadModel(modelPath: String) {
viewModelScope.launch(Dispatchers.Default) {
llamaModel.load(modelPath, nThreads = 4, nGpuLayers = 32)
}
}
fun generate(prompt: String): Flow<String> = flow {
llamaModel.generate(prompt) { token ->
emit(token)
}
}.flowOn(Dispatchers.Default)
}
各芯片组性能
| 芯片组 | 设备 | 内存 | 1B(令牌/秒) | 3B(令牌/秒) |
|---|---|---|---|---|
| Snapdragon 8 Gen 2 | Galaxy S23, OnePlus 11 | 8-12GB | 25-35 | 12-18 |
| Snapdragon 8 Gen 3 | Galaxy S24, OnePlus 12 | 8-12GB | 35-45 | 18-25 |
| Tensor G3 | Pixel 8/8 Pro | 12GB | 25-35 | 12-18 |
| Tensor G4 | Pixel 9/9 Pro | 12-16GB | 30-40 | 15-22 |
| Snapdragon 7 Gen 3 | 2024年+中端 | 6-8GB | 18-25 | 8-12 |
超过每秒10个令牌就可以用于聊天界面。过去两年的旗舰设备可以轻松运行1-3B模型。
Android碎片化因素
Android比iOS有更多的设备多样性。这既是挑战也是优势:
挑战: 你需要跨芯片组和内存配置进行测试。在Galaxy S24(12GB)上运行良好的模型可能在4GB的低端手机上表现吃力。
优势: 许多Android设备有8-12GB内存,对端侧模型来说很充裕。6-8GB的中端设备仍然可以有效运行1B模型。
实际做法: 针对1B模型实现广泛兼容性(支持4GB+设备)。为8GB+内存的设备提供3B模型升级选项。在运行时检测可用内存并调整。
内存管理
Android的内存管理比iOS更激进。系统会杀掉后台进程来回收内存。关键做法:
- 在前台Service中或AI功能激活时加载模型
- 用户离开AI功能时释放模型内存
- 处理
onTrimMemory回调,在压力下释放资源 - 使用
ActivityManager.getMemoryInfo()在加载前检查可用内存
成本
与iOS相同:一次性微调($5-50),CDN分发,然后零推理成本。
对比
| 因素 | ML Kit | 云API | 端侧LLM |
|---|---|---|---|
| 文本生成/聊天 | 否 | 是 | 是 |
| OCR/条码扫描 | 是(优化) | 是 | 否 |
| 离线支持 | 是 | 否 | 是 |
| 每次推理成本 | $0 | $0.0001-$0.01 | $0 |
| 设备覆盖 | 全部Android 5.0+ | 全部(需联网) | 4GB+内存 |
| 隐私 | 设备端 | 第三方服务器 | 设备端 |
| 自定义模型支持 | 否 | 通过API选择 | 任何GGUF模型 |
| 微调 | 否 | 部分供应商支持 | 完整LoRA/QLoRA |
实际决策框架
使用ML Kit的情况: 需要OCR、条码扫描、人脸检测、姿态估计或图像标注。Google的实现是生产级别的,而且免费。
使用云API的情况: 验证功能、服务非常低用量,或需要前沿推理。Gemini的Android SDK让Android开发者的集成特别简单。
使用端侧LLM的情况: 需要对话AI、内容生成、分类或任何文本密集型AI功能的规模化应用。零成本扩展、离线支持和隐私保障是生产移动应用的决定性优势。
微调流水线(数据集准备、LoRA训练、GGUF导出)是像Ertas这样的工具节省时间的地方。可视化界面处理完整工作流,导出的GGUF可以通过llama.cpp在任何Android设备上运行,无需额外配置。
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.
Keep reading

llama.cpp on Android: A Kotlin Integration Guide
Step-by-step guide to integrating llama.cpp into an Android app with Kotlin. JNI bindings, Vulkan GPU acceleration, model loading, and memory management across the Android device spectrum.

How to Add AI to Your Mobile App: A Developer's Decision Guide
A comprehensive guide covering every approach to adding AI features to iOS and Android apps. Cloud APIs, on-device models, and hybrid architectures compared with real cost and performance data.

AI in iOS Apps: CoreML, Cloud APIs, and On-Device LLMs Compared
Three paths to AI in your iOS app. CoreML for Apple's ecosystem, cloud APIs for capability, and on-device LLMs via llama.cpp for cost and privacy. A practical comparison for Swift developers.