【自荐】神奇宝贝 (PokemonGo)
hi-dhl opened this issue · 0 comments
hi-dhl commented
项目简介
-
语言:Kotlin
-
分类:Android
-
项目描述:
神奇宝贝 (PokemonGo) 基于 Jetpack + MVVM + Repository + Paging3 + Kotlin Flow 的实战项目,包含了以下功能:
- 自定义 RemoteMediator 实现 network + db 的混合使用 ( RemoteMediator 是 Paging3 当中重要成员 )
- 使用 Data Mapper 分离数据源 和 UI
- Kotlin Flow 结合 Retrofit2 + Room 的混合使用
- Kotlin Flow 与 LiveData 的使用
- 使用 Coil 加载图片
- 使用 ViewModel、LiveData、DataBinding 协同工作
- 使用 Motionlayout 做动画
- App Startup 与 Hilt 的使用
- Flow 在 MVVM 当中的使用
- Activity 、Fragment、ViewModel 结合 Flow 三种使用方式
- Flow 的异常处理
- 增加 Fragment 1.2.0 上重要的更新: 通过 Fragment 的构造函数传递参数,以及 FragmentFactory 和 FragmentContainerView 的使用
-
推荐理由:
神奇宝贝 (PokemonGo) 使用了 2020 年最新的技术 以及每个技术都有对应的文章 分析其原理以及部分源码分析。
项目包含:Paging3(network + db),Dagger-Hilt,App Startup,DataBinding,Room,Motionlayout,Kotlin Flow,Coil,JProgressView 等等,主要技术以及文章分析如下所示:
- Gradle Versions Plugin:检查依赖库是否存在最新版本
- Kotlin Flow:flow 是对 Kotlin 协程的扩展,让我们可以像运行同步代码一样运行异步代码
- JetPack
- Paging3(network + db):用到了 Paging3 中的
RemoteMediator
用来实现 network + db - Dagger-Hilt (2.28-alpha):依赖注入框架
- App Startup:设置组件初始化顺序
- DataBinding:以声明方式将可观察数据绑定到界面上
- Room:在 SQLite 上提供了一个抽象层,流畅地访问 SQLite 数据库
- LiveData:在底层数据库更改时通知视图
- ViewModel:以注重生命周期的方式管理界面相关的数据
- Andriod KTX:编写更简洁、惯用的 Kotlin 代码
- Paging3(network + db):用到了 Paging3 中的
- 项目架构
- MVVM 架构
- Repository 设计模式
- Data Mapper 数据映射
- Retrofit2 & OkHttp3:用于请求网路数据
- Coil:基于 Kotlin 开发的首个图片加载库
- material-components-android:模块化和可定制的材料设计 UI 组件
- Motionlayout :MotionLayout 是一种布局类型,可帮助您管理应用中的动画
- Timber: 日志打印
- JProgressView :一个小巧灵活可定制的进度条,支持图形:圆形、圆角矩形、矩形等等
- 增加 Fragment 1.2.0 上重要的更新:FragmentFactory 和 FragmentContainerView 的使用
以上技术栈对应之前写的技术文章:
- Jetpack 最新成员 AndroidX App Startup 实践以及原理分析
- Jetpack 成员 Paging3 实践以及源码分析(一)
- Jetpack 新成员 Paging3 网络实践及原理分析(二)
- Jetpack 新成员 Hilt 实践(一)启程过坑记
- Jetpack 新成员 Hilt 实践之 App Startup(二)进阶篇
- Jetpack 新成员 Hilt 与 Dagger 大不同(三)落地篇
- 全方面分析 Hilt 和 Koin 性能
- [译][2.4K Star] 放弃 Dagger 拥抱 Koin
- 项目中封装 Kotlin + Android Databinding
- 为数不多的人知道的 Kotlin 技巧以及 原理解析(一)
- 为数不多的人知道的 Kotlin 技巧以及 原理解析(二)
- Google 推荐在 MVVM 架构中使用 Kotlin Flow
- [译][Google工程师] 详解 FragmentFactory 如何优雅使用 Koin 以及部分源码分析
- Google 推荐在项目中使用 sealed 和 RemoteMediator
-
项目后续更新计划:
- 加入更多 Jetpack 成员
- 设计更多的实用场景
- 增加单元测试
- 增加 Motionlayout 的使用
- ......
-
截图
PokemonGo 动态效果图如下所示,如果动图无法查看,请点击这里查看 动态效果图 | 静态图
如何检查依赖库的版本更新
在项目的根目录下执行以下命令。
./gradlew dependencyUpdates
会在当前目录下生成 build/dependencyUpdates/report.txt 文件,内容如下所示:
The following dependencies have later release versions:
- androidx.swiperefreshlayout:swiperefreshlayout [1.0.0 -> 1.1.0]
https://developer.android.com/jetpack/androidx
- com.squareup.okhttp3:logging-interceptor [3.9.0 -> 4.7.2]
https://square.github.io/okhttp/
- junit:junit [4.12 -> 4.13]
http://junit.org
- org.koin:koin-android [2.1.5 -> 2.1.6]
- org.koin:koin-androidx-viewmodel [2.1.5 -> 2.1.6]
- org.koin:koin-core [2.1.5 -> 2.1.6]
Gradle release-candidate updates:
- Gradle: [6.1.1 -> 6.5.1]
会列出所有需要更新的依赖库的最新版本,并且 Gradle Versions Plugin 比 AndroidStudio 所支持的更加全面:
- 支持手动方式管理依赖库最新版本检查
- 支持 ext 的方式管理依赖库最新版本检查
- 支持 buildSrc 方式管理依赖库最新版本检查
- 支持 gradle-wrapper 最新版本检查
- 支持多模块的依赖库最新版本检查
- 支持多项目的依赖库最新版本检查