你的 Android App 还没接 AI?Gemini API 接入全攻略

ChatGPT 出来都三年了。

你的 App 里,还没有一行 AI 代码?

不是不想接,是不知道从哪下手。Gemini、Vertex AI、Google AI Studio......搜一圈全是英文文档,硬着头皮读完,发现还有 quota 限制、计费问题、网络问题。

这篇文章帮你把这些全理清楚。

先搞清楚你要接的是哪个 Gemini

Google 的 AI 产品线让人头大,同样叫"Gemini API",入口有三个:

Google AI Studio(gemini.google.dev) 面向开发者个人,免费额度慷慨,拿 API Key 就能用。适合学习、原型验证、小项目。

Vertex AI(cloud.google.com/vertex-ai) 企业级,走 Google Cloud,需要 GCP 账号。支持更多模型、更高并发、数据不用于训练。适合正式上线的产品。

Android Gemini SDK(本地推理) 把模型跑在设备上,不联网,隐私好,但只支持 Gemini Nano,能力有限。

大多数开发者从 Google AI Studio 起步,上线再迁 Vertex AI。

本文重点讲这条路。

拿到 API Key,五分钟跑起来

打开 aistudio.google.com,登录 Google 账号,点「Get API Key」,复制保存好。

然后在项目里加依赖:

kotlin 复制代码
// build.gradle.kts (app)
dependencies {
    implementation("com.google.ai.client.generativeai:generativeai:0.9.0")
}

最简单的调用,十行代码:

kotlin 复制代码
val model = GenerativeModel(
    modelName = "gemini-2.0-flash",
    apiKey = "YOUR_API_KEY"
)

val response = model.generateContent("用一句话介绍 Kotlin 协程")
println(response.text)

跑起来了吧?

但你肯定不会把 API Key 明文写在代码里。

API Key 怎么安全存放

别用硬编码,别提交到 Git。

方法一:local.properties(推荐开发阶段)

properties 复制代码
# local.properties(已加入 .gitignore)
GEMINI_API_KEY=your_key_here
kotlin 复制代码
// build.gradle.kts
android {
    buildFeatures { buildConfig = true }
    defaultConfig {
        buildConfigField(
            "String",
            "GEMINI_API_KEY",
            "\"${properties["GEMINI_API_KEY"]}\""
        )
    }
}
kotlin 复制代码
// 使用
val apiKey = BuildConfig.GEMINI_API_KEY

方法二:走后端中转(推荐生产环境)

API Key 放服务端,Android 端只调你自己的接口。这样 Key 不会出现在 APK 里,被反编译也拿不到。

生产环境一定要走方法二。

真正有用的功能:流式输出

一次性等模型生成完再显示,用户体验很差。流式输出(Streaming)才是正确姿势,像打字机一样逐字显示。

kotlin 复制代码
viewModelScope.launch {
    val prompt = "解释一下什么是 Flow,要通俗易懂"

    model.generateContentStream(prompt).collect { chunk ->
        chunk.text?.let { text ->
            _uiState.update { it + text }
        }
    }
}

配合 Compose 展示:

kotlin 复制代码
@Composable
fun AiResponseScreen(viewModel: AiViewModel = viewModel()) {
    val text by viewModel.uiState.collectAsStateWithLifecycle()

    LazyColumn {
        item {
            Text(
                text = text,
                modifier = Modifier.padding(16.dp)
            )
        }
    }
}

流式输出的体验和一次性输出差得远,这个优先级要高。

多轮对话怎么做

单次问答用 generateContent,多轮对话用 startChat,SDK 会帮你维护历史记录。

kotlin 复制代码
val chat = model.startChat(
    history = listOf(
        content(role = "user") { text("你好,我在学 Android 开发") },
        content(role = "model") { text("太棒了!你目前学到哪个阶段了?") }
    )
)

// 继续对话
val response = chat.sendMessage("我刚学完 Jetpack Compose")
println(response.text)

历史记录由 SDK 自动拼接进每次请求,你不用手动管理。

如果要持久化对话历史(App 重启后还在),自己把 history 序列化到本地存储就行。

图片理解:多模态输入

Gemini 是原生多模态模型,传图片直接分析。

kotlin 复制代码
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.screenshot)

val response = model.generateContent(
    content {
        image(bitmap)
        text("这张截图里有什么 bug?帮我分析一下")
    }
)
println(response.text)

结合相机或图库选择器,可以做出「拍照识别」「截图分析」等功能,很有实用价值。

System Prompt:让模型有个性格

想让模型只回答特定领域的问题?用 systemInstruction

