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", "辨識結果: ${text.text}")
        }
        .addOnFailureListener { e ->
            Log.e("MLKit", "辨識失敗", e)
        }

    ML Kit 不能做什麼

    ML Kit 不支援執行大型語言模型。沒有內建的開放式文字生成、對話 AI、內容撰寫或複雜推理能力。智慧回覆提供簡短的訊息建議回覆,但它不是通用的聊天模型。

    費用

    免費。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("你的提示在此")
    println(response.text)

    費用

    按 token 計價。Gemini Flash 是主要選項中最便宜的,每百萬 token $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)
    }

    各晶片組的效能

    晶片組裝置RAM1B (tok/s)3B (tok/s)
    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 個 token 對聊天介面來說可用。過去兩年的旗艦裝置可輕鬆處理 1-3B 模型。

    Android 碎片化因素

    Android 的裝置多樣性比 iOS 更高。這既是挑戰也是優勢:

    挑戰: 你需要跨晶片組和 RAM 配置進行測試。在 Galaxy S24(12GB)上運行良好的模型可能在 4GB 的低階手機上遇到困難。

    優勢: 許多 Android 裝置有 8-12GB RAM,對裝置端模型來說很充裕。中階的 6-8GB 區間仍然可以有效執行 1B 模型。

    實際做法: 以 1B 模型為目標以獲得廣泛相容性(支援 4GB 以上裝置)。為 8GB 以上 RAM 的裝置提供 3B 模型作為升級選項。在執行時偵測可用記憶體並調整。

    記憶體管理

    Android 的記憶體管理比 iOS 更為積極。系統會終止背景行程以回收記憶體。關鍵做法:

    • 在前景 Service 中或 AI 功能活躍時載入模型
    • 當使用者離開 AI 功能時釋放模型記憶體
    • 處理 onTrimMemory 回呼以在壓力下釋放資源
    • 使用 ActivityManager.getMemoryInfo() 在載入前檢查可用 RAM

    費用

    與 iOS 相同:一次性微調($5-50)、CDN 分發,然後每次推論成本為零。

    比較

    因素ML Kit雲端 API裝置端 LLM
    文字生成/聊天
    OCR/條碼掃描是(最佳化)
    離線支援
    每次推論費用$0$0.0001-$0.01$0
    裝置覆蓋率所有 Android 5.0+所有連網裝置4GB+ RAM
    隱私裝置端第三方伺服器裝置端
    自訂模型支援透過 API 選擇任何 GGUF 模型
    微調部分供應商完整 LoRA/QLoRA

    實際決策框架

    使用 ML Kit 當你需要 OCR、條碼掃描、面部偵測、姿勢估計或影像標籤時。Google 的實作是生產級且免費的。

    使用雲端 API 當你在驗證功能、服務非常低流量,或需要前沿推理能力時。Gemini 的 Android SDK 讓這對 Android 開發者來說特別容易。

    使用裝置端 LLM 當你需要對話 AI、內容生成、分類或任何大規模文字密集型 AI 功能時。零成本擴展、離線支援和隱私保障是生產行動應用程式的決定性優勢。

    微調流程(資料集準備、LoRA 訓練、GGUF 匯出)是像 Ertas 這樣的工具節省時間的地方。視覺化介面處理完整的工作流程,匯出的 GGUF 可在任何 Android 裝置上透過 llama.cpp 執行,無需額外配置。

    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