Gemini Nano 开发实战:让你的App轻松拥有端侧 AI 功能

前言

今天 Carson 来聊一个大部分 Android 开发者都很想做、但又觉得门槛高的事------给你的 App 加端侧 AI 能力

不用训练模型、不用调云端 API、不用花一分钱计费、数据不离开设备。

听起来是不是太理想?但 Google 的 ML Kit GenAI API + Gemini Nano 已将其变成了现实。


1. 它是什么?

一张图看懂完整架构:

Gemini Nano 不是一个单独的 SDK。它是一个三层协作体系

层级 组件 职责
应用层 ML Kit GenAI APIs 开发者直接调用的高级接口
系统层 AICore 模型管理(下载/更新)、硬件加速、安全过滤
模型层 Gemini Nano Google 端侧基础模型(多模态)

用大家最熟悉的网络框架 Retrofit做对比:

  • ML Kit GenAI API 就像 Retrofit
  • AICore 就像 OkHttp
  • Gemini Nano 就像底层的 TCP 连接

这个分层设计最大的好处是:你不需要管模型文件有多大、放在哪、怎么更新。AICore 帮你搞定一切,你只管调 API就能使用


2. 核心原理:AICore 到底干了什么?

AICore 是一个系统级模块(类似 Google Play Services),核心职责有四个:

① 模型分发与更新

  • Gemini Nano 的模型文件由 AICore 统一管理;
  • 设备上所有 App 共享同一份模型,不重复下载;
  • 模型更新通过 Google Play 系统更新推送,开发者无感知。

好处:你的 App 体积完全不受影响。不像自己集成 TFLite 模型那样动辄增加几百 MB。

② 硬件加速

  • AICore 自动利用设备端的 NPU / GPU / DSP 做加速;
  • 开发者不需要关心底层是高通、联发科还是 Tensor 芯片;
  • 推理延迟通常在 100-500ms(短文本场景)。

③ 安全过滤

  • 所有输入和输出都经过内置的安全评估;
  • 自动过滤有害内容;
  • 开发者不需要自己做 content moderation。

④ 隐私隔离(Private Compute Core)

AICore 遵循 Android 的 Private Compute Core 原则:

  • 无直接互联网权限;
  • 所有网络请求(包括模型下载)通过开源的 Private Compute Services 路由;
  • 处理完成后不存储任何输入/输出数据

总结

AICore 的设计哲学是开发者做最少的事,系统承担最重的活

这和 Apple 的 Core ML 思路很像,但 Google 做得更激进:连模型文件都不需要你关心


3. 什么时候该用 Gemini Nano?

Android 同时具备 端侧AI (Gemini Nano) 和 云端 AI(Gemini Pro/Flash),那么该如何区分使用场景?

选型对比

维度 Gemini Nano(端侧) Gemini Pro/Flash(云端)
网络依赖 ❌ 完全离线可用 ✅ 必须联网
API 费用 免费 免费额度 + 按量计费
隐私 数据不离开设备 数据上传 Google Cloud
上下文窗口 较小(适合短文本) 极大(100 万 token+)
多模态能力 文本 + 图片 + 音频 文本 + 图片 + 音频 + 视频
推理速度 首 token 快,长文本慢 依赖网络,大文本反而快
设备要求 Pixel 9+/旗舰机型 任何设备
自定义能力 有限(6 个固定 API) 完全自定义 Prompt

选型原则

  • 1:隐私优先 → 选端侧 聊天消息校对、本地笔记总结、医疗/金融类文本处理------数据绝对不能出设备;

  • 2:复杂推理 → 选云端 需要超长上下文、代码生成、多轮复杂对话------端侧模型能力不够

  • 3:两者结合 → 用 Hybrid Routing Firebase AI Logic 支持 PREFER_ON_DEVICE 模式,优先端侧,不行自动回退云端。

使用场景

  • 如果 AI 功能是「辅助性的」,如校对、摘要、快捷回复,那么使用端侧Gemini Nano足矣。
  • 如果是「核心功能」,如智能搜索、内容生成,那么建议走 Hybrid 方案。

