
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.
Free plan with 30 credits/mo, no card required. Paid plans from $25/mo USD.
Keep reading

llama.cpp Android 集成:Kotlin 开发指南
将 llama.cpp 集成到 Android 应用的分步指南(Kotlin)。JNI 绑定、Vulkan GPU 加速、模型加载以及跨 Android 设备范围的内存管理。

如何为移动应用添加AI:开发者决策指南
涵盖为iOS和Android应用添加AI功能的所有方法的综合指南。云API、端侧模型和混合架构的真实成本与性能数据对比。

Flutter应用中的AI:云API、TFLite和端侧LLM
Flutter中AI的三条路径。通过http包使用云API,TensorFlow Lite用于传统ML任务,llama.cpp端侧LLM用于文本生成。面向Dart开发者的实用比较。