このプロジェクトはもう維持されていないことに注意してください
MVPアーキテクチャを備えたAndroidサンプルアプリ
ドリブルAPIからいくつかの画像を表示するサンプルプロジェクト。最近、Androidの最新の図書館とツールでできるクールなことを示しています。
誰かがRedditで言ったように、「それは過剰に設計されていません、それは超高層ビルのない超高層ビルです、ただの基礎:)」

最新の追加:
- Android Gradleプラグインをv3.0.1にアップグレードしました
- スプーンのサポートを追加しました。詳細については、https://github.com/square/spoonを参照してください。また、Gradleプラグインも追加しました。 「Gradlew Spoon」でテストを実行してから、「Build/Spoon」ディレクトリで生成されたレポートを開くことができます。
- Firebaseでエスプレッソテストを実行しながらスクリーンショットをつかむことが追加されました
- TeamCity CIサーバーの単体テストのテストカバレッジを追加しました
- ランタイム許可の例を追加しました。 PermissionsDispatcherライブラリを使用します。 runtimepermissionsivesivityクラスを参照してください。 (https://github.com/permissions-dispatcher/permissionsdispatcher)
- 再構築された依存関係を少し、build.gradleファイルと依存関係を確認します。
- ダガーアンドロイドバインディングのサポートを追加しました(ダガーv2.11)
- オートファクトリーライブラリを自動価値の小さないとこ(https://github.com/google/auto/tree/master/factory)にプロジェクトに追加して、Dagger Assisted Injectionを支援します(この投稿はそれをよく説明します:https://stackoverflow.com/questions/22799407/looking-for-daghe
- サーバーの応答を記録およびリプレイするOkReplay(https://github.com/airbnb/ okreplay)ライブラリを使用したエスプレッソテストを追加しました。詳細については、com.example.features.dashboard.view.mainactivityokreplayespressotestを参照してください。
- TeamCityを介してFirebaseクラウドテスト(firebase.google.com/docs/test-lab/)のサポートを追加しました!これで、すべてのプルリクエスト/ナイトリービルド/リリースビルドがサービスを使用してエスプレッソテストを実行します。詳細については、JustanotherandroidApp_runeSpressotestsinfirebase.xmlを参照してください。
- パラメーター化された単位テストについては、バーストライブラリ(https://github.com/square/burst)のサポートを追加しました(詳細については、com.example.util.stlingutilstestを参照)。
- アプリのショートカットを追加しました! https://github.com/matthiasrobbers/shortbreadライブラリを介して使用される静的、動的、および動的!詳細については、アプリクラス、mainActivity @shortcut宣言、shortcuts.xmlファイルのボトムを確認してください。
- 色の周りにさらに2つのカスタムLINTチェックを追加しました(クラスNonMaterialColorsDetectorとDirectMaterialPaletteColorSageTectorをチェックします)。
- ハードコーディングされた色のカスタムリントチェックを追加しました。 (クラスHardCodedColorsDetectorを確認してください)
- Gradleプラグインは、APKサイズを確認し、APKサイズが特定の値以上の場合にビルドに自動的に失敗します(構成についてはbuild.gradleおよびgradle.propertiesファイルを確認し、https://github.com/vanniktech/gradle-android-apk-size-pluginを実際のグラッドルプラグインにチェックしてください)。
- VCSでコミットされたTeamCity CIスクリプトのサポートを追加しました!それらはkotlin/xmlで書かれています(.teamcityフォルダーをチェックするか、このファイルの下部で詳細を読んでください)
- シャーロックをプロジェクトに追加して、開発者(およびQA)がアプリを介して発生する(および共有)に簡単にアクセスできるようにすることができます(プロジェクトについては、アプリクラスとbuild.gradleファイルとhttps://github.com/ajitsing/sherlockを参照)。
- RXJava 2でより便利なスタックトレースを表示できるプロジェクトにTraceurを追加しました(Traceurtoolクラスおよびその他の関連クラスまたはhttps://github.com/t-spoon/traceurをライブラリにチェックしてください)。
- 電話でネットワーク呼び出しを見るためにチャックライブラリを追加しました。ライブラリについてはhttps://github.com/jgilfelt/chuckを参照し、追加されたインターセプターについてはネットワークモジュールクラスを参照してください。
- エスプレッソがテストする前にアニメーションを無効にし、その後それらを再現します! (grant_animation_permission.gradleおよびespressotesthelperクラスを参照)
- バターナイフアクションを追加しました(ButterKnifeactionsクラスを参照)
- Daggermock Libraryを介してDaggerグラフのモッキングパーツのサポート(MainActivityTestクラスを参照)
- 制約レイアウトを追加しました! (Activity_main.xmlを参照)
- テスト実行を一時停止し、非同期タスクが終了するのを待つ時期をカウントインドルースルースで通知するRXJavaスケジューラを追加しました(com.example.util.rx.rxidlingschedulerを確認)
- 新しいMosby MVP V3を使用するためのアップグレードプロジェクト!!詳細については、https://github.com/sockeqwe/mosbyを確認してください。
- RXJavapluginsクラスのサポートを追加しました。これにより、テストでRXJava 2スケジューラーを簡単にオーバーライドできます。 MainPresentertestクラスのセットアップ方法を参照してください。
- クイック設定タイルのいくつかのバリエーションを追加しました。機能とcom.example.features.features.passivetileserviceonlytoggleクラスについては、https://medium.com/google-developers/quick-settings-e3c22daf93a8を参照してください(さらに、同じパッケージにいくつかのwoodieがあります)
コンテンツ:
図書館:
- rxjava
- ダガー2は、ビルドの種類に応じて、注射補助剤と異なるモジュールの例を備えています。また、Android Dagger V2.11のサポート
- デバッグビルド用のレトロフィット2およびレトロフィットモックモード
- ビューステートサポートを備えたモスビーMVP(V3!)
- 木材
- 自動価値と自動工場
- ラッパーで滑ります
- バターナイフ
- 流fluentアサーションのためのassertj
- ファブリック(crashlytics and Answers)
- Retrolambda
- stetho
- チャック
- ShortBread(https://github.com/matthiasrobbers/shortbread)
- Runtime PermissionsのPermissionsDispatcher(https://github.com/permissions-dispatcher/permissionsdispatcher)
静的分析:
- PMD(https://pmd.github.io/-ファイルstatic_analysis_java.gradleを確認)
- CheckStyle(ファイルstatic_analysis_java.gradleを確認)
- Lint(ファイルlint.gradleをチェック)
- FindBugs(ファイルstatic_analysis_java.gradleを確認)
- ユニットテスト、エスプレッソテスト、または2つの組み合わせのレポートを生成できるJacocoコードカバレッジ
- カスタムIDE検査ルールのセット
- カスタムリントルールとそれらのテストを備えたモジュール
テスト:
- スプーンのサポートを追加しました。詳細については、https://github.com/square/spoonを参照してください。また、スプーン用のGradleプラグインも追加しました。 「Gradlew Spoon」でテストを実行してから、「Build/Spoon」ディレクトリで生成されたレポートを開くことができます。
- TeamCity CIサーバーで実行されているカバレッジをテストします
- 模擬Webサーバーの有無にかかわらず、エスプレッソテスト
- JSONファイルからの応答をロードするMock Webサーバーテスト
- ロボレクトリックテスト
- 通常の単位テスト
- テストでベースURLを変更するためのOK HTTPインターセプター
- アイドリングリソース
- エスプレッソテストの画面のロック解除(クラスcom.example.util.espressotestrunnerを確認してください)
- rxjavapluginsクラスのサポート。これにより、テストでRXJava 2スケジューラーを簡単にオーバーライドできます(MainPresentertestクラスを確認してください)
- エスプレッソテストと非同期コードの実行に役立つRXJavaスケジューラのサポート。 (com.example.util.rx.rxidlingschedulerを確認してください)
- Daggermock Libraryを介してDaggerグラフのモッキングパーツのサポート(MainActivityTestクラスを参照)
- エスプレッソがテストする前にアニメーションを無効にし、その後それらを再現します! (grant_animation_permission.gradleおよびespressotesthelperクラスを参照)
- シャーロックをプロジェクトに追加して、開発者(およびQA)がアプリを介して発生する(および共有)に簡単にアクセスできるようにすることができます(プロジェクトについては、アプリクラスとbuild.gradleファイルとhttps://github.com/ajitsing/sherlockを参照)。
- パラメータ化された単位テストについては、バーストライブラリ(https://github.com/square/burst)(詳細についてはcom.example.util.stringutilstestを参照)。
- TeamCityを介してFirebaseクラウドテスト(firebase.google.com/docs/test-lab/)のサポートを追加しました!これで、すべてのプルリクエスト/ナイトリービルド/リリースビルドがサービスを使用してエスプレッソテストを実行します。詳細については、JustanotherandroidApp_runeSpressotestsinfirebase.xmlを参照してください。
- サーバーの応答を記録およびリプレイするOkReplay(https://github.com/airbnb/ okreplay)ライブラリを使用したエスプレッソテストを追加しました。詳細については、com.example.features.dashboard.view.mainactivityokreplayespressotestを参照してください。
関連する表示:
- 制約レイアウトを追加しました! (Activity_main.xmlを参照)
- バターナイフアクションを追加しました(ButterKnifeactionsクラスを参照)
他の:
- Gradleプラグインは、APKサイズを確認し、APKサイズが特定の値以上の場合にビルドに自動的に失敗します(構成についてはbuild.gradleおよびgradle.propertiesファイルを確認し、https://github.com/vanniktech/gradle-android-apk-size-pluginを実際のグラッドルプラグインにチェックしてください)。
- ビルドタイプに応じて別々のアプリアイコン
- 一部の高度なソースは、テストを分割するための構成を設定します
- Androidマニフェストとbuild.gradleのプロパティファイルからプロジェクト構成をロードする
- 一部のビルドタイプまたはテスト用の共有フォルダー
- 動作Proguard Config
- Android Studio外部アノテーション(https://www.jetbrains.com/help/idea/2016.3/external-annotations.html)
- @nullableおよび@nonnullのパッケージレベルの注釈
- Authトークンをヘッダーに簡単に追加するためのOKHTTPインターセプター
- 厳密なモード
- Playstoreでアプリを公開するプラグイン
- APKのメソッド数を数えるためのDexカウントプラグイン
- crashlyticsのための個別の木材伐採ツリー。 com.example.tools.timber.crashlyticstreeを参照してください
- クイック設定タイル(com.example.features.tiles.passivetileserviceonlytoggleを参照)
- RXJava 2でより便利なスタックトレースを表示できるプロジェクトにTraceurを追加しました(Traceurtoolクラスおよびその他の関連クラスまたはhttps://github.com/t-spoon/traceurをライブラリにチェックしてください)。
- アプリショートカット! https://github.com/matthiasrobbers/shortbreadライブラリを介して使用される静的、動的、および動的!詳細については、アプリクラス、mainActivity @shortcut宣言、shortcuts.xmlファイルのボトムを確認してください。
..そして、他のあらゆる種類のグッズ!
TeamCity-継続的な統合
このプロジェクトは、バージョン制御システムにKotlinにCIサーバー構成を保存するというTeamCityの機能の恩恵を受けます。詳細については、https://confluence.jetbrains.com/display/tcd10/kotlin+dslを参照してください。設定は、プロジェクトの.teamcityフォルダーの下にあります。
構成をビルド:
3つのビルド構成があります:
- 「プルリクエスト」は、すべてのプルリクエストでトリガーされた構成をビルドします。プル要求の正しさを確認します(通常は「開発」ブランチの場合)。 QAは、このビルド構成によって作成されたHockeyAppから関連するAPKを取得し、プル要求が導入する機能/修正を手動でテストします。このビルド:
- すべての静的分析ツールを実行します。
- すべてのビルドタイプのすべてのユニットテストを実行します。
- すべてのビルドタイプのメソッドカウントを実行します。
- 複製のチェック。
- APKを構築します。
- Firebaseテストクラウドですべてのエスプレッソテストを実行します。
- HockeyAppにAPKをアップロードします。
- githubをジョブのステータス(成功/失敗)で更新します。
- 「Develop」ブランチの真夜中に毎晩トリガーされた「Nightly Builds 」ビルド構成。 QAは、アプリの機能の統合をテストするために、このビルド構成によって作成されたHockeyAppから関連するAPKを取得します。このビルドは、人々がテストできるように、閉じたアルファプレイストアグループに展開されます。このビルド:
- すべてのビルドタイプのすべてのユニットテストを実行します。
- すべてのビルドタイプのメソッドカウントを実行します。
- 複製のチェック。
- APKを構築します。
- Firebaseテストクラウドですべてのエスプレッソテストを実行します。
- HockeyAppにAPKをアップロードします。
- アップロードは、PlaystoreのAPKをプライベートアルファチャンネルにリリースします。
- 「リリース/*」論理ブランチ名と一致するすべてのブランチでトリガーされた「リリース」ビルド構成。 QAは、リリース前に最終テストを実行するために、HockeyAppから関連するAPKを取得します。このビルドは、人々がテストできるようにオープンベータプレイストアグループに展開されます。このビルド:
- すべての静的分析ツールを実行します。
- すべてのビルドタイプのすべてのユニットテストを実行します。
- すべてのビルドタイプのメソッドカウントを実行します。
- 複製のチェック。
- APKを構築します。
- Firebaseテストクラウドですべてのエスプレッソテストを実行します。
- HockeyAppにAPKをアップロードします。
- APKをPlaystoreのパブリックベータチャンネルにアップロードします。
レポート:
利用可能なあらゆる種類のレポートもあります。
- CheckStyle Static Analysisレポートは、プロジェクト内のすべてのチェックスタイルの警告を示しています。プロジェクトにはゼロトレランスポリシーがあるため、通常は空に報告されます。故障したビルドでは、修正する必要がある問題を特定します。

- すべてのビルドタイプのユニットテストレポートは、エラーが発生した場合に追加の詳細とスタックトレースとともに実行されたすべてのテストを示しています。 2つのダッシュボード、1つはTeamCity生成テストレポート、もう1つは元のJunit4 HTMLレポートです。


- すべてのビルドタイプのDEXメソッドカウンターレポートは、すべてのAPKのメソッドカウントを示しており、視覚化が非常に多く、メソッドが多すぎるライブラリを簡単に見つけることができます。メモとして、通常、リリースおよびQA APKは、これらのビルドタイプでProGuardが実行されており、未使用の方法を剥がしているため、これらのレポートではより小さなメソッドカウントがあります。

- FindBugs静的分析レポートには、プロジェクト内のすべてのFindBugs警告が表示されます。プロジェクトにはゼロトレランスポリシーがあるため、通常は空に報告されます。故障したビルドでは、修正する必要がある問題を特定します。

- Lint Static Analysisレポートは、プロジェクト内のすべての糸くず警告を示しています。プロジェクトにはゼロトレランスポリシーがあるため、通常は空に報告されます。故障したビルドでは、修正する必要がある問題を特定します。

- PMD静的分析レポートは、プロジェクト内のすべてのPMD警告を示しています。プロジェクトにはゼロトレランスポリシーがあるため、通常は空に報告されます。故障したビルドでは、修正する必要がある問題を特定します。

- 現在、Firebaseクラウドテストに関するレポートはありません。ビルドログに移動し、結果が保存されているGoogleクラウドストレージバケットを指すURLを見つける必要があります。いくつかの変更を使用すると、個人(有料)ストレージバケットを使用して、テスト結果をTeamCityに戻すことができます。この記事では、このトピックについて簡単に説明します:http://building.usebutton.com/testing/cloud/android/ci/2016/04/20/teamcity-google-device-cloud/

TeamCityプラグイン:
私の生活を楽にするために、いくつかのTeamCityプラグインが使用されました:
- 「高度な共有ビルド番号」:https://java.nicholaswilliams.net/teamcityplugins/downloadを参照してください。そのカウンターはAPKのバージョンコードの一部であるため、それらを同期させるのは良いことです。
- 「Slack通知プラグイン」:https://github.com/petegoo/tcslackbuildnotifierを参照してください。
- 'Chuck Norris TeamCityプラグイン':https://github.com/dbf256/teamcity-chuck-pluginを参照してください。
注:
- パブリックベータチャンネル(https://play.google.com/apps/testing/com.justanotherandroidapp)は(理論的に)会社全体に分配できます。私が試したことの1つは、NFCタグにリンクを追加して壁にぶら下がっていることです。
HockeyApp
私はHockeyAppを使用して、APKをQAまたは利害関係者に保存し(理論的に)配布しています。製品の詳細については、https://hockeyapp.netを参照してください。これは、HockeyAppダッシュボードの様子です。

ご覧のとおり、さまざまなCIビルド構成とすべてのビルドタイプにさまざまなビルドがあります。 HockeyAppの男たちは、ツールの使用を実証するための無料アカウントを提供するのに十分親切でした。
Slackでのプレイストアのレビュー
このためにレビューボットを使用しています(https://reviewbot.io/?utm_source=github&utm_medium= athkalia-just-another-android-app)、ジョブを完了する非常にシンプルなツールだけです。レビューが来ると、次のようになります。

ロードマップ
- Gradleの最新バージョンにアップグレードします
- 指紋認証
- 導体図書館
PRを提出します
PRを作成する前に、コマンドgradlew check正常に完了していることを確認してください。このコマンドは、すべてのバリエーションのすべてのテストに加えて、Lint、Checktyle、PMD、FindBugsの4つの静的分析ツールを実行します。
私が追加しないもののリスト、これらのいずれかが気に入ったら、お気軽に貢献してください!
- Firebaseクラウドテストでテストカバレッジを実行し、レポートを取得し(単位テストのカバレッジレポートとマージする可能性があります)、CIサーバーにレポートを提供します。これにはS3バケットの支払いが必要であり、これを追跡することの有用性について正直に言うと不確かです。
- リリースのタグ、マージして開発などのリリースを自動化します。これの要件は非常にプロジェクト固有であり、競合などがある可能性があり、今のところ自動化する価値がないことを考えると。
- 「FastLane -ScreenGrab」ツール(https://github.com/fastlane/fastlane/tree/master/screengrab)を介した自動スクリーンショットは、Windowsをサポートせず、Macを持っていません:(
フィードバック/プルリクエストは大歓迎です!
www.sakiskaliakoudas.comで私を捕まえることができます