当前位置: 首页 > news >正文

Google IO App:一个写了十年的 Android 示例项目

文章目录

  • Google I/O App:一个写了十年的 Android 示例项目
    • 项目本身是干什么的
    • 技术栈才是重点
    • 2021 年的最后一次大更新
    • 现在还能用吗
    • 适合谁看

Google I/O App:一个写了十年的 Android 示例项目

Google 有个开源项目叫 iosched,是 Google I/O 开发者大会的官方 Android 应用。Star 数 2.1 万,2023 年正式归档。这个项目从 2009 年开始,一写就是十年,现在已经停止维护了。

为什么一个停更的项目还值得说?因为 Google 把它当成 Android 开发的"教科书"来写的。

项目本身是干什么的

这是 Google I/O 大会的配套 App。参会者用它查看日程、预约场次、浏览地图、标记感兴趣的演讲。功能不算复杂,但胜在完整。一个大会 App 该有的都有了:日程列表、筛选、收藏、预约、地图、信息页。

技术栈才是重点

这个项目的真正价值不在功能,在于它展示了一套完整的现代 Android 开发方案。

语言和构建:全部用 Kotlin 写的,构建脚本也是 Kotlin DSL,不是传统的 Groovy。

架构:MVVM 模式,用 ViewModel 管理逻辑,Activity 和 Fragment 只负责 UI。数据层用 Repository 模式封装,上层不关心数据从哪来。中间还加了一层轻量的 Domain 层,专门处理业务逻辑。

异步处理:用协程和 Kotlin Flows。2021 年做了一次大迁移,把 LiveData 全换成 Flows 了。

数据存储:用户数据存在 Cloud Firestore,支持离线同步。用户偏好设置用 Jetpack DataStore,替掉了老的 SharedPreferences。会议数据从远程拉取,缓存在内存里。

依赖注入:Hilt。项目还专门写了一篇从 dagger-android 迁移到 Hilt 的文章。

搜索:用 Room 数据库的 Fts4 全文检索,可以搜 session、speaker、codelab。

测试:UI 测试用 Espresso,单元测试用 JUnit4 加 Mockito。还用了 Jetpack Benchmark 测启动性能,专门跑了 Bootstrap 数据解析的基准测试。

其他:Navigation 组件管页面跳转,ViewPager2 做滑动切换,Firebase 全家桶(Firestore、Cloud Functions、Cloud Messaging、Remote Config)负责后端逻辑。

2021 年的最后一次大更新

这个项目在 2021 年做过一轮架构升级,虽然大会已经不办了,但代码还在迭代:

  • LiveData 迁移到 Kotlin Flows
  • 支持大屏幕和多形态设备
  • SharedPreferences 换成 DataStore
  • 实验性地引入 Jetpack Compose(在 compose 分支)

这些改动都是当时 Android 开发的前沿实践。

现在还能用吗

代码还能跑。项目里有个 staging 变体,编译时替换了部分模块,不依赖 Firebase 这些远程服务,不需要 API Key 就能试用。想研究代码的可以直接拉下来跑。

不过要注意,这是 2019 年的数据,UI 也是那时候的样子。想看最新的 Android 开发实践,Google 推荐去看 Now in Android 那个新项目。

适合谁看

想学 Android 架构的开发者,这个项目是现成的教材。代码组织、模块划分、技术选型,都是 Google 自己推荐的做法。比起那些小 demo,这个项目的复杂度更接近真实产品。

停更不代表没价值。十年积累的代码,该踩的坑都踩过了,该做的优化都做了。读源码比看文档学得快。

近真实产品。

停更不代表没价值。十年积累的代码,该踩的坑都踩过了,该做的优化都做了。读源码比看文档学得快。

http://www.jsqmd.com/news/1097213/

相关文章:

  • AI Agent 的记忆机制:从短期记忆到向量数据库
  • 从源码到应用:Kiran Session Guard 编译与安装完全教程
  • Kubernetes 交付 Skill:Helm Chart 生成、参数优化与部署检查一条龙
  • [实战] 2026年扫描图纸怎么添加气泡?高效率FAI检验计划编制指南
  • 毕昇JDK 25部署最佳实践:生产环境中的性能调优策略
  • 每天一课:算法系统学习路径
  • 终极指南:5步轻松解锁Honey Select 2完整汉化与去码功能
  • Java 线程池与异步调用详解
  • 1数据分析前置条件【2026.6.29】
  • GLM 5.2 击败 Claude:国产大模型在网络安全基准测试中的逆袭
  • 2026阜新黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • FreeRTOS上GPIO模拟IIC,别再傻等vTaskDelay了!用DWT定时器搞定us级延时
  • Metasploit实战:从MS08-067到Shellshock,8大高危漏洞深度复现与原理剖析
  • Lenovo Legion Toolkit:拯救者笔记本的终极轻量控制神器
  • 智能批量水印处理:摄影师的终极效率解决方案
  • Kiran Session Guard 开发者指南:贡献代码与扩展功能的终极路径
  • 大牌同款源头直销大厂怎么找?
  • Path of Building PoE2:新手必学的5步天赋树规划终极指南
  • DeepInsight社区贡献指南:如何参与开源项目开发
  • Cursor + GitOps:自动化运维新姿势
  • 别再手动提取序列了!用gffread 0.12.7一键搞定转录本、CDS和蛋白序列(附完整命令)
  • ComfyUI-Impact-Pack:为什么每个AI绘画师都需要掌握这个图像增强神器?
  • 别再折腾官方SDK了!用Java Socket直连斑马ZD888打印机,5分钟搞定中文标签打印
  • 第23天:实时进程调度:SCHED_FIFO/SCHED_RR 的嵌入式实时应用
  • 专业做震散机的服务商
  • 08 一文讲清楚memory,claude.md与skill
  • 【人工智能】AI时代给新手小白的一些学习建议
  • BetterJoy技术解析:构建Switch控制器在Windows平台的XInput兼容桥梁
  • ESP32选型指南:从ESP32-S3到C3,不同型号怎么选?搭配ESP-IDE环境实测性能差异
  • flink的CDC功能的设置