Tenga en cuenta que este proyecto ya no se mantiene
Aplicación de muestra de Android con arquitectura MVP
Proyecto de muestra que muestra algunas imágenes de la API Dribble. Demuestra algunas cosas geniales que puede hacer con las bibliotecas modernas y las herramientas en Android en estos días.
Como alguien dijo en Reddit: "No es demasiado diseñado, es solo un rascacielos sin la parte del rascacielos, solo los cimientos :)"

Adiciones más nuevas:
- Android Gradle de Android actualizado a v3.0.1
- Soporte agregado para Spoon. Consulte https://github.com/square/spoon para obtener más detalles. También agregó el complemento de Gradle. Uno puede ejecutar las pruebas con 'Gradlew Spoon' y luego abrir los informes generados en el directorio 'Build/Spoon'.
- Se agregó captura de captura de pantalla mientras ejecuta pruebas de café espresso en Firebase
- Cobertura de prueba agregada para pruebas unitarias en TeamCity CI Server
- Se agregó un ejemplo de permiso de tiempo de ejecución. Utiliza la biblioteca de permisos DISPATCHER. Ver RunTimEpermissionsAssIONTivity Clase. (https://github.com/permissions-dispatcher/permissionsdispatcher)
- Dependencias reestructuradas un poco, verifique el archivo y el archivo de dependencias.
- Soporte agregado para Dagger Android Bindings (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)
- Se agregó una prueba de espresso utilizando la biblioteca OkReplay (https://github.com/airbnb/okreplay) que registra y reproduce las respuestas del servidor. Consulte com.example.feature.dashboard.view.MainactivityokReplayesPressotest para obtener más detalles.
- ¡Se agregó soporte para las pruebas de nube de Firebase (Firebase.google.com/docs/test-lab/) a través de TeamCity! Ahora cada solicitud de extracción/ compilación nocturna/ compilación de lanzamiento utiliza el servicio para ejecutar pruebas de espresso. Consulte JustanotherandroidApp_RunesPressotestsinfireBase.xml para obtener más detalles.
- Soporte agregado para la biblioteca de ráfaga (https://github.com/square/burst) para las pruebas unitarias parametrizadas (consulte com.example.util.stringutilstest para obtener más detalles).
- ¡Aplicados de aplicaciones agregados! ¡Estática, dinámica y dinámica utilizada a través de https://github.com/matthiasrobbers/shortbread Library! Para obtener más detalles, consulte la parte inferior de la clase de aplicaciones, el archivo MainActivity @shortcut y el archivo de accesos directos.
- Se agregaron 2 verificaciones de pelusa más personalizadas alrededor de los colores (verificar la clase no materialColorsDetector y directMaterialPaletTecolorusEdetector).
- Se agregó una verificación de pelusa personalizada para colores codificados. (Verifique la clase HardCodedColorSdetector)
- El complemento de Gradle para verificar el tamaño de APK y fallar automáticamente la compilación si el tamaño de APK es más que un valor específico (verifique el archivo Build.gradle y Gradle.Properties para la configuración y https://github.com/vanniktech/gradle-android-apk-size-plugin para el complemento de graduación real).
- ¡Se agregó apoyo para los scripts de CI de TeamCity cometidos en VCS! Están escritos en kotlin/xml (verifique la carpeta .teamcity o lea más en la parte inferior de este archivo)
- Se agregó Sherlock al proyecto para que los desarrolladores (y QA) puedan tener fácil acceso a las excepciones que ocurren (y compartirlas) a través de la aplicación (consulte la clase de aplicaciones y el archivo Build.gradle y https://github.com/ajitsing/sherlock para el proyecto).
- Se agregó TraceUr en el proyecto que permite mostrar pilas más útiles con RxJava 2 (verifique la clase TraceUrTool y las otras clases relacionadas o https://github.com/tpoon/traceur para la biblioteca).
- Se agregó la biblioteca Chuck para ver llamadas de red directamente en el teléfono. Consulte https://github.com/jgilfelt/chuck para la biblioteca y la clase NetworkModule para el interceptor agregado.
- ¡Deshabilitar las animaciones antes de las pruebas de café espresso y volver a habilitarlas después! (Ver Grant_animation_Permission.gradle y Espressotesthelper Clase)
- Acciones agregadas de Butterknife (ver Butterknifeactions Class)
- Soporte para burlarse de las partes de su gráfico de daga a través de la biblioteca Daggermock (consulte la clase MainActivityTest)
- ¡Diseño de restricción agregado! (Ver Activity_Main.xml)
- Se agregó un programador de RxJava que informa a Espresso a través de un CountingIdlingResource sobre cuándo detener la ejecución de la prueba y esperar a que las tareas asincrónicas terminen (verificar com.example.util.rx.rxidlingscheduler)
- ¡Proyecto actualizado para usar el nuevo Mosby MVP V3! Consulte https://github.com/sockeqwe/mosby para obtener más detalles.
- Se agregó soporte para la clase RXJAVAPLUGINS, que permite una fácil anulación de los programadores de RxJava 2 en las pruebas. Consulte el método de configuración de la clase MainPresentertest.
- Se agregó algunas variaciones de los mosaicos de configuración rápida. Consulte https://medium.com/google-developers/quick-settings-tiles-e3c22daf93a8 para obtener información sobre la función y en la clase com.example.features.tiles.passivetileserviceonlytoggle para la implementación (además hay más buenas golosinas en el mismo paquete)
Contenido:
Bibliotecas:
- Rxjava
- Daga 2 con ejemplos de inyección asistida y diferentes módulos dependiendo del tipo de construcción. También es compatible con Android Dagger v2.11
- Modernización 2 y modo simulado de modernización para construcciones de depuración
- MOSBY MVP con View State Support (¡V3!)
- Madera
- Valor automático y fábrica de automóviles
- Glide con una envoltura
- Paleta de mantequilla
- Afirmar por afirmaciones fluidas
- Tela (Crashlytics y respuestas)
- Retrolambda
- Stetho
- Arrojar
- Shortbread (https://github.com/matthiasrobbers/shortbread)
- PermissionsDispatcher para permisos de tiempo de ejecución (https://github.com/permissions-dispatcher/permissionsdispatcher)
Análisis estático:
- PMD (https://pmd.github.io/ - Verifique el archivo static_analysis_java.gradle)
- CheckStyle (verifique el archivo static_analysis_java.gradle)
- Lint (verifique el archivo Lint.gradle)
- Findbugs (verifique el archivo static_analysis_java.gradle)
- Cobertura de código JACOCO que puede generar informes para pruebas unitarias, pruebas de café expreso o la combinación de los dos
- Un conjunto de reglas de inspección IDE personalizadas
- Un módulo con reglas de pelusa personalizadas para ellos
Pruebas:
- Soporte agregado para Spoon. Consulte https://github.com/square/spoon para obtener más detalles. También agregó el complemento de Gradle para la cuchara. Uno puede ejecutar las pruebas con 'Gradlew Spoon' y luego abrir los informes generados en el directorio 'Build/Spoon'.
- Cobertura de prueba que se ejecuta en TeamCity CI Server
- ESPRESSO prueba con y sin servidor web simulado
- Pruebas de servidor web simulada que carga respuestas de los archivos JSON
- Pruebas roboléctricas
- Pruebas unitarias normales
- OK HTTP Interceptor para cambiar la URL base en las pruebas
- Recursos de ralentí
- Pantalla de desbloqueo para pruebas de espresso (verifique la clase com.example.util.espressotestrunner)
- Soporte para la clase RXJAVAPLUGINS, que permite una fácil anulación de los programadores de RxJava 2 en las pruebas (verifique la clase MainPresentertest)
- Soporte para un programador RXJava que ayuda con las pruebas de café expreso y la ejecución de código asincrónico. (Verifique com.example.util.rx.rxidlingscheduler)
- Soporte para burlarse de las partes de su gráfico de daga a través de la biblioteca Daggermock (consulte la clase MainActivityTest)
- ¡Deshabilitar las animaciones antes de las pruebas de café espresso y volver a habilitarlas después! (Ver Grant_animation_Permission.gradle y Espressotesthelper Clase)
- Se agregó Sherlock al proyecto para que los desarrolladores (y QA) puedan tener fácil acceso a las excepciones que ocurren (y compartirlas) a través de la aplicación (consulte la clase de aplicaciones y el archivo Build.gradle y https://github.com/ajitsing/sherlock para el proyecto).
- BRUT BIRDITY (https://github.com/square/burst) para pruebas unitarias parametrizadas (consulte com.example.util.stringutilstest para obtener más detalles).
- ¡Se agregó soporte para las pruebas de nube de Firebase (Firebase.google.com/docs/test-lab/) a través de TeamCity! Ahora cada solicitud de extracción/ compilación nocturna/ compilación de lanzamiento utiliza el servicio para ejecutar pruebas de espresso. Consulte JustanotherandroidApp_RunesPressotestsinfireBase.xml para obtener más detalles.
- Se agregó una prueba de espresso utilizando la biblioteca OkReplay (https://github.com/airbnb/okreplay) que registra y reproduce las respuestas del servidor. Consulte com.example.feature.dashboard.view.MainactivityokReplayesPressotest para obtener más detalles.
Vista relacionada:
- ¡Diseño de restricción agregado! (Ver Activity_Main.xml)
- Acciones agregadas de Butterknife (ver Butterknifeactions Class)
Otro:
- El complemento de Gradle para verificar el tamaño de APK y fallar automáticamente la compilación si el tamaño de APK es más que un valor específico (verifique el archivo Build.gradle y Gradle.Properties para la configuración y https://github.com/vanniktech/gradle-android-apk-size-plugin para el complemento de graduación real).
- Iconos de aplicaciones separados según el tipo de compilación
- Algunas fuentes avanzadas establecen configuración para dividir las pruebas
- Cargando alguna configuración del proyecto desde archivos de propiedades en Android Manifest y Build.gradle
- Carpetas compartidas para algunos tipos o pruebas de compilación
- Configuración de proaguard de trabajo
- Annotaciones externas de Android Studio (https://www.jetbrains.com/help/idea/2016.3/external-annotations.html)
- Anotaciones de nivel de paquete para @nullable y @nonnull
- Interceptor OKHTTP para agregar token de autenticación a los encabezados fácilmente
- Modo estricto
- Complemento para publicar la aplicación en la playstore
- Complemento de conteo DEX para contar el número de métodos en el APK
- Árbol de registro de madera separado para Crashlytics. Ver com.example.tools.timber.crashlyticstree
- Azulejos de configuración rápida (ver com.example.feature.tiles.passivetileServiceonlyToggle)
- Se agregó TraceUr en el proyecto que permite mostrar pilas más útiles con RxJava 2 (verifique la clase TraceUrTool y las otras clases relacionadas o https://github.com/tpoon/traceur para la biblioteca).
- Aplicar atajos! ¡Estática, dinámica y dinámica utilizada a través de https://github.com/matthiasrobbers/shortbread Library! Para obtener más detalles, consulte la parte inferior de la clase de aplicaciones, el archivo MainActivity @shortcut y el archivo de accesos directos.
... ¡y todo tipo de otras golosinas!
TeamCity - Integración continua
El proyecto se beneficia de la función de TeamCity de almacenar la configuración del servidor CI en Kotlin en un sistema de control de versiones. Consulte https://confluence.jetbrains.com/display/tcd10/kotlin+dsl para obtener más detalles. La configuración se puede encontrar en la carpeta .teamcity en el proyecto.
Configuraciones de compilación:
Hay 3 configuraciones de compilación:
- Configuración de compilación de 'extracción' , activada en cada solicitud de extracción. Verifica la corrección de una solicitud de extracción (generalmente para la rama 'Desarrollar'). QA obtendría el APK relevante de HockeyApp creado por esta configuración de compilación para probar manualmente la función/solución que introduce la solicitud de extracción. Esta construcción:
- Ejecuta todas las herramientas de análisis estático.
- Ejecuta todas las pruebas unitarias para todos los tipos de compilación.
- Realice el recuento de métodos para todos los tipos de compilación.
- Verificación de duplicados.
- Construye apks.
- Ejecuta todas las pruebas de café espresso en la nube de prueba de Firebase.
- Sube APK a HockeyApp.
- Actualiza GitHub con el estado del trabajo (éxito/falla).
- 'Nightly Builds ' Configuración de compilación, activada todas las noches a la medianoche de la rama 'Desarrollar'. QA buscaría el APK relevante de HockeyApp creado por esta configuración de compilación para probar la integración de las características de la aplicación. Esta construcción también se implementa en un grupo Alpha PlayStore cerrado para que las personas prueben. Esta construcción:
- Ejecuta todas las pruebas unitarias para todos los tipos de compilación.
- Realiza un recuento de métodos para todos los tipos de compilación.
- Verificación de duplicados.
- Construye apks.
- Ejecuta todas las pruebas de café espresso en la nube de prueba de Firebase.
- Sube APK a HockeyApp.
- Sube el lanzamiento de APK al canal Alpha privado en PlayStore.
- Configuración de compilación de 'liberaciones' , activada en cada rama que coincida con el nombre de rama lógico 'Release/*'. QA buscaría el APK relevante de HockeyApp para realizar las pruebas finales antes del lanzamiento. Esta construcción también se implementa en un grupo abierto de PlayStore Beta para que las personas prueben. Esta construcción:
- Ejecuta todas las herramientas de análisis estático.
- Ejecuta todas las pruebas unitarias para todos los tipos de compilación.
- Realiza un recuento de métodos para todos los tipos de compilación.
- Verificación de duplicados.
- Construye apks.
- Ejecuta todas las pruebas de café espresso en la nube de prueba de Firebase.
- Sube APK a HockeyApp.
- Sube el lanzamiento de APK al canal beta público en PlayStore.
Informes:
También hay todo tipo de informes disponibles:
- El informe de análisis estático de estilo de checkStyle muestra todas las advertencias de checkstyle en el proyecto. Por lo general, informaría vacío ya que hay una política de tolerancia cero en el proyecto. En las construcciones fallidas, identifica los problemas que deben solucionarse.

- Los informes de las pruebas unitarias para todos los tipos de compilación muestran todas las pruebas que se ejecutaron junto con detalles y pilas adicionales en caso de que ocurra un error. 2 paneles, uno es el informe de prueba generado por TeamCity, el otro es el informe original HTML JUNIT4.


- Los informes de contador de métodos DEX para todos los tipos de compilación muestran el recuento de métodos para cada APK, junto con una interesante visualización de desgarro que hace que sea muy fácil detectar bibliotecas que contienen demasiados métodos. Como nota, generalmente la liberación y los APK de QA tienen un recuento de métodos más pequeños en estos informes, ya que Proguard se ejecuta en estos tipos de compilación, eliminando los métodos no utilizados.

- El informe de análisis estático de FindBugs muestra todas las advertencias de FindBugs en el proyecto. Por lo general, informaría vacío ya que hay una política de tolerancia cero en el proyecto. En las construcciones fallidas, identifica los problemas que deben solucionarse.

- El informe de análisis estático de linta muestra todas las advertencias de pelusa en el proyecto. Por lo general, informaría vacío ya que hay una política de tolerancia cero en el proyecto. En las construcciones fallidas, identifica los problemas que deben solucionarse.

- El informe de análisis estático de PMD muestra todas las advertencias de PMD en el proyecto. Por lo general, informaría vacío ya que hay una política de tolerancia cero en el proyecto. En las construcciones fallidas, identifica los problemas que deben solucionarse.

- No hay ningún informe en este momento para las pruebas de nubes de Firebase. Deberá ingresar al registro de compilación y localizar la URL que apunta al cubo de almacenamiento de Google Cloud en el que se guardan los resultados. Con algunos cambios se puede usar un cubo de almacenamiento personal (pagado) y luego retirar los resultados de la prueba de nuevo en TeamCity. Este artículo toca brevemente el tema: http://building.usebutton.com/testing/cloud/android/ci/2016/04/20/teamcity-google-device-cloud/

Complementos de equipo:
Se usaron un par de complementos de TeamCity para facilitar mi vida:
- 'Número de construcción compartido avanzado': consulte https://java.nicholaswilliams.net/teamcityplugins/download un complemento que le permite compartir contadores de compilación en todo el tiempo. Como ese contador es parte del código de versión del APK, es bueno mantenerlos sincronizados.
- 'Slack Notifications Plugin': consulte https://github.com/petegoo/tcslackbuildnotiLifier Un complemento que le permite publicar los estados de compilación para holgazanear.
- 'Chuck Norris TeamCity Plugin': ver https://github.com/dbf256/teamcity-chuck-plugin no es mucho que decir sobre este ;-)
Notas:
- Public Beta Channel (https://play.google.com/apps/testing/com.justanotherandroidapp) puede (en teoría) distribuirse en toda la empresa. Una cosa que probé fue agregar el enlace a una etiqueta NFC y colgarlo en la pared, ¡para que todos puedan obtener rápidamente la aplicación beta!
Gota de hockey
Estoy usando HockeyApp para salvar y (en teoría) distribuir los APK a QA o partes interesadas. Consulte https://hockeyapp.net para obtener más detalles sobre el producto. Así es como se ve en el tablero de hockeyapp:

Como puede ver, hay diferentes compilaciones para las diferentes configuraciones de compilación de CI y todos los tipos de compilación. Los chicos de HockeyApp tuvieron la amabilidad de proporcionarme una cuenta gratuita para demostrar el uso de su herramienta.
Playstore reseñas en Slack
Usando Review Bot para esto (https://reviewbot.io/?utm_source=github&utm_medium=athkalia-just-another-anothroid-app) no es mucho que decir, solo una herramienta súper simple que hace el trabajo. Cuando llega una reseña, se ve así:

Hoja de ruta
- Actualizar a la última versión de Gradle
- autenticación de huellas digitales
- Biblioteca de conductores
Enviando PRS
Asegúrese de que la gradlew check se complete con éxito antes de crear el PR. Este comando ejecuta todas las pruebas para todas las variantes, más las 4 herramientas de análisis estático: pelusa, checsktyle, pmd, findbugs.
¡Lista de cosas que no agregaré, no dude en contribuir si le gusta alguno de estos!
- Ejecute la cobertura de prueba en las pruebas de la nube de Firebase, obtenga los informes (posiblemente fusionerlos con los informes de cobertura de las pruebas unitarias) y proporcionar informes al servidor CI. Esto requeriría pagar un cubo S3, y no estoy seguro de la utilidad de rastrear esto para ser honesto.
- Automatice las versiones más, como el etiquetado de los lanzamientos, la fusión de regreso para desarrollar, etc. Los requisitos sobre esto son muy específicos del proyecto, y dado que puede haber conflictos, etc., no vale la pena automatizar por ahora.
- Capturas de pantalla automáticas a través de la herramienta "FastLane - ScreenGrab" (https://github.com/fastlane/fastlane/tree/master/screengrab) No admiten Windows y no tengo una Mac :(
¡Cualquier solicitud de retroalimentación/extracción es bienvenida!
Puedes atraparme en www.sakiskaliakoudas.com