文章目录Marvel一个 MVP 范例级别的 Android 漫威客户端1、 这个仓库里有什么2、 项目结构为什么值得看3、 技术栈长什么样4、 测试怎么处理5、 适合谁翻一翻Marvel一个 MVP 范例级别的 Android 漫威客户端mohsenoid/marvel 在 GitHub 上拿到了 229 Star。这是一个 Android 客户端对接 Marvel.com 的角色数据接口。作者 Mohsen Mirhoseini 当年为了 smava GmbH 的技术评估写的后来当成 MVP 教学样本配合 Medium 上的五篇连载文章一起发布。1、 这个仓库里有什么一个能跑的 Marvel 角色搜索 App版本号 1.0.1最后一次更新停在 2018 年 6 月 27 日。主界面进来就是两个 Fragment搜索页和缓存页。前者负责按名字找角色后者列出最近查过的角色。点开角色进到 Character Activity 看详情。网络异常时不会让界面卡死弹个 Snackbar 提示用户重连或重试。生命周期和网络行为都按 Android 规矩处理过不同屏幕尺寸适配也做了。2、 项目结构为什么值得看整块代码拆成两个模块Core-Lib 和 App。Core-Lib 是纯 Java 写的业务逻辑跟 Android 完全解耦。App 模块只放 Android UI 相关的东西负责把 Core-Lib 接到操作系统上。理论上 Core-Lib 可以换个界面层直接跑成命令行或者 Web 应用。分层走的是 MVP。Antonio Leiva 那套 Android MVP 实践是参考来源。View 层是 MainActivity 和它内部的两个 Fragment。Fragment 只干一件事用户操作触发时调一下 presenter 的方法不写业务逻辑。Presenter 层是 Search 和 Cache 的两个 Presenter。从后端或数据库取数据格式化好交给 View并决定用户交互时该做什么。Model 层是 Search Interactor专门负责对接网络服务的数据网关。3、 技术栈长什么样2018 年的项目工具链是 Android Studio 3.1.3、gradle-plugin 4.4、Build Tools 27.1.1、Compile SDK 27、MinSdk 14。依赖列表里能看到的都是当年 Android 圈的主流选择网络层Retrofit 2.1.0 配 OkHttp 3.4.1Square 出品Debug 模式下日志挺友好数据库OrmLite 5.0一个轻量 ORM。作者注释里提到也能换成 realm 或 DBFlow响应式RxJava2 2.1.13、RxAndroid 2.0.2、RxBinding 2.1.1串联各层通信依赖注入Dagger 2.8Square 原做、Google 现维护视图绑定ButterKnife 8.8.1加上 Google 新出的 DataBinding 库做 Adapter图片加载Picasso 2.5.2配合 Palette 支持库从图片里取主色当背景日志Timber 4.7.0Jake Wharton 的库Release 版本里自动不输出 log其他Firebase 16.0.1 做分析和崩溃上报作者自己的 AndroidUtils 1.0.11 处理些通用功能依赖版本统一放在 libraries.gradle 里避免多模块间的版本冲突。4、 测试怎么处理UI 功能和核心类都写了 Test Case覆盖工具是 jUnit 4.12、Mockito 1.10.19、Robolectric 3.8、Espresso 2.2.2。Dagger 的 mocking 也纳入了测试范围。持续集成绑了 CircleCI 和 Travis CI 两套跟 GitHub 仓库联动。5、 适合谁翻一翻想看一个完整 MVP 落地项目的 Android 开发者研究 Dagger Retrofit RxJava 经典组合如何协作的人需要参照成熟项目结构来组织自己代码的工程师作者在 Medium 上写了五篇连载从项目结构讲到 Dagger、Retrofit、RxJava最后落到用 Dagger 配 Espresso 写测试。链接在仓库 README 末尾。想看代码对应那一系列文章的状态可以切到Yet-another-MVP-article这个 tag。ADME 末尾。想看代码对应那一系列文章的状态可以切到Yet-another-MVP-article这个 tag。