news 2026/6/9 14:42:42

Android AI示例宝库:一站式探索Google AI模型的无限可能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android AI示例宝库:一站式探索Google AI模型的无限可能

Android AI Sample Catalog

Android AI Sample Catalog 是一个独立的应用程序,旨在为开发者提供一系列自包含的示例,集中展示Google AI模型解锁的各种生成式AI能力。这些示例涵盖了从基础文本对话、多模态理解到实时语音交互、视频内容分析以及图像生成与编辑等多个前沿领域,是学习和实践Android AI集成的宝贵资源。

重要提示:这些示例主要用于在特定场景下展示AI能力,代码可能经过简化。它们属于演示性质,不建议直接用于生产环境。最佳实践请参考官方文档和Now In Android项目。

需要Firebase支持:依赖于Google云端模型(如Gemini Pro, Gemini Flash)的示例,需要预先设置Firebase项目并将应用连接到Firebase(详细指南)。

🚧项目状态:我们正在持续向应用中添加更多示例。

功能特性

  • 全方位AI能力展示:集成Gemini、Imagen等多种Google AI模型,覆盖文本、图像、语音、视频四大模态。
  • 开箱即用的示例应用:每个示例都是独立、完整的Android模块,拥有清晰的UI界面,可直接运行体验。
  • 云端与本地AI兼顾:
    • 云端AI:使用Firebase AI SDK调用Gemini系列模型,实现强大的聊天、多模态分析、视频总结、图像生成等功能。
    • 本地AI:利用ML Kit GenAI API调用设备端Gemini Nano模型,实现图像描述、文本摘要、写作辅助等隐私友好、低延迟的任务。
  • 现代化的架构与实现:项目遵循Android推荐的架构模式,使用Kotlin、Coroutines、Flow等现代开发技术,代码结构清晰。
  • 实时交互体验:
    • Gemini Live API:演示如何通过实时语音与AI模型交互,操控一个待办事项应用,实现完全免提的对话式体验。
    • 流式响应:多个示例展示了如何处理AI模型的流式响应,提供更流畅的用户反馈。

安装指南

前置条件

  1. 开发环境:最新版本的Android Studio。
  2. Firebase项目(针对云端AI示例):需要创建一个Firebase项目并获取配置文件。

运行步骤

  1. 克隆仓库:
    gitclone https://github.com/android/ai-samples.gitcdai-samples
  2. 使用Android Studio打开:打开整个项目(ai-samples根目录)。
  3. 配置Firebase(可选但推荐):
    • 访问Firebase控制台创建新项目。
    • 在项目中添加一个Android应用,包名与app模块的包名一致(例如com.android.ai.samples)。
    • 下载配置文件google-services.json,并将其放入app/目录下。
    • 详细步骤可参考Firebase Android设置指南。
  4. 同步与运行:同步Gradle后,选择app配置并运行。应用将启动并展示示例列表,您可以自由导航和体验所有可用示例。

使用说明

应用运行后,主界面会列出所有集成的AI示例。点击任一示例即可进入对应的功能界面进行交互。

以下是几个核心示例的典型使用场景:

  1. Gemini 聊天机器人:与Gemini Flash模型进行纯文本对话。
  2. Gemini 多模态聊天:上传一张图片并附加文字问题,让模型根据图文内容回答。
  3. Imagen 图像生成:输入一段文字描述(如“一只在太空中的柯基犬”),生成对应的图像。
  4. 设备端图像描述:选择一张本地照片,让设备端Gemini Nano模型生成简短描述,无需网络连接。
  5. Gemini Live 语音待办事项:通过语音指令添加、删除、切换任务状态,体验实时语音AI交互。

核心代码

以下是从项目中选取的部分核心代码片段,展示了如何调用不同的AI API。

1. Gemini 多模态文本与图像生成

此代码来自GeminiImageChatViewModel.kt,展示了如何初始化一个支持生成文本和图像的Gemini模型,并处理用户的图文输入。

// 初始化支持图文生成的Gemini模型valgenerativeModel=Firebase.ai(backend=GenerativeBackend.googleAI()).generativeModel("gemini-3-pro-image-preview",generationConfig=generationConfig{temperature=0.9ftopK=32topP=1fmaxOutputTokens=4096// 关键:指定模型可以返回文本和图像两种模态responseModalities=listOf(ResponseModality.TEXT,ResponseModality.IMAGE)},safetySettings=listOf(SafetySetting(HarmCategory.HARASSMENT,HarmBlockThreshold.MEDIUM_AND_ABOVE),SafetySetting(HarmCategory.HATE_SPEECH,HarmBlockThreshold.MEDIUM_AND_ABOVE),SafetySetting(HarmCategory.SEXUALLY_EXPLICIT,HarmBlockThreshold.MEDIUM_AND_ABOVE),SafetySetting(HarmCategory.DANGEROUS_CONTENT,HarmBlockThreshold.MEDIUM_AND_ABOVE),),systemInstruction=content{text("""You are a friendly assistant. Keep your responses short.""")},)// 构建包含文本和图像的多模态内容并发送请求funsendMessageWithImage(message:String,bitmap:Bitmap?){viewModelScope.launch{valcontent=content{text(message)if(bitmap!=null){image(bitmap)// 将Bitmap添加为图像输入}}valresponse=chat.sendMessage(content)// 处理响应...}}

2. Gemini Live 实时语音与函数调用

此代码来自TodoScreenViewModel.kt,展示了如何初始化一个支持实时音频输入和函数调用(连接应用业务逻辑)的Gemini Live模型。

// 定义可供模型调用的函数(以添加待办事项为例)privatevaladdTodo=functionDeclaration("addTodo"){description="Adds a new todo item to the list"// 定义函数的参数模式parameters=schema{property("title",Schema.STRING){description="The title of the todo"}}// 当模型调用此函数时,返回响应的格式response=schema{property("result",Schema.STRING){description="The result of the operation"}}}// 初始化Gemini Live模型,并传入工具(函数)声明valgenerativeModel=Firebase.ai(backend=GenerativeBackend.vertexAI()).liveModel("gemini-2.5-flash-native-audio-preview-12-2025",generationConfig=liveGenerationConfig,systemInstruction=systemInstruction,tools=listOf(// 将多个函数声明作为工具提供给模型Tool.functionDeclarations(listOf(getTodoList,addTodo,removeTodo,toggleTodoStatus),),),)// 连接到实时会话try{session=generativeModel.connect()// 建立连接,准备接收和发送音频流}catch(e:Exception){Log.e(TAG,"Error connecting to the model",e)liveSessionState.value=LiveSessionState.Error}

3. 设备端图像描述 (Gemini Nano)

此代码来自GenAIImageDescriptionViewModel.kt,展示了如何使用ML Kit API调用设备端Gemini Nano模型进行图像描述,完全在本地运行。

// 初始化ML Kit图像描述客户端privatevarimageDescriber:ImageDescriber=ImageDescription.getClient(ImageDescriberOptions.builder(context).build(),)/** * 生成图像描述的核心方法。 * @param imageUri 要描述图像的Uri */privatesuspendfungenerateImageDescription(imageUri:Uri){// 更新UI状态为“生成中”_uiState.value=GenAIImageDescriptionUiState.Generating("")// 从Uri加载Bitmapvalbitmap=MediaStore.Images.Media.getBitmap(context.contentResolver,imageUri)// 构建图像描述请求valrequest=ImageDescriptionRequest.builder(bitmap).build()// 执行推理。runInference支持流式回调,可以在生成过程中实时更新UIimageDescriber.runInference(request){newText->// 每次模型生成新的文本片段时回调_uiState.update{currentState->// 累加生成的文本(currentStateas?GenAIImageDescriptionUiState.Generating)?.copy(partialOutput=currentState.partialOutput+newText)?:currentState}}.await()// 等待推理完全完成// 推理完成,更新UI状态为“成功”等...}

4. Imagen 图像编辑(局部重绘)

此代码来自ImagenEditingDataSource.kt,展示了如何使用Imagen编辑模型,根据用户绘制的遮罩和文本提示对图像进行局部修改(Inpainting)。

/** * 使用遮罩对图像进行局部重绘。 * @param sourceImage 原始图像 * @param maskImage 遮罩图像(白色区域表示需要重绘的部分) * @param prompt 描述重绘内容的文本提示 * @param editSteps 编辑步数,影响生成质量 * @return 编辑后的图像Bitmap */@OptIn(PublicPreviewAPI::class)suspendfuninpaintImageWithMask(sourceImage:Bitmap,maskImage:Bitmap,prompt:String,editSteps:Int=DEFAULT_EDIT_STEPS):Bitmap{// 调用Imagen编辑模型的editImage方法valimageResponse=editingModel.editImage(// 参考图像:包含原始图像和遮罩referenceImages=listOf(ImagenRawImage(sourceImage.toImagenInlineImage()),// 转换原始图像为Imagen格式ImagenRawMask(maskImage.toImagenInlineImage()),// 转换遮罩为Imagen格式),prompt=prompt,// 重绘提示config=ImagenEditingConfig(editMode=ImagenEditMode.INPAINT_INSERTION,// 指定编辑模式为“局部插入重绘”editSteps=editSteps,),)// 返回生成的第一个图像returnimageResponse.images.first().asBitmap()}

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 4:24:52

【Java毕设源码分享】基于springboot+vue的学生网课学习效果评价系统设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/9 17:21:05

八股文学习日常(并发编程)

1.介绍Java的内存模型(JMM)JMM是解决多线程并发问题的一套规则,简单来说就是在多线程环境下,保证线程访问共享变量不出错。核心需要解决的三个问题是可见性,原子性和有序性。可见性问题:线程A对数据进行修改…

作者头像 李华
网站建设 2026/6/7 17:23:45

7、Apache服务器管理与优化全解析

Apache服务器管理与优化全解析 1. 问题排查步骤 当遇到问题时,可按以下步骤进行排查: - 检查每个主机是否有别名。 - 调用 ifconfig -a 命令,查看是否有正确的网络接口。 - 检查 BindAddress 指令是否已定义,并且与别名对应。 2. httpd进程数量管理 服务器进程有…

作者头像 李华
网站建设 2026/6/9 9:12:20

16、Apache服务器的常见配置与使用指南

Apache服务器的常见配置与使用指南 1. 基础配置与操作 在进行Apache相关操作前,需确保指定目录有合适的内容,之后可通过以下命令重启httpd守护进程以读取新配置: apachectl graceful若要完成后续练习,需定位并理解 /usr/local/apache/ 下的Apache配置文件,同时找到Ap…

作者头像 李华
网站建设 2026/6/9 18:53:22

基于STM32单片机快递柜外卖柜扫码取件语音播报蓝牙无线APP/WiFi无线APP/摄像头视频监控/云平台设计S368

STM32-S368-存取柜取件码二维码语音播报存件手机号录入后台数据4舵机OLED屏按键(无线方式选择)产品功能描述:本系统由STM32F103C8T6单片机核心板、OLED屏、(无线蓝牙/无线WIFI/无线视频监控/联网云平台模块-可选)、键盘部分、语音播报模块接口…

作者头像 李华