4. 使用API 速览

ML Kit GenAI 目前提供 6 个开箱即用的 API:

API 输入 输出 典型场景
Prompt 自定义文本 / 多模态 生成文本 通用生成、问答、分类
Summarization 长文本 / 对话 项目符号列表摘要 聊天记录总结、文章摘要
Proofreading 短文本 修正后的文本 输入框实时校对
Rewriting 短文本 + 目标风格 重写后的文本 一键改写(正式/轻松/简短)
Image Description 图片 文字描述 无障碍、图片搜索标签
Speech Recognition 音频流 转写文本 语音输入、会议记录

Prompt API 是核心

其他 5 个 API 本质上是 Prompt API 的「预置模板」。如果你的场景不在上面 5 个之内,直接用 Prompt API 自己写 prompt。

两种响应模式

  • 流式:生成过程中逐步返回 token,适合长文本、实时显示打字效果;
  • 非流式:等全部生成完一次性返回,适合短回答或后台批处理。

总结

6 个 API 覆盖了 80% 的「辅助型 AI」场景。

如果你的需求只是校对、摘要、快捷回复,根本不需要自己写 prompt------用专用 API 效果更好,因为 Google 已经帮你调优过了。


5. 实战展示:轻松跑通一个端侧 AI 功能

以最通用的 Prompt API 为例,从零到运行。

步骤 1:添加依赖

kotlin 复制代码
// build.gradle.kts (Module)
dependencies {
    implementation("com.google.mlkit:genai:1.0.0-beta01")  // 👈 ML Kit GenAI
}

⚠️ 截至 2026 年 7 月,GenAI API 仍处于 Beta 阶段。API 可能有变化。

步骤 2:检查设备是否支持

kotlin 复制代码
import com.google.mlkit.genai.common.GenerativeAIException
import com.google.mlkit.genai.prompt.PromptApi

// 检查端侧模型是否可用
val isAvailable = PromptApi.isAvailable(context)
if (!isAvailable) {
    // 👈 该设备不支持 Gemini Nano,走降级逻辑
    fallbackToCloudApi()
    return
}

步骤 3:创建 PromptApi 实例

kotlin 复制代码
import com.google.mlkit.genai.prompt.PromptApi
import com.google.mlkit.genai.prompt.PromptRequest

val promptApi = PromptApi.create(context)  // 👈 创建实例

步骤 4:发起推理请求

kotlin 复制代码
// 非流式调用
val request = PromptRequest.builder()
    .setPrompt("用一句话总结:Android 17 正式发布了 Gemini Intelligence 功能")
    .build()

val response = promptApi.generateContent(request)
println(response.text)  // 👈 输出生成的文本

步骤 5:流式调用(适合 UI 实时显示)

kotlin 复制代码
// 流式调用 ------ 像 ChatGPT 一样逐字显示
promptApi.generateContentStream(request).collect { chunk ->
    textView.append(chunk.text)  // 👈 逐步追加到 UI
}

🧪 完整可运行示例

kotlin 复制代码
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.google.mlkit.genai.prompt.PromptApi
import com.google.mlkit.genai.prompt.PromptRequest
import kotlinx.coroutines.launch

class GenAiDemoActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_demo)

        lifecycleScope.launch {
            // 1. 检查可用性
            if (!PromptApi.isAvailable(this@GenAiDemoActivity)) {
                showToast("当前设备不支持端侧 AI")
                return@launch
            }

            // 2. 创建实例
            val api = PromptApi.create(this@GenAiDemoActivity)

            // 3. 构建请求
            val request = PromptRequest.builder()
                .setPrompt("列出 Kotlin 协程的 3 个核心概念")
                .build()

            // 4. 流式生成
            api.generateContentStream(request).collect { chunk ->
                binding.tvResult.append(chunk.text)  // ✅ 逐字追加
            }
        }
    }
}

总结

从添加依赖到看到 AI 输出,只需5 步。这可能是 Android 历史上最低门槛的 AI 集成方案------比接个 Retrofit 网络请求还简单!


这些坑你一定要避开!

实际接入时,这些坑你大概率会踩:

# 说明 解决方案
1 设备不支持 低端 / 老旧设备没有 Gemini Nano 必须做 isAvailable() 检查 + 降级方案
2 每应用配额 AICore 对单个 App 有推理次数限制 收到 ErrorCode.BUSY 时做排队重试
3 每日电池配额 长时间高频调用会触发电池保护 收到 BATTERY_USE_QUOTA_EXCEEDED 时停止调用
4 仅前台可用 后台 App 无法发起推理 收到 BACKGROUND_USE_BLOCKED 时引导用户回前台
5 版本差异 nano-v2 和 nano-v3 输出不一致 两个版本分别测试 + prompt 做兼容性调优
6 安全过滤误伤 AICore 内置 content filter 可能拒绝合法请求 调整 prompt 措辞,避免敏感关键词
7 Beta 阶段 API 签名可能变化 锁定版本号,关注 Release Notes

最容易忽略的:降级策略

端侧 AI 的「不支持就降级」逻辑,和当年 AndroidX 处理旧版本兼容的思路一模一样。把它当作一个特性检测来做就对了

不是所有用户的设备都支持 Gemini Nano。你必须准备一个降级方案:

kotlin 复制代码
suspend fun smartGenerate(prompt: String): String {
    return if (PromptApi.isAvailable(context)) {
        // ✅ 端侧推理
        val api = PromptApi.create(context)
        val request = PromptRequest.builder().setPrompt(prompt).build()
        api.generateContent(request).text
    } else {
        // ⚠️ 降级到云端 Gemini
        firebaseAI.generateContent(prompt).text
    }
}

总结

用一张表收尾全文核心信息:

问题 答案
它是什么? 侧 AI 方案 = ML Kit GenAI API + AICore + Gemini Nano
要钱吗? 不要。端侧推理完全免费
要联网吗? 不要。离线可用
我的数据安全吗? 安全。数据不离开设备,Private Compute Core 架构
支持哪些功能? 6 个 API:Prompt / 总结 / 校对 / 重写 / 图片描述 / 语音识别
哪些设备能用? Pixel 9+、三星 S26+、小米 15+、OnePlus 13+ 等旗舰
集成难度? 5 步搞定,比接 Retrofit 还简单
最大的坑? 设备覆盖率有限,必须做降级方案

你的 App 打算接端侧 AI 吗?准备用在哪个场景?评论区聊聊!


📎 参考资料

相关推荐
apihz1 小时前
全球域名 WHOIS 信息实时查询免费 API 接口教程,支持1000+后缀
android·网络·网络协议·tcp/ip·apache·域名·whois
AI大模型-小雄2 小时前
升级 ChatGPT Pro 后,如何用 Codex 做项目重构?一套更稳的实战流程
gpt·chatgpt·重构·ai编程·开发工具·codex·chatgpt pro
非典型Android程序员3 小时前
Binder机制学习总结
android
卡卡罗特AI3 小时前
ChatGPT取消5小时限额,Codex终于可以疯狂造起来了!Anthropic最严厉的父亲来了!
chatgpt·openai·ai编程
AI2中文网3 小时前
App Inventor 2 音频播放器 vs 音效 vs 视频播放器:三个媒体组件,选错了App直接卡死
android·音视频·媒体
大风车刮啊刮3 小时前
重磅!Anthropic 官方发布了 Loop Engineering 指南
ai编程
李剑一3 小时前
uni-app x 实现本地 JSON 文件的导入导出(APP端可用)
android·前端·uni-app
leeyi4 小时前
Callback 系统:Eino 的“事件总线“(第52篇-E38)
aigc·agent·ai编程
喜欢打篮球的普通人4 小时前
LLVM后端指令选择
android·java·javascript