kotlin 复制代码
val model = GenerativeModel(
    modelName = "gemini-2.0-flash",
    apiKey = apiKey,
    systemInstruction = content {
        text("""
            你是一个专业的 Android 开发助手。
            只回答 Android 开发相关的问题。
            回答要简洁,优先给出代码示例。
            如果用户问的不是 Android 相关问题,礼貌拒绝并引导回正题。
        """.trimIndent())
    }
)

System Prompt 是塑造 AI 功能边界的核心手段,别忽略它。

踩坑记录

坑一:国内网络访问不了

generativelanguage.googleapis.com 在国内被墙。开发阶段可以走代理,生产环境必须走自己的后端中转,或者用支持的地区节点。

坑二:免费额度限制

Google AI Studio 免费版有 RPM(每分钟请求数)限制,Gemini 2.0 Flash 免费版 15 RPM。压测或高并发场景会触发 429 错误,要加重试逻辑:

kotlin 复制代码
suspend fun generateWithRetry(prompt: String, maxRetry: Int = 3): String {
    repeat(maxRetry) { attempt ->
        try {
            return model.generateContent(prompt).text ?: ""
        } catch (e: Exception) {
            if (attempt == maxRetry - 1) throw e
            delay(2000L * (attempt + 1)) // 指数退避
        }
    }
    return ""
}

坑三:响应内容被截断

模型默认有最大 token 输出限制,长文本可能被截断。可以在 GenerationConfig 里配置:

kotlin 复制代码
val config = generationConfig {
    maxOutputTokens = 8192
    temperature = 0.7f
}

val model = GenerativeModel(
    modelName = "gemini-2.0-flash",
    apiKey = apiKey,
    generationConfig = config
)

坑四:APK 被逆向拿到 Key

前面说了,生产环境一定走后端中转。APK 里的任何字符串,有经验的人五分钟能提取出来。

从 Google AI Studio 迁移到 Vertex AI

项目成熟了、要上线了,把 Key 换成 Vertex AI。改动极小:

kotlin 复制代码
// 之前:Google AI Studio
val model = GenerativeModel(
    modelName = "gemini-2.0-flash",
    apiKey = "YOUR_API_KEY"
)

// 之后:Vertex AI(其余代码不变)
val vertexAI = Firebase.vertexAI
val model = vertexAI.generativeModel("gemini-2.0-flash")

Vertex AI 走 Firebase,需要先配置 Firebase 项目,但对话、流式、多模态的 API 完全一致,迁移成本很低。

一个完整的最小可用架构

scss 复制代码
UI Layer (Compose)
    ↓
ViewModel (管理状态、调用 UseCase)
    ↓
GeminiRepository (封装 SDK 调用)
    ↓
GenerativeModel (Google AI SDK)

GenerativeModel 注入到 Repository,Repository 注入到 ViewModel,UI 只感知状态变化。这样后续换模型、加重试、加缓存都不影响 UI 层。


2025 年了,用户对 App 有 AI 能力的期待越来越高。

接入成本其实没你想的那么高------API Key + 一个依赖 + 十行代码,原型就跑起来了。

剩下的,就是想清楚你的场景:写作助手、代码补全、图片分析、智能客服......把 AI 接进来,能解决用户什么实际问题?

你的 App 最想加哪个 AI 功能?评论区聊聊。

#Android开发 #GeminiAPI #AI #移动开发 #Kotlin

相关推荐
BreezeDove21 分钟前
【Android】Flutter3.35项目启动超时问题
android·flutter
故渊at31 分钟前
第十四板块:Android 硬件抽象与安全加固 | 第三十四篇:Hardware Composer (HWC) 与 显示安全(HDCP)
android·安全·composer·安全加固·hwc·硬件抽象
KIO no way38 分钟前
AI内容编排是什么_聊聊CSDN_AI数字营销背后的分发逻辑
android·人工智能
故渊at1 小时前
第十四板块:Android 硬件抽象与安全加固 | 第三十三篇:Verified Boot 与 硬件信任链(Trusty TEE)
android·安全·信任链·verified
Tangyuewei1 小时前
我用 AI 辅助开发了一个发型 App,然后打包成了 APK
android·人工智能·ai编程
程序课代表1 小时前
Android源码分析挖掘(二) fork大师zygote进程
android·zygote
帅次1 小时前
Android 16(API Level 36)Activity 启动流程源码级解析
android·framework·源码解析·activity启动流程·android 16
chian-ocean2 小时前
Microi吾码:从零到服装ERP:低代码打造企业级系统的实战之旅
android·低代码·rxjava
故渊at4 小时前
第十五板块:Android 系统调试与逆向工程 | 第三十五篇:ART 虚拟机内部机制与 OAT 文件格式
android·虚拟机·art·机器码·oat文件格式
alexhilton10 小时前
Android的Agent优先时代:构建时vs运行时
android·kotlin·android jetpack