{"id":27402309,"url":"https://github.com/hi-dhl/pokemongo","last_synced_at":"2025-05-16T09:06:41.133Z","repository":{"id":37373429,"uuid":"279366649","full_name":"hi-dhl/PokemonGo","owner":"hi-dhl","description":"神奇宝贝 (PokemonGo) 基于 Jetpack + MVVM + Repository  设计模式 + Data Mapper + Kotlin Flow 的实战项目，如果这个仓库对你有帮助，请仓库右上角帮我 star 一下，非常感谢。","archived":false,"fork":false,"pushed_at":"2021-01-21T03:19:32.000Z","size":709,"stargazers_count":1606,"open_issues_count":0,"forks_count":249,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-04-14T04:30:35.376Z","etag":null,"topics":["appstartup","coil","dagger-hilt","data-mapper","databinding","databinding-android","jprogressview","kotlin-flow","mediatorresult","motionlayout","mvvm","okhttp3","paging3","repository","retrofit2","room","timber"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hi-dhl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-13T17:18:01.000Z","updated_at":"2025-04-02T11:13:53.000Z","dependencies_parsed_at":"2022-08-08T20:01:31.143Z","dependency_job_id":null,"html_url":"https://github.com/hi-dhl/PokemonGo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hi-dhl%2FPokemonGo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hi-dhl%2FPokemonGo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hi-dhl%2FPokemonGo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hi-dhl%2FPokemonGo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hi-dhl","download_url":"https://codeload.github.com/hi-dhl/PokemonGo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254501558,"owners_count":22081528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appstartup","coil","dagger-hilt","data-mapper","databinding","databinding-android","jprogressview","kotlin-flow","mediatorresult","motionlayout","mvvm","okhttp3","paging3","repository","retrofit2","room","timber"],"created_at":"2025-04-14T04:25:06.580Z","updated_at":"2025-05-16T09:06:36.118Z","avatar_url":"https://github.com/hi-dhl.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cp align=\"center\"\u003e PokemonGo \u003cimg src='http://cdn.51git.cn/2020-07-15-34.png'\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e 神奇宝贝 (PokemonGo) 基于 Jetpack + MVVM + Repository + Paging3 + Kotlin Flow 的实战项目 \u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n这是一个小型的 App 项目，涉及到技术：Paging3（network + db），Dagger-Hilt，App Startup，DataBinding，Room，Motionlayout，Kotlin Flow，Coil，JProgressView 等等。\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \n  \u003ca title=\"GitHub Stars\" target=\"_blank\" href=\"https://github.com/hi-dhl/PokemonGo/stargazers\"\u003e\n  \u003cimg alt=\"GitHub Stars\" src=\"https://img.shields.io/github/stars/hi-dhl/PokemonGo.svg?label=Stars\u0026style=social\"\u003e\n  \u003c/a\u003e  \n  \n  \u003ca title=\"GitHub Forks\" target=\"_blank\" href=\"https://github.com/hi-dhl/PokemonGo/network/members\"\u003e\n  \u003cimg alt=\"GitHub Forks\" src=\"https://img.shields.io/github/forks/hi-dhl/PokemonGo.svg?label=Forks\u0026style=social\"\u003e\n  \u003c/a\u003e\n  \n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/hi-dhl\"\u003e\u003cimg src=\"https://img.shields.io/badge/GitHub-HiDhl-4BC51D.svg?style=flat\"\u003e\u003c/a\u003e \u003ca href=\"https://opensource.org/licenses/Apache-2.0\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache2.0-blue.svg?style=flat\"\u003e\u003c/a\u003e \u003cimg src=\"https://img.shields.io/badge/language-kotlin-orange.svg\"/\u003e \u003cimg src=\"https://img.shields.io/badge/platform-android-lightgrey.svg\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e PokemonGo 动态效果图如下所示，如果动图无法查看，请点击这里查看 \u003ca href=\"http://cdn.51git.cn/2020-07-14-15946978385391.gif\"\u003e 动态效果图\u003c/a\u003e | \u003ca href=\"http://img.hi-dhl.com/Pokemon.png\"\u003e 静态图\u003c/a\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"http://img.hi-dhl.com/Pokemon.png\"/\u003e \n\u003c/p\u003e\n\n### PokemonGo 更新记录\n\n**2020-12-05:**\n\n* upgrad kotlin plugin to 1.4.2\n* delete Kotlin synthetics \n* delete kotlin-android-extensions\n\n**2020-09-27:**\n\n* 使用 ConflatedBroadcastChannel 实现 DB 搜索\n* 使用 StateFlow 实现 NetWork 搜索\n* 增加了 Kotlin 常用操作符 `debounce` 、`filter` 、`flatMapLatest` 、 `distinctUntilChanged` 的使用\n\n以上更新对应分析文章：\n\n* [Kotlin StateFlow 搜索功能的实践 DB + NetWork](https://juejin.im/post/6876990111113248775)\n\n**2020-07-26:**\n\n* 增加了使用 sealed 在 Flow 基础上封装成功或者失败处理\n* 自定义 RemoteMediator 实现**数据库**和**网络**加载数据( RemoteMediator 是 Paging3 当中重要成员 )\n\n以上更新对应分析文章：\n\n* [Google 推荐在项目中使用 sealed 和 RemoteMediator](https://juejin.im/post/5f1e61726fb9a07e594f2f63)\n\n**2020-07-23:**\n\n* Flow 在 MVVM 当中的使用\n* Activity 、Fragment、ViewModel 结合 Flow 三种使用方式\n* Flow 的异常处理\n* 增加 Fragment 1.2.0 上重要的更新： 通过 Fragment 的构造函数传递参数，以及 FragmentFactory 和 FragmentContainerView 的使用\n* ......\n\n以上更新对应分析文章：\n\n* [Google 推荐在 MVVM 架构中使用 Kotlin Flow](https://juejin.im/post/5f153adff265da22fb287e6e)\n* [[译][Google工程师] 详解 FragmentFactory 如何优雅使用 Koin 以及部分源码分析](https://juejin.im/post/5ecb16f1f265da76fb0c3967)\n\n**2020-07-14:**\n\n1. 自定义 RemoteMediator 实现 network + db 的混合使用 ( RemoteMediator 是 Paging3 当中重要成员 )\n2. 使用 Data Mapper 分离数据源 和 UI\n3. Kotlin Flow 结合  Retrofit2 + Room 的混合使用\n4. Kotlin Flow 与 LiveData 的使用\n5. 使用 Coil 加载图片\n6. 使用 ViewModel、LiveData、DataBinding 协同工作\n7. 使用 Motionlayout 做动画\n8. App Startup 与 Hilt 的使用\n9. ......\n\n关于 PokemonGo 项目分析的文章请查看 [神奇宝贝 眼前一亮的 Jetpack + MVVM 极简实战](https://juejin.im/post/5f0d303e6fb9a07e76550d4c)\n\n**如果这个仓库对你有帮助，请仓库右上角帮我 star 一下，非常感谢。**\n\n### 项目 PokemonGo 涉及到的技术\n\n* [Gradle Versions Plugin](https://github.com/ben-manes/gradle-versions-plugin)：检查依赖库是否存在最新版本\n* [Kotlin Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/)：flow 是对 Kotlin 协程的扩展，让我们可以像运行同步代码一样运行异步代码\n* JetPack\n    * Paging3（network + db）：用到了 Paging3 中的  `RemoteMediator` 用来实现 network + db\n    * Dagger-Hilt (2.28-alpha)：依赖注入框架\n    * App Startup：设置组件初始化顺序\n    * DataBinding：以声明方式将可观察数据绑定到界面上\n    * Room：在 SQLite 上提供了一个抽象层，流畅地访问 SQLite 数据库\n    * LiveData：在底层数据库更改时通知视图\n    * ViewModel：以注重生命周期的方式管理界面相关的数据\n    * Andriod KTX：编写更简洁、惯用的 Kotlin 代码\n* 项目架构\n    * MVVM 架构\n    * Repository 设计模式\n    * Data Mapper 数据映射 \n* [Retrofit2 \u0026 OkHttp3](https://github.com/square/retrofit)：用于请求网路数据\n* [Coil](https://github.com/coil-kt/coil/)：基于 Kotlin 开发的首个图片加载库\n* [material-components-android](https://github.com/material-components/material-components-android)：模块化和可定制的材料设计 UI 组件\n* [Motionlayout](https://developer.android.com/training/constraint-layout/motionlayout) ：MotionLayout 是一种布局类型，可帮助您管理应用中的动画\n* [Timber](https://github.com/JakeWharton/timber): 日志打印\n* [JProgressView](https://github.com/hi-dhl/JProgressView) ：一个小巧灵活可定制的进度条，支持图形：圆形、圆角矩形、矩形等等\n\n**以上技术栈对应之前写的技术文章：**\n\n* [Jetpack 最新成员 AndroidX App Startup 实践以及原理分析](https://juejin.im/post/5ee4bbe4f265da76b559bdfe)\n* [Jetpack 成员 Paging3 实践以及源码分析（一）](https://juejin.im/post/5ee998e8e51d4573d65df02b)\n* [Jetpack 新成员 Paging3 网络实践及原理分析（二）](https://juejin.im/post/5eeefbf4e51d45742c53ddce)\n* [Jetpack 新成员 Hilt 实践（一）启程过坑记](https://juejin.im/post/5ef2f31951882565a94e06a5?utm_source=gold_browser_extension) \n* [Jetpack 新成员 Hilt 实践之 App Startup（二）进阶篇](https://juejin.im/post/5ef7638c5188252e6a532db3)\n* [Jetpack 新成员 Hilt 与 Dagger 大不同（三）落地篇](https://juejin.im/post/5efca0c1e51d4534a40d972f)\n* [全方面分析 Hilt 和 Koin 性能](https://juejin.im/post/5f02114d5188252e8a081afb)\n* [[译][2.4K Star] 放弃 Dagger 拥抱 Koin](https://juejin.im/post/5ebc1eb8e51d454dcf45744e)\n* [项目中封装 Kotlin + Android Databinding](https://juejin.im/post/5e9c434a51882573663f6cc6)\n* [为数不多的人知道的 Kotlin 技巧以及 原理解析(一)](https://juejin.im/post/5edfd7c9e51d45789a7f206d)\n* [为数不多的人知道的 Kotlin 技巧以及 原理解析(二)](https://juejin.im/post/5f0747486fb9a07ea86dc881)\n\n\n## 如何检查依赖库的版本更新\n\n在项目的根目录下执行以下命令。\n\n```\n./gradlew dependencyUpdates\n```\n    \n会在当前目录下生成 build/dependencyUpdates/report.txt 文件，内容如下所示：\n\n```\nThe following dependencies have later release versions:\n - androidx.swiperefreshlayout:swiperefreshlayout [1.0.0 -\u003e 1.1.0]\n     https://developer.android.com/jetpack/androidx\n - com.squareup.okhttp3:logging-interceptor [3.9.0 -\u003e 4.7.2]\n     https://square.github.io/okhttp/\n - junit:junit [4.12 -\u003e 4.13]\n     http://junit.org\n - org.koin:koin-android [2.1.5 -\u003e 2.1.6]\n - org.koin:koin-androidx-viewmodel [2.1.5 -\u003e 2.1.6]\n - org.koin:koin-core [2.1.5 -\u003e 2.1.6]\n\nGradle release-candidate updates:\n - Gradle: [6.1.1 -\u003e 6.5.1]\n```\n\n会列出所有需要更新的依赖库的最新版本，并且 Gradle Versions Plugin 比 AndroidStudio 所支持的更加全面：\n\n* 支持手动方式管理依赖库最新版本检查\n* 支持 ext 的方式管理依赖库最新版本检查\n* 支持 buildSrc 方式管理依赖库最新版本检查\n* 支持 gradle-wrapper 最新版本检查\n* 支持多模块的依赖库最新版本检查\n* 支持多项目的依赖库最新版本检查\n    \n## MVVM 架构\n\nPokemonGo 基于  MVVM 架构和 Repository 设计模式，如今几乎所有的 Android 开发者至少都听过 MVVM 架构，在谷歌 Android 团队宣布了 Jetpack 的视图模型之后，它已经成为了现代 Android 开发模式最流行的架构之一。\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"http://cdn.51git.cn/2020-07-12-159453363449491.jpg\"/\u003e \n\u003c/p\u003e\n\nJetpack 的视图模型的 MVVM 架构由 View + DataBinding + ViewModel + Model 组成。\n\n## TODO\n\n* 加入更多 Jetpack 成员\n* 设计更多的实用场景\n* 增加单元测试\n* 增加 Motionlayout 的使用\n* ......\n\n### 联系我\n\n* 个人微信：hi-dhl\n* 公众号：ByteCode，包含 Jetpack ，Kotlin ，Android 10 系列源码，译文，LeetCode / 剑指 Offer / 多线程 / 国内外大厂算法题 等等一系列文章\n\n\u003cimg src='http://cdn.51git.cn/2020-10-20-151047.png' width = 400px/\u003e\n\n---\n\n最后推荐我一直在更新维护的项目和网站：\n\n* 计划建立一个最全、最新的 AndroidX Jetpack 相关组件的实战项目 以及 相关组件原理分析文章，正在逐渐增加 Jetpack 新成员，仓库持续更新，欢迎前去查看：[AndroidX-Jetpack-Practice](https://github.com/hi-dhl/AndroidX-Jetpack-Practice)\n\n* LeetCode / 剑指 offer / 国内外大厂面试题 / 多线程 题解，语言 Java 和 kotlin，包含多种解法、解题思路、时间复杂度、空间复杂度分析\u003cbr/\u003e\n\n    \u003cimage src=\"http://cdn.51git.cn/2020-10-04-16017884626310.jpg\" width = \"500px\"/\u003e\n  \n    * 剑指 offer 及国内外大厂面试题解：[在线阅读](https://offer.hi-dhl.com)\n    * LeetCode 系列题解：[在线阅读](https://leetcode.hi-dhl.com)\n\n* 最新 Android 10 源码分析系列文章，了解系统源码，不仅有助于分析问题，在面试过程中，对我们也是非常有帮助的，仓库持续更新，欢迎前去查看 [Android10-Source-Analysis](https://github.com/hi-dhl/Android10-Source-Analysis)\n\n* 整理和翻译一系列精选国外的技术文章，每篇文章都会有**译者思考**部分，对原文的更加深入的解读，仓库持续更新，欢迎前去查看 [Technical-Article-Translation](https://github.com/hi-dhl/Technical-Article-Translation)\n\n* 「为互联网人而设计，国内国外名站导航」涵括新闻、体育、生活、娱乐、设计、产品、运营、前端开发、Android 开发等等网址，欢迎前去查看 [为互联网人而设计导航网站](https://site.51git.cn)\n\n## 感谢\n\n**中文：**\n\n* PokemonGo 使用了 [PokeAPI](https://pokeapi.co) \n* 感谢 [Pokedex](https://github.com/skydoves/Pokedex) 、 [Kotlin-Pokedex ](https://github.com/mrcsxsiq/Kotlin-Pokedex) 、 [gradle-versions-plugin](https://github.com/ben-manes/gradle-versions-plugin) 和 Jetpack 等等开源项目\n\n**English：**\n\n* PokemonGo use [PokeAPI](https://pokeapi.co) data\n* Thanks to the [Pokedex](https://github.com/skydoves/Pokedex) 、 [Kotlin-Pokedex ](https://github.com/mrcsxsiq/Kotlin-Pokedex) 、 [gradle-versions-plugin](https://github.com/ben-manes/gradle-versions-plugin) and Jetpack open source project\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhi-dhl%2Fpokemongo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhi-dhl%2Fpokemongo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhi-dhl%2Fpokemongo/lists"}