请注意,这个项目不再维护
具有MVP体系结构的Android示例应用
示例项目显示来自运球API的一些图像。如今,您可以使用现代图书馆和工具来演示一些很酷的事情。
正如某人在Reddit上所说的:“它不是过分设计的,它只是没有摩天大楼部分的摩天大楼,只是基础:)”

最新的补充:
- 升级的Android gradle插件到v3.0.1
- 增加了对勺子的支持。有关更多详细信息,请参见https://github.com/square/spoon。还为其添加了Gradle插件。可以使用“ gradlew spoon”进行测试,然后在“ build/spoon”目录中打开生成的报告。
- 在Firebase运行浓缩咖啡测试时添加了屏幕快照
- 在Teamcity CI服务器中添加了单位测试的测试覆盖范围
- 添加了一个运行时许可示例。使用PermissionsDisPatcher库。请参阅RuntimePermissionsActivity类。 (https://github.com/permissions-dispatcher/permissionsdispatcher)
- 重组的依赖项,检查build.gradle文件和依赖项.gradle文件
- 增加了对匕首Android绑定的支持(匕首v2.11)
- 在项目中添加了自动库库(https://github.com/google/auto/auto/tree/master/factory),以帮助进行Dagger Assisted注入(本文很好地解释了这一点:
- 使用okreplay(https://github.com/airbnb/okreplay)库添加了浓缩咖啡测试,该库记录并重播服务器响应。有关更多详细信息,请参见com.example.features.dashboard.view.mainactivityokreplaySpressotest。
- 通过TeamCity增加了对Firebase Cloud Testing(Firebase.google.com/docs/test-lab/)的支持!现在,每个拉的请求/夜间构建/发布构建都使用该服务来运行浓缩咖啡测试。有关更多详细信息,请参见Justanotherandroidapp_runespressestestesinfirebase.xml。
- 添加了对爆发库(https://github.com/square/burst)的支持(有关更多详细信息)。
- 添加了应用程序快捷方式!通过https://github.com/matthiasrobbers/shortbread库使用的静态,动态和动态!有关详细信息,请选中应用程序类的底部,MainActivity @shortcut声明和快捷方式。
- 添加了2个围绕颜色的自定义棉绒检查(检查类NonmaterialColorsDetector和DirectMaterialPaletteColoruSagedetector)。
- 为硬编码颜色添加了自定义的皮棉检查。 (检查类HardCodedColorsDetector)
- 如果APK大小超过特定值,则可以检查APK尺寸并自动使构建失败(检查配置的构建。
- 对VCS中创作的TeamCity CI脚本的支持!它们是用Kotlin/XML编写的(Check .TeamCity文件夹或在此文件的底部阅读更多)
- 将Sherlock添加到项目中,以便开发人员(和QA)可以轻松地访问通过应用程序(请参阅App class and build.gradle File和https://github.com/ajits.com/ajitsing/sherlock for for Project)。
- 在项目中添加了Traceur,该项目允许使用RXJAVA 2显示更有用的stackTraces(检查TraceUrtool类和其他相关类或https://github.com/t-spoon/traceur for Library)。
- 添加了Chuck库,以便在电话上查看网络呼叫。请参阅https://github.com/jgilfelt/Chuck,以获取库中的库和NetworkModule类,以添加拦截器。
- 在浓缩咖啡测试之前禁用动画,然后重新启动它们! (请参阅Grant_animation_permission.gradle和Espressotesthelper类)
- 添加了黄油刀动作(请参阅Butterknifeepions类)
- 支持通过daggermock库嘲笑匕首图的部分(请参阅MainAttivityTest类)
- 添加了约束布局! (请参阅Activity_main.xml)
- 添加了一个RXJAVA调度程序,该调度程序通过CountingIdlingResource何时暂停测试执行并等待异步任务完成(请检查com.example.util.rx.rxidlingscheduler)
- 升级的项目使用新的Mosby MVP V3!检查https://github.com/sockeqwe/mosby,以获取更多详细信息。
- 添加了对RXJAVAPLUGINS类的支持,可以轻松地在测试中对RXJAVA 2调度程序进行重叠。请参阅MainPresentertest类的设置方法。
- 添加了快速设置瓷砖的一些变体。有关该功能的信息和com.example.features.tiles.passiveetileserviceonlytoggle类
内容:
图书馆:
- rxjava
- 匕首2带有辅助注入和不同模块的示例,具体取决于构建类型。还支持Android Dagger v2.11
- 改造2和用于调试构建的改造模型模式
- MOSBY MVP具有视图状态支持(v3!)
- 木材
- 自动价值和汽车工厂
- 用包装纸滑行
- 黄油小刀
- 说明流利的断言
- 面料(崩溃和答案)
- retrolambda
- 斯托特
- 查克
- 脆饼(https://github.com/matthiasrobbers/shortbread)
- 用于运行时权限的PermissionsDisPatcher(https://github.com/permissions-dispatcher/permissionsdispatcher)
静态分析:
- PMD(https://pmd.github.io/-检查文件static_analsisy_java.gradle)
- checkstyle(检查文件static_analsisy_java.gradle)
- 棉绒(检查文件lint.gradle)
- findbugs(检查文件static_analysis_java.gradle)
- Jacoco代码覆盖范围可以生成用于单位测试,浓缩咖啡测试或两者组合的报告
- 一组自定义IDE检查规则
- 具有自定义棉绒规则和测试的模块
测试:
- 增加了对勺子的支持。有关更多详细信息,请参见https://github.com/square/spoon。还为勺子添加了Gradle插件。可以使用“ gradlew spoon”进行测试,然后在“ build/spoon”目录中打开生成的报告。
- 在Teamcity CI服务器中运行的测试覆盖范围
- 带有模拟Web服务器的浓缩咖啡测试
- 模拟Web服务器测试,从JSON文件加载响应
- robolectric测试
- 正常单位测试
- OK HTTP拦截器用于更改测试中的基本URL
- 空闲资源
- 浓缩咖啡测试的解锁屏幕(检查类com.example.util.util.spressotestrunner)
- 支持RXJAVAPLUGINS类,可以轻松地在测试中对RXJAVA 2调度程序进行重叠(检查MainPresEntertest类)
- 支持RXJAVA调度程序,该调度程序有助于浓缩咖啡测试和异步代码执行。 (检查com.example.util.rx.rxidlingscheduler)
- 支持通过daggermock库嘲笑匕首图的部分(请参阅MainAttivityTest类)
- 在浓缩咖啡测试之前禁用动画,然后重新启动它们! (请参阅Grant_animation_permission.gradle和Espressotesthelper类)
- 将Sherlock添加到项目中,以便开发人员(和QA)可以轻松地访问通过应用程序(请参阅App class and build.gradle File和https://github.com/ajits.com/ajitsing/sherlock for for Project)。
- 爆发库(https://github.com/square/burst)用于参数化的单元测试(有关更多详细信息,请参见com.example.util.stringutilstest)。
- 通过TeamCity增加了对Firebase Cloud Testing(Firebase.google.com/docs/test-lab/)的支持!现在,每个拉的请求/夜间构建/发布构建都使用该服务来运行浓缩咖啡测试。有关更多详细信息,请参见Justanotherandroidapp_runespressestestesinfirebase.xml。
- 使用okreplay(https://github.com/airbnb/okreplay)库添加了浓缩咖啡测试,该库记录并重播服务器响应。有关更多详细信息,请参见com.example.features.dashboard.view.mainactivityokreplaySpressotest。
查看相关:
- 添加了约束布局! (请参阅Activity_main.xml)
- 添加了黄油刀动作(请参阅Butterknifeepions类)
其他:
- 如果APK大小超过特定值,则可以检查APK尺寸并自动使构建失败(检查配置的构建。
- 根据构建类型单独的应用图标
- 一些高级源集配置用于分类测试
- 从Android清单和build.gradle中加载一些项目配置
- 共享某些构建类型或测试的文件夹
- 工作进程配置
- Android Studio外部注释(https://www.jetbrains.com/help/idea/2016.3/external-annotations.html)
- @nullable和@nonnull的软件包级别注释
- okhttp拦截器可轻松添加auth令牌
- 严格模式
- 插件要在PlayStore上发布应用
- DEX计数插件用于计算APK中方法数量
- 单独的木材伐木树用于崩溃的图。请参阅com.example.tools.timber.crashlyticstree
- 快速设置瓷砖(请参阅com.example.features.tiles.passiveetileserviceonlytoggle)
- 在项目中添加了Traceur,该项目允许使用RXJAVA 2显示更有用的stackTraces(检查TraceUrtool类和其他相关类或https://github.com/t-spoon/traceur for Library)。
- 应用快捷方式!通过https://github.com/matthiasrobbers/shortbread库使用的静态,动态和动态!有关详细信息,请选中应用程序类的底部,MainActivity @shortcut声明和快捷方式。
..以及其他各种好东西!
团队 - 连续集成
该项目受益于TeamCity在版本控制系统中存储CI服务器配置的功能。有关更多详细信息,请参见https://confluence.jetbrains.com/display/tcd10/kotlin+dssl。可以在项目中的.teamCity文件夹下找到设置。
构建配置:
有3种构建配置:
- “拉请求”构建配置,在每个拉的请求上触发。验证拉动请求的正确性(通常适用于“开发”分支)。 QA将从此构建配置创建的HockeyApp中获取相关的APK,以便手动测试拉请求引入的功能/修复。这个构建:
- 运行所有静态分析工具。
- 运行所有构建类型的所有单元测试。
- 执行所有构建类型的方法计数。
- 检查重复项。
- 构建APK。
- 在Firebase测试云上运行所有浓缩咖啡测试。
- 将APK上传到HockeyApp。
- 更新github,具有作业状态(成功/失败)。
- “夜间构建”构建配置,每晚在午夜的“开发”分支上触发。 QA将从此构建配置创建的HockeyApp中获取相关的APK,以测试应用程序功能的集成。该构建也已部署到一个封闭的Alpha Playstore组供人们测试。这个构建:
- 运行所有构建类型的所有单元测试。
- 执行所有构建类型的方法计数。
- 检查重复项。
- 构建APK。
- 在Firebase测试云上运行所有浓缩咖啡测试。
- 将APK上传到HockeyApp。
- 将APK发布到Playstore的私人Alpha频道。
- “释放”构建配置,在每个分支上触发,匹配'Release/*'逻辑分支名称。质量保证将从HockeyApp获取相关的APK,以在发布前执行最终测试。该构建也被部署到一个开放的Beta PlayStore组供人们测试。这个构建:
- 运行所有静态分析工具。
- 运行所有构建类型的所有单元测试。
- 执行所有构建类型的方法计数。
- 检查重复项。
- 构建APK。
- 在Firebase测试云上运行所有浓缩咖啡测试。
- 将APK上传到HockeyApp。
- 将APK发布到Playstore中的公共Beta频道。
报告:
也有各种各样的报告:
- CheckStyle静态分析报告显示了该项目中的所有检查风格警告。由于项目中有零容忍政策,因此通常会将其报告为空。在失败的构建中,它指出了需要解决的问题。

- 所有构建类型的单元测试报告显示出发生错误的所有测试以及其他详细信息和stacktraces。 2个仪表板,一个是团队生成的测试报告,另一个是原始的Junit4 HTML报告。


- 所有构建类型的DEX方法计数器报告显示了每个APK的方法计数,以及一个有趣的钻探可视化,使发现包含太多方法的库变得非常容易。请注意,由于Proguard在这些构建类型中运行,剥离未使用的方法,因此通常会发布和QA APK在这些报告中具有较小的方法计数。

- Findbugs静态分析报告显示了该项目中的所有Findbugs警告。由于项目中有零容忍政策,因此通常会将其报告为空。在失败的构建中,它指出了需要解决的问题。

- 皮棉静态分析报告显示了该项目中的所有棉绒警告。由于项目中有零容忍政策,因此通常会将其报告为空。在失败的构建中,它指出了需要解决的问题。

- PMD静态分析报告显示了该项目中的所有PMD警告。由于项目中有零容忍政策,因此通常会将其报告为空。在失败的构建中,它指出了需要解决的问题。

- 目前尚无报告燃烧云测试。您需要进入构建日志并找到指向结果保存的Google云存储桶的URL。通过一些更改,人们可以使用个人(付费)存储桶,然后将测试结果恢复到TeamCity中。本文简要介绍了该主题:http://building.usebutton.com/testing/cloud/android/ci/ci/2016/04/20/teamcity-google-google-device-cloud/

TeamCity插件:
使用了几个Teamcity插件来使我的生活更轻松:
- “高级共享构建号码”:请参阅https://java.nicholaswilliams.net/teamcityplugins/download负载一个插件,该插件允许您在构建中共享构建计数器。由于该计数器是APK版本代码的一部分,因此最好保持它们同步。
- “ Slack Notifications插件”:请参阅https://github.com/petegoo/tcslackbuildnotifier a插件,允许您将构建状态发布到Slack。
- “ Chuck Norris Teamcity插件”:请参阅https://github.com/dbf256/teamcity-chuck-plugin对此没有什么可说的;--)
笔记:
- 然后,可以(理论上)在公司中分发公共Beta频道(https://play.google.com/apps/testing/com.justanotherandroidapp)。我尝试使用的一件事是将链接添加到NFC标签并将其挂在墙上,以便每个人都可以快速获取Beta应用程序!
曲棍球
我正在使用HockeyApp来保存和(从理论上)将APK分发给质量质量检查或利益相关者。有关产品的更多详细信息,请参见https://hockeyapp.net。这就是曲棍球仪表板中的样子:

如您所见,不同的CI构建配置和所有构建类型都有不同的构建。 Hockeyapp的家伙很友善,可以为我提供一个免费帐户,以展示其工具的用法。
Slack的Playstore评论
使用评论机器人(https://reviewbot.io/?utm_source=github&utm_medium = athkalia-just-just-anthroid-app)无话可说,只是一个完成工作的超级简单工具。当评论出现时,看起来像这样:

路线图
提交PR
在创建PR之前,请确保命令gradlew check成功完成。此命令运行所有变体的所有测试,以及4个静态分析工具:棉布,Checsktyle,PMD,Findbugs。
我不会添加的内容列表,如果您喜欢这些内容,请随时做出贡献!
- 在Firebase Cloud测试中运行测试覆盖范围,获取报告(可能将它们与单位测试覆盖范围报告合并),并将报告回到CI服务器中。这需要支付S3存储桶的费用,我不确定跟踪这一点的用途。
- 自动释放更大,例如标记版本,合并以开发等等等。围绕该版本的要求非常具体,并且鉴于可能存在冲突等,目前不值得自动化。
- 通过“ FastLane -ScreenGrab”工具(https://github.com/fastlane/fastlane/fastlane/tree/master/screengrab)自动屏幕截图不支持Windows,我没有Mac :(
欢迎任何反馈/拉请求!
您可以在www.sakiskaliakoudas.com上抓住我