Back to blog
    Android应用中的AI:ML Kit、云API和端侧LLM对比
    AndroidML KitKotlincloud APIon-device AIllama.cppsegment:mobile-builder

    Android应用中的AI:ML Kit、云API和端侧LLM对比

    Android应用中AI的三条路径。Google ML Kit用于常见任务,云API用于完整LLM能力,llama.cpp端侧模型用于成本和隐私。面向Kotlin开发者的实用比较。

    EErtas Team·

    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 2Galaxy S23, OnePlus 118-12GB25-3512-18
    Snapdragon 8 Gen 3Galaxy S24, OnePlus 128-12GB35-4518-25
    Tensor G3Pixel 8/8 Pro12GB25-3512-18
    Tensor G4Pixel 9/9 Pro12-16GB30-4015-22
    Snapdragon 7 Gen 32024年+中端6-8GB18-258-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