請注意,這個項目不再維護
具有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上抓住我