Gemini Android 在 Android 上展示了 Google 的生成式 AI,并结合了 Stream Chat SDK for Compose。
这个存储库的目的是展示以下内容:
- 演示适用于 Android 的 Gemini API。
- 使用 Jetpack Compose 实现所有 UI 元素。
- 使用诸如 Hilt 和 AppStartup 的 Jetpack 库实现 Android 架构组件。
- 使用 Kotlin Coroutines 执行后台任务。
- 使用 Stream Chat Compose SDK 集成聊天系统,以处理实时事件。
📷 预览
✍️ 技术内容
如果您对整体架构、每层、生成式 AI、Gemini SDK 及此项目的实现细节感兴趣,请查看以下博客文章:使用 Google 的生成式 AI 构建 AI 聊天 Android 应用
🛥 Stream Chat & Video SDK
Gemini Android 是使用 Stream Chat SDK for Compose 构建的,用于实现消息系统。如果您对构建强大的实时视频/音频通话、音频房间和直播兴趣,请查看 Stream Video SDK for Compose!
Stream Chat
- GitHub 上的 Stream Chat SDK for Android
- GitHub 上的 Stream Chat SDK Android 示例
- Stream Chat Compose UI 组件指南
Stream Video
💻 如何构建项目?
要正确构建此项目,您需要按照以下说明进行:
- 前往 Stream 登录页面。
- 如果您有 GitHub 账户,点击 SIGN UP WITH GITHUB 按钮,您可以在几秒钟内注册。
- 如果您没有 GitHub 账户,请填写输入框并点击 START FREE TRIAL 按钮。
- 前往 仪表盘 并点击 创建应用 按钮,如下图所示。
- 按如下填写空白处并点击 创建应用 按钮。
- 您将看到如下图片的 密钥,然后复制它。
- 在此 Android 项目的根目录下创建一个名为 secrets.properties 的新文件,并将密钥添加到
secrets.properties
文件中,如下所示:
STREAM_API_KEY=..
-
再次前往您的 仪表盘 并点击您的应用。
-
在 概览 菜单中,通过滚动页面中部可以找到 认证 类别。
-
打开 禁用认证检查 选项并点击 提交 按钮,如下图所示。
-
点击左侧菜单的 Explorer 标签。
-
顺序点击 users -> Create New User 按钮,并按如下所示填写用户:
- 用户名:
gemini
- 用户ID:
gemini
- 访问 Google AI Studio,用您的 Google 账号登录并选择左侧菜单中的 获取API密钥,如下图所示:
- 创建您的生成式 AI SDKs API 密钥,您将获得如下图所示的密钥:
- 将密钥添加到
secrets.properties
文件中,如下所示:
GEMINI_API_KEY=..
- 构建并运行项目。
🛠 技术栈和开源库
- 最低 SDK 级别 21。
- 完全基于 Jetpack Compose + 协程 + Flow 进行异步处理。
- Compose Chat SDK for Messaging: Jetpack Compose 聊天消息 SDK 基于低级聊天客户端构建,并提供模块化、可自定义的 Compose UI 组件,您可以轻松将其嵌入应用中。
- Jetpack
- Compose:Android 用于构建原生 UI 的现代工具包。
- ViewModel:UI 相关数据的持有者,并且能够感知生命周期。
- App Startup:在应用启动时提供一种简单、高性能的组件初始化方式。
- Navigation:用于屏幕导航,并使用 Hilt Navigation Compose 进行依赖注入。
- Room:通过在 SQLite 之上提供抽象层来构建数据库,以便流畅地访问数据库。
- Datastore:异步、稳定且事务性地存储数据,克服了 SharedPreferences 的一些缺点。
- Hilt:依赖注入。
- Landscapist Glide,animation,placeholder: Jetpack Compose 图像加载库,使用 Glide、Coil 和 Fresco 获取并显示网络图像。
- Retrofit2 & OkHttp3:构建 REST API 和分页网络数据。
- Sandwich:构建轻量级且现代的响应接口,以处理 Android 的网络负载。
- Moshi:适用于 Kotlin 和 Java 的现代 JSON 库。
- ksp:Kotlin 符号处理 API。
- Balloon:现代化且精细的工具提示,适用于 Android,完全可定制并带有箭头和动画。
- StreamLog:轻量且可扩展的 Kotlin 和 Android 日志库。
- 基准配置文件:通过在 APK 中包含类和方法规范列表来改进应用性能,这些规范可由 Android 运行时使用。
🏛️ 架构
Gemini Android 遵循 Google 的官方架构指南。
Gemini Android 是根据 应用架构指南 构建的,因此它是展示架构在实际项目中如何运作的绝佳示例。
整体架构由两个层次组成:UI 层和数据层。每个层次都有专门的组件,并且它们各自具有不同的职责。 箭头表示组件依赖于其方向指向的目标组件。
架构概述
每个层次在以下方面有不同的职责。基本上,它们遵循单向事件/数据流。
UI 层
UI 层包含可以与用户交互的 UI 元素,如按钮、菜单、标签页等,以及保存应用状态并在配置更改时恢复数据的 ViewModel。
数据层
数据层由包含业务逻辑的存储库组成,例如从本地数据库查询数据和从网络请求远程数据。它作为业务逻辑的离线优先来源并遵循单一信息源原则。
有关整体架构的更多信息,请查看 使用 Jetpack Compose 构建实时 WhatsApp 克隆。
模块化
Gemini Android 实施了以下模块化策略:
-
可重用性:通过有效地模块化可重用代码,它不仅便于代码共享,还限制了跨不同模块的代码访问。
-
并行构建:模块能够并行构建,从而减少整体构建时间。
-
去中心化关注:将特定模块分配给各个开发团队,允许他们专注于指定的领域。
💯 MAD 分数
🤝 贡献
除聊天功能外,大多数功能尚未完成,因此任何人都可以按照 贡献指南 贡献并改进此项目。
发现这个库有用吗?💙
通过加入这个库的 stargazers 来支持它。:star:
还可以 关注我 以获取我的下一次创作!🤩
许可证
由 2024 skydoves (Jaewoong Eum) 设计和开发
根据 Apache 许可证,第 2.0 版 (以下简称“许可证”) 许可;
除非符合许可证,否则您不得使用此文件。
您可以在以下网址获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,根据许可证分发的软件按“现状”提供,
不提供任何明示或暗示的担保或条件。
请参阅许可证以了解许可下的特定语言和限制。