Обратите внимание, что этот проект больше не поддерживается
Приложение Android -образец с архитектурой MVP
Пример проекта, который отображает некоторые изображения из API Dribble. В наши дни демонстрируют некоторые классные вещи, которые вы можете сделать с современными библиотеками и инструментами в Android.
Как кто-то сказал на Reddit: «Это не чрезмерно инженерно, это просто небоскреб без части небоскреба, просто основы :)»

Новейшие дополнения:
- Модернизированный плагин Android Gradle до v3.0.1
- Добавлена поддержка Spoon. Смотрите https://github.com/square/spoon для получения более подробной информации. Также добавил плагин Gradle для него. Можно запустить тесты с помощью «Gradlew Spoon», а затем открыть сгенерированные отчеты в каталоге «Build/Spoon».
- Добавленные снимки экрана во время проведения тестов на эспрессо в Firebase
- Добавлены тестовые покрытия для модульных тестов на сервере CI TeamCity CI
- Добавлен пример разрешения времени выполнения. Использует библиотеку PermissionsDispatcher. Смотрите класс RuntimePermissionsactivity. (https://github.com/permissions-dispatcher/permissiondispatcher)
- Реструктурированные зависимости немного, проверьте файл build.gradle. Файл.
- Добавлена поддержка привязки Dagger Android (Dagger v2.11)
- Added auto-factory library the little cousin of auto-value (https://github.com/google/auto/tree/master/factory) into the project to help with dagger assisted injection (this post explains it quite well: https://stackoverflow.com/questions/22799407/looking-for-an-example-for-dagger-assisted-injection)
- Добавлен тест Espresso с использованием библиотеки Okreplay (https://github.com/airbnb/okreplay), которая записывает и повторяет ответы сервера. См. Com.example.features.dashboard.view.mainactivityOkRePlayesPressOtest для получения более подробной информации.
- Добавлена поддержка облачного тестирования Firebase (firebase.google.com/docs/test-lab/) через команду! Теперь каждая обработка запроса/ ночная сборка/ выпуск использует сервис для запуска тестов эспрессо. См. JustanotherAndroidApp_runespressotestSinfireBase.xml для получения более подробной информации.
- Добавлена поддержка библиотеки Burst (https://github.com/square/burst) для параметризованных модульных тестов (см. Com.example.util.stringutilstest для получения более подробной информации).
- Добавлены ярлыки приложения! Статический, динамичный и динамический, используемый через https://github.com/matthiasrobbers/shortbread! Для получения подробной информации, пожалуйста, проверьте нижнюю часть класса приложений, MainActivity @shortcut Declaration и Files.xml.
- Добавлено еще 2 индивидуальных проверок ворса вокруг цветов (проверяйте класс, немачериальнократный и DirectMaterialPaletteColorusagedetector).
- Добавлена пользовательская проверка ворса для жестких цветов. (Проверьте класс HardCodeDcolorsDetector)
- Плагин Gradle для проверки размера APK и автоматически сбой в сборке, если размер APK больше, чем определенное значение (проверьте файл build.gradle и gradle.properties для конфигурации и https://github.com/vanniktech/gradle-ald-apk-size-plugin для фактического плагина Gradle).
- Добавлена поддержка сценариев CI TeamCity CI, совершенные в VCS! Они записаны в Kotlin/XML (проверьте папку.
- Добавлены в проект, чтобы разработчики (и QA) могут иметь легкий доступ к исключениям (и поделиться ими) через приложение (см. Класс приложения и файл Build.Gradle и https://github.com/ajitsing/sherlock для проекта).
- Добавлены Traceur в проект, который позволяет отображать более полезные StackTraces с Rxjava 2 (Check Traceurtool Class и другие связанные классы или https://github.com/tspoon/traceur для библиотеки).
- Добавлена библиотека Чака для просмотра сетевых звонков прямо на телефоне. См. Https://github.com/jgilfelt/chuck для библиотеки и класса Networkmodule для добавленного перехвата.
- Отключение анимации перед тестированием эспрессо и повторно их впоследствии! (См. Grant_animation_permission.gradle и Espressotesthelper Class)
- Добавлены действия с ножом (см. Класс Butternifeactions)
- Поддержка насмешливых частей вашего графика кинжала через библиотеку DiggerMock (см. ManeActivityTest Class)
- Добавлен макет ограничений! (См. Activity_main.xml)
- Добавлено планировщик Rxjava, который информирует Espresso через счетчики, когда вы можете приостановить выполнение теста и дождаться завершения асинхронных задач (проверьте com.example.util.rx.rxidlingscheduler)
- Обновление проекта по использованию нового Mosby MVP V3 !! Проверьте https://github.com/sockeqwe/mosby для получения более подробной информации.
- Добавлена поддержка класса rxjavaplugins, что позволяет легко переоценить планировщики Rxjava 2 в тестах. См. Метод настройки класса MainpresenterTest.
- Добавлены некоторые варианты плиток быстрых настроек. См. Https://medium.com/google-developers/quick-settings-tiles-e3c22daf93a8 для получения информации об этой функции и com.example.features.tiles.passiveTileserServiceOnlytoggle для реализации (плюс в одном и том же пакете есть еще какие-то добродетели).
Содержание:
Библиотеки:
- Rxjava
- Кинжал 2 с примерами вспомогательной инъекции и различных модулей в зависимости от типа сборки. Также поддержка Android Dagger v2.11
- Модернизация 2 и режим модернизации макета для сборки отладки
- Mosby MVP с поддержкой состояния View (v3!)
- Древесина
- Автоза фабрика
- Скользить с оберткой
- Нож
- Утвердить для беглых утверждений
- Ткань (Crashlytics и ответы)
- Ретроламбда
- Стето
- Патрон
- Shortbread (https://github.com/matthiasrobbers/shortbread)
- 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)
- Покрытие кода Jacoco, которое может генерировать отчеты для модульных тестов, тестов эспрессо или комбинации двух
- Набор пользовательских правил проверки IDE
- Модуль с пользовательскими правилами и тестами для них
Тестирование:
- Добавлена поддержка Spoon. Смотрите https://github.com/square/spoon для получения более подробной информации. Также добавил плагин Gradle для Spoon. Можно запустить тесты с помощью «Gradlew Spoon», а затем открыть сгенерированные отчеты в каталоге «Build/Spoon».
- Тестовое покрытие, работающее на сервере CI TeamCity CI
- Эспрессо тестирует с и без макетного веб -сервера
- Их макет тесты веб -сервера, которые загружают ответы из файлов JSON
- РОБОЛЕКТРИЧЕСКИЕ ТЕСТЫ
- Нормальные модульные тесты
- OK HTTP Interceptor для изменения базового URL в тестах
- На холостом ходу
- Экран разблокировки для тестов эспрессо (проверьте класс com.example.util.espressotestrunner)
- Поддержка класса Rxjavaplugins, который позволяет легко переоценить планировщики Rxjava 2 в тестах (проверьте класс MainPresentErtestest)
- Поддержка планировщика Rxjava, который помогает с эспрессо -тестами и асинхронным выполнением кода. (Проверьте com.example.util.rx.rxidlingscheduler)
- Поддержка насмешливых частей вашего графика кинжала через библиотеку DiggerMock (см. ManeActivityTest Class)
- Отключение анимации перед тестированием эспрессо и повторно их впоследствии! (См. Grant_animation_permission.gradle и Espressotesthelper Class)
- Добавлены в проект, чтобы разработчики (и QA) могут иметь легкий доступ к исключениям (и поделиться ими) через приложение (см. Класс приложения и файл Build.Gradle и https://github.com/ajitsing/sherlock для проекта).
- Библиотека Burst (https://github.com/square/burst) для параметризованных модульных тестов (см. Com.example.util.stringutilstest для получения более подробной информации).
- Добавлена поддержка облачного тестирования Firebase (firebase.google.com/docs/test-lab/) через команду! Теперь каждая обработка запроса/ ночная сборка/ выпуск использует сервис для запуска тестов эспрессо. См. JustanotherAndroidApp_runespressotestSinfireBase.xml для получения более подробной информации.
- Добавлен тест Espresso с использованием библиотеки Okreplay (https://github.com/airbnb/okreplay), которая записывает и повторяет ответы сервера. См. Com.example.features.dashboard.view.mainactivityOkRePlayesPressOtest для получения более подробной информации.
Посмотреть связанного:
- Добавлен макет ограничений! (См. Activity_main.xml)
- Добавлены действия с ножом (см. Класс Butternifeactions)
Другой:
- Плагин Gradle для проверки размера APK и автоматически сбой в сборке, если размер APK больше, чем определенное значение (проверьте файл build.gradle и gradle.properties для конфигурации и https://github.com/vanniktech/gradle-ald-apk-size-plugin для фактического плагина Gradle).
- Отдельные значки приложения в соответствии с типом сборки
- Некоторые расширенные исходные наборы конфигурации для разделения тестов
- Загрузка конфигурации проекта из файлов свойств в Android Manifest и Build.Gradle
- Общие папки для некоторых типов сборки или тестов
- Рабочая конфигурация прогноза
- Внешние аннотации Android Studio (https://www.jetbrains.com/help/idea/2016.3/external-annotations.html)
- Аннотации уровня пакетов для @nullable и @nonnull
- OKTTP Interceptor для легко добавления токена Auth в заголовки
- Строгий режим
- Плагин для публикации приложения в игровом магазине
- Плагин Count DEX для подсчета количества методов в APK
- Отдельное дерево лесозаготовок для Crashlytics. См. Com.example.tools.timber.crashlyticstree
- Quick Settings Tiles (см. Com.example.features.tiles.passiveTileserviceOnlyToggle)
- Добавлены Traceur в проект, который позволяет отображать более полезные StackTraces с Rxjava 2 (Check Traceurtool Class и другие связанные классы или https://github.com/tspoon/traceur для библиотеки).
- Приложения ярлыки! Статический, динамичный и динамический, используемый через https://github.com/matthiasrobbers/shortbread! Для получения подробной информации, пожалуйста, проверьте нижнюю часть класса приложений, MainActivity @shortcut Declaration и Files.xml.
.. и все виды других вкусностей!
TeamCity - непрерывная интеграция
Проект получает выгоду от функции TeamCity по хранению конфигурации сервера CI в Kotlin в системе управления версиями. См. Настройки можно найти в папке .teamcity в проекте.
Создать конфигурации:
Есть 3 конфигурации сборки:
- Конфигурация «Поиск запросов» , запускаемой по каждому запросу на привлечение. Проверяет правильность запроса на вытяжение (обычно для «развития» ветви). QA принесет соответствующий APK из HockeyApp, созданный этой конфигурацией сборки, чтобы вручную проверить функцию/исправление, которую вводит запрос на вытягивание. Эта сборка:
- Запускает все инструменты статического анализа.
- Запускает все модульные тесты для всех типов сборки.
- Выполните подсчет методов для всех типов сборки.
- Проверки на дубликаты.
- Строит APK.
- Запускает все тесты эспрессо в тестовом облаке Firebase.
- Загружает APK в HockeyApp.
- Обновления GitHub с статусом работы (успех/неудача).
- Настройка «Ночные сборки » сборка, запускаемая каждую ночь в полночь на «Разработка». QA принесет соответствующий APK из HockeyApp, созданный этой конфигурацией сборки для проверки интеграции функций приложения. Эта сборка также развернута в закрытой группе Alpha Playstore для протестов. Эта сборка:
- Запускает все модульные тесты для всех типов сборки.
- Выполняет подсчет методов для всех типов сборки.
- Проверки на дубликаты.
- Строит APK.
- Запускает все тесты эспрессо в тестовом облаке Firebase.
- Загружает APK в HockeyApp.
- Загружает выпуск APK на частный альфа -канал в PlayStore.
- «Выпустить» конфигурацию сборки, запускаемой на каждой ветви, соответствующей «Выпуск/*». QA принесет соответствующий APK от HockeyApp для выполнения окончательного тестирования перед выпуском. Эта сборка также развернута в открытой бета -игровой группе для людей. Эта сборка:
- Запускает все инструменты статического анализа.
- Запускает все модульные тесты для всех типов сборки.
- Выполняет подсчет методов для всех типов сборки.
- Проверки на дубликаты.
- Строит APK.
- Запускает все тесты эспрессо в тестовом облаке Firebase.
- Загружает APK в HockeyApp.
- Загружает выпуск APK на публичный бета -канал в PlayStore.
Отчеты:
Есть также всевозможные отчеты:
- Отчет о статическом анализе Checkstyle показывает все предупреждения о контроле в проекте. Обычно сообщается о пустых, так как в проекте существует политика нулевой терпимости. На неудачных сборках это определяет проблемы, которые необходимо исправить.

- Отчеты о модульных испытаниях для всех типов сборки показывают все тесты, которые были запускаются вместе с дополнительными деталями и стектрасами, если произойдет ошибка. 2 мониторинга, один - это отчет об тестировании TeamCity, другой является оригинальный отчет JUNIT4 HTML.


- Счетчики метода DEX для всех типов сборки показывают количество методов для каждого APK, а также интересную визуализацию Dlill Down, которая позволяет очень легко обнаружить библиотеки, которые содержат слишком много методов. В качестве примечания, обычно выпуск, и QA APK имеют меньшее количество методов в этих отчетах, так как прогиард работает в этих типах сборки, снимая неиспользованные методы.

- Отчет о статическом анализе Findbugs показывает все предупреждения Findbugs в проекте. Обычно сообщается о пустых, так как в проекте существует политика нулевой терпимости. На неудачных сборках это определяет проблемы, которые необходимо исправить.

- Отчет о статическом анализе Lint показывает все предупреждения Lint в проекте. Обычно сообщается о пустых, так как в проекте существует политика нулевой терпимости. На неудачных сборках это определяет проблемы, которые необходимо исправить.

- Отчет о статическом анализе PMD показывает все предупреждения PMD в проекте. Обычно сообщается о пустых, так как в проекте существует политика нулевой терпимости. На неудачных сборках это определяет проблемы, которые необходимо исправить.

- В настоящее время нет отчета о облачном тестировании Firebase. Вам нужно будет перейти в журнал сборки и найти URL -адрес, который указывает на ведро Google Cloud Storage, в котором результаты сохраняются. С несколькими изменениями можно использовать личное (платное) ведро для хранения, а затем привлечь результаты теста обратно в TeamCity. Эта статья кратко затрагивает тему: http://building.usebutton.com/testing/cloud/android/ci/2016/04/20/teamcity-google-device-cloud/

Плагины команды:
Пара плагинов TeamCity была использована, чтобы облегчить мою жизнь:
- «Усовершенствованный номер общего сборки»: см. Поскольку этот счетчик является частью кода версии APK, хорошо держать их в синхронизации.
- 'Plugin' Slack Notifications ': см.
- 'Chuck Norris TeamCity Plugin': см. Https://github.com/dbf256/teamcity-chuck-plugin, не так много сказать об этом ;-)
Примечания:
- Публичный бета -канал (https://play.google.com/apps/testing/com.justanotherandApp) может (в теории) может распространяться по всей компании. Одна вещь, которую я попробовал, - это добавление ссылки на тег NFC и повесить ее на стене, чтобы каждый мог быстро принести бета -приложение!
HockeyApp
Я использую HockeyApp для сохранения и (в теории) распространять APK в QA или заинтересованные стороны. Смотрите https://hockeyapp.net для получения более подробной информации о продукте. Вот как это выглядит на панели приборной панели HockeyApp:

Как вы можете видеть, есть разные сборки для различных конфигураций CI Build и всех типов сборки. Ребята HockeyApp были достаточно любезны, чтобы предоставить мне бесплатный аккаунт, чтобы продемонстрировать использование их инструмента.
Обзоры Playstore в Slack
Использование обзора BOT для этого (https://reviewbot.io/?utm_source=github&utm_medium=athkalia-just-another-android-app) не так много, чтобы сказать, просто супер простой инструмент, который выполняет работу. Когда наступает обзор, выглядит так:

Дорожная карта
- Обновить до последней версии Gradle
- Аутентификация отпечатков пальцев
- Библиотека дирижеров
Отправка PRS
Пожалуйста, убедитесь, что gradlew check успешно завершается перед созданием PR. Эта команда запускает все тесты для всех вариантов, а также 4 инструмента статического анализа: Lint, Checsktyle, PMD, Findbugs.
Список вещей, которые я не буду добавлять, не стесняйтесь вносить свой вклад, если вам нравится какой -либо из них!
- Запустите тестовый охват в облачном тестировании Firebase, получите отчеты (возможно, объедините их с отчетами о покрытии модульных тестов) и предоставьте отчетность на сервере CI. Это потребует платы за ведро S3, и я не уверен в полезности отслеживания этого, если честно.
- Автоматизируют больше выпуска, такие как выпуски тегов, слияние обратно для разработки и т. Д. Требования вокруг этого очень специфичны для проекта, и, учитывая, что могут быть конфликты и т. Д., На данный момент не стоит автоматизировать.
- Автоматические скриншоты через инструмент "Fastlane - Screengrab" (https://github.com/fastlane/fastlane/tree/master/screengrab) Они не поддерживают Windows, и у меня нет Mac :(
Любые отзывы/запрос на вытягивание приветствуются!
Вы можете поймать меня на www.sakiskaliakoudas.com