# <p align="center"> PokemonGo <img src='http://cdn.51git.cn/2020-07-15-34.png'></p>
<p align="center"> 神奇宝贝 (PokemonGo) 基于 Jetpack + MVVM + Repository + Paging3 + Kotlin Flow 的实战项目 </p>
<p align="center">
这是一个小型的 App 项目,涉及到技术:Paging3(network + db),Dagger-Hilt,App Startup,DataBinding,Room,Motionlayout,Kotlin Flow,Coil,JProgressView 等等。
</p>
<p align="center">
<a title="GitHub Stars" target="_blank" href="/stargazers">
<img alt="GitHub Stars" src="https://img.shields.io/github/stars/.svg?label=Stars&style=social">
</a>
<a title="GitHub Forks" target="_blank" href="/network/members">
<img alt="GitHub Forks" src="https://img.shields.io/github/forks/.svg?label=Forks&style=social">
</a>
</p>
<p align="center">
<a href="hi-dhl"><img src="https://img.shields.io/badge/GitHub-HiDhl-4BC51D.svg?style=flat"></a> <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/license-Apache2.0-blue.svg?style=flat"></a> <img src="https://img.shields.io/badge/language-kotlin-orange.svg"/> <img src="https://img.shields.io/badge/platform-android-lightgrey.svg"/>
</p>
<p align="center"> PokemonGo 动态效果图如下所示,如果动图无法查看,请点击这里查看 <a href="http://cdn.51git.cn/2020-07-14-15946978385391.gif"> 动态效果图</a> | <a href="http://img.hi-dhl.com/Pokemon.png"> 静态图</a></p>
<p align="center">
<img src="http://img.hi-dhl.com/Pokemon.png"/>
</p>
### PokemonGo 更新记录
**2020-12-05:**
* upgrad kotlin plugin to 1.4.2
* delete Kotlin synthetics
* delete kotlin-android-extensions
**2020-09-27:**
* 使用 ConflatedBroadcastChannel 实现 DB 搜索
* 使用 StateFlow 实现 NetWork 搜索
* 增加了 Kotlin 常用操作符 `debounce` 、`filter` 、`flatMapLatest` 、 `distinctUntilChanged` 的使用
以上更新对应分析文章:
* [Kotlin StateFlow 搜索功能的实践 DB + NetWork](https://juejin.im/post/6876990111113248775)
**2020-07-26:**
* 增加了使用 sealed 在 Flow 基础上封装成功或者失败处理
* 自定义 RemoteMediator 实现**数据库**和**网络**加载数据( RemoteMediator 是 Paging3 当中重要成员 )
以上更新对应分析文章:
* [Google 推荐在项目中使用 sealed 和 RemoteMediator](https://juejin.im/post/5f1e61726fb9a07e594f2f63)
**2020-07-23:**
* Flow 在 MVVM 当中的使用
* Activity 、Fragment、ViewModel 结合 Flow 三种使用方式
* Flow 的异常处理
* 增加 Fragment 1.2.0 上重要的更新: 通过 Fragment 的构造函数传递参数,以及 FragmentFactory 和 FragmentContainerView 的使用
* ......
以上更新对应分析文章:
* [Google 推荐在 MVVM 架构中使用 Kotlin Flow](https://juejin.im/post/5f153adff265da22fb287e6e)
* [[译][Google工程师] 详解 FragmentFactory 如何优雅使用 Koin 以及部分源码分析](https://juejin.im/post/5ecb16f1f265da76fb0c3967)
**2020-07-14:**
1. 自定义 RemoteMediator 实现 network + db 的混合使用 ( RemoteMediator 是 Paging3 当中重要成员 )
2. 使用 Data Mapper 分离数据源 和 UI
3. Kotlin Flow 结合 Retrofit2 + Room 的混合使用
4. Kotlin Flow 与 LiveData 的使用
5. 使用 Coil 加载图片
6. 使用 ViewModel、LiveData、DataBinding 协同工作
7. 使用 Motionlayout 做动画
8. App Startup 与 Hilt 的使用
9. ......
关于 PokemonGo 项目分析的文章请查看 [神奇宝贝 眼前一亮的 Jetpack + MVVM 极简实战](https://juejin.im/post/5f0d303e6fb9a07e76550d4c)
**如果这个仓库对你有帮助,请仓库右上角帮我 star 一下,非常感谢。**
### 项目 PokemonGo 涉及到的技术
* [Gradle Versions Plugin](ben-manes/gradle-versions-plugin):检查依赖库是否存在最新版本
* [Kotlin Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-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 代码
* 项目架构
* MVVM 架构
* Repository 设计模式
* Data Mapper 数据映射
* [Retrofit2 & OkHttp3](square/retrofit):用于请求网路数据
* [Coil](coil-kt/coil/):基于 Kotlin 开发的首个图片加载库
* [material-components-android](material-components/material-components-android):模块化和可定制的材料设计 UI 组件
* [Motionlayout](https://developer.android.com/training/constraint-layout/motionlayout) :MotionLayout 是一种布局类型,可帮助您管理应用中的动画
* [Timber](JakeWharton/timber): 日志打印
* [JProgressView](hi-dhl/JProgressView) :一个小巧灵活可定制的进度条,支持图形:圆形、圆角矩形、矩形等等
**以上技术栈对应之前写的技术文章:**
* [Jetpack 最新成员 AndroidX App Startup 实践以及原理分析](https://juejin.im/post/5ee4bbe4f265da76b559bdfe)
* [Jetpack 成员 Paging3 实践以及源码分析(一)](https://juejin.im/post/5ee998e8e51d4573d65df02b)
* [Jetpack 新成员 Paging3 网络实践及原理分析(二)](https://juejin.im/post/5eeefbf4e51d45742c53ddce)
* [Jetpack 新成员 Hilt 实践(一)启程过坑记](https://juejin.im/post/5ef2f31951882565a94e06a5?utm_source=gold_browser_extension)
* [Jetpack 新成员 Hilt 实践之 App Startup(二)进阶篇](https://juejin.im/post/5ef7638c5188252e6a532db3)
* [Jetpack 新成员 Hilt 与 Dagger 大不同(三)落地篇](https://juejin.im/post/5efca0c1e51d4534a40d972f)
* [全方面分析 Hilt 和 Koin 性能](https://juejin.im/post/5f02114d5188252e8a081afb)
* [[译][2.4K Star] 放弃 Dagger 拥抱 Koin](https://juejin.im/post/5ebc1eb8e51d454dcf45744e)
* [项目中封装 Kotlin + Android Databinding](https://juejin.im/post/5e9c434a51882573663f6cc6)
* [为数不多的人知道的 Kotlin 技巧以及 原理解析(一)](https://juejin.im/post/5edfd7c9e51d45789a7f206d)
* [为数不多的人知道的 Kotlin 技巧以及 原理解析(二)](https://juejin.im/post/5f0747486fb9a07ea86dc881)
## 如何检查依赖库的版本更新
在项目的根目录下执行以下命令。
```
./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 最新版本检查
* 支持多模块的依赖库最新版本检查
* 支持多项目的依赖库最新版本检查
## MVVM 架构
PokemonGo 基于 MVVM 架构和 Repository 设计模式,如今几乎所有的 Android 开发者至少都听过 MVVM 架构,在谷歌 Android 团队宣布了 Jetpack 的视图�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
神奇宝贝(PokemonGo)基于Jetpack+MVVM+Repository设计模式+Data.zip (89个子文件)
PokemonGo-master
gradle.properties 395B
gradle
wrapper
gradle-wrapper.properties 202B
app
src
androidTest
java
com
hi
dhl
pokemon
ExampleInstrumentedTest.kt 672B
test
java
com
hi
dhl
pokemon
ExampleUnitTest.kt 353B
main
java
com
hi
dhl
pokemon
data
mapper
Entity2ItemModelMapper.kt 428B
InfoEntity2InfoModelMapper.kt 2KB
Mapper.kt 177B
repository
Repository.kt 621B
PokemonRepositoryImpl.kt 3KB
PokemonRemoteMediator.kt 5KB
local
RemoteKeysDao.kt 698B
AppDataBase.kt 787B
PokemonInfoDao.kt 686B
LocalTypeConverter.kt 919B
PokemonDao.kt 856B
entity
NetWorkPokemonInfo.kt 2KB
PokemonInfoEntity.kt 3KB
PokemonEntity.kt 360B
RemoteKeysEntity.kt 292B
ListingResponse.kt 610B
remote
PokemonResult.kt 649B
PokemonService.kt 615B
PokemonFactory.kt 1KB
utils
CollapsibleToolbar.kt 836B
AppHelper.kt 273B
ext
GsonExt.kt 359B
ContextExt.kt 745B
model
PokemonItemModel.kt 868B
PokemonInfoModel.kt 2KB
init
AppInitializer.kt 962B
PokemonGoApp.kt 915B
ui
detail
DetailActivity.kt 2KB
CustomFragmentFactory.kt 551B
DetailsFragment.kt 3KB
AlbumAdapter.kt 1KB
DetailViewModel.kt 4KB
binding
ViewBinding.kt 2KB
main
MainActivity.kt 3KB
footer
NetworkStateItemViewHolder.kt 1KB
FooterAdapter.kt 1KB
MainViewModel.kt 3KB
PokemonAdapter.kt 2KB
di
NetWorkModule.kt 1KB
RepositoryModule.kt 758B
RoomModule.kt 2KB
res
mipmap-xxhdpi
ic_launcher_round.png 8KB
mipmap-hdpi
ic_launcher_round.png 3KB
drawable-xhdpi
default_poke.png 199KB
mipmap-mdpi
ic_launcher_round.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 11KB
mipmap-xhdpi
ic_launcher_round.png 5KB
xml
scene_header.xml 4KB
values
dimens.xml 3KB
colors.xml 715B
integer.xml 342B
strings.xml 274B
styles.xml 1KB
drawable-v21
recycle_item_ripple.xml 438B
layout
recycle_item_pokemon.xml 2KB
recycle_item_album.xml 659B
include_details_progress.xml 7KB
activity_main.xml 2KB
recycie_item_network_state.xml 1KB
activity_details1.xml 9KB
motion_coordinatorlayout_header.xml 5KB
fragment_details.xml 9KB
activity_details.xml 678B
drawable
recycle_item_ripple.xml 271B
main_head_bg_round.xml 562B
background_search_bar.xml 285B
main_head_bg.xml 353B
home_bottom_bg_nor.xml 237B
home_bottom_bg_pre.xml 243B
ic_arrow.xml 371B
AndroidManifest.xml 2KB
proguard-rules.pro 750B
build.gradle 2KB
.gitignore 6B
gradlew.bat 2KB
build.gradle 897B
settings.gradle 45B
gradlew 5KB
buildSrc
src
test
kotlin
com
hi
dhl
DepsTest.java 134B
main
java
com
hi
dhl
plugin
BuildConfig.kt 379B
DependencyManager.kt 5KB
build.gradle.kts 114B
.gitignore 3KB
checkVersions.gradle 580B
README.md 11KB
共 89 条
- 1
资源评论
苹果酱0567
- 粉丝: 1534
- 资源: 854
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功