Observe que este projeto não é mais mantido
Aplicativo de amostra Android com arquitetura MVP
Projeto de amostra que exibe algumas imagens da API de drible. Demonstra algumas coisas legais que você pode fazer com as bibliotecas e ferramentas modernas no Android nos dias de hoje.
Como alguém disse no Reddit: "Não é super-engenharia, é apenas um arranha-céu sem a parte do arranha-céu, apenas as fundações :)"

Adições mais recentes:
- Atualizado o plugin Android Gradle para v3.0.1
- Adicionado suporte para colher. Consulte https://github.com/square/spoon para obter mais detalhes. Também adicionou o plug -in gradle para ele. Pode -se executar os testes com 'Gradlew Spoon' e depois abrir os relatórios gerados no diretório 'Build/Spoon'.
- Adicionado captura de tela de captura de captura enquanto executa testes de café expresso na Firebase
- Adicionada cobertura de teste para testes de unidade no servidor TeamCity CI
- Adicionado um exemplo de permissão de tempo de execução. Usa a biblioteca permissõesdispatcher. Consulte a classe RunTimePermissionsActivity. (https://github.com/permissions-dispatcher/permissionsdispatcher)
- Dependências reestruturadas um pouco, verifique o arquivo e dependences.gradle.gradle
- Adicionado suporte para encadernições Android de Dagger (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)
- Adicionado um teste de café expresso usando a biblioteca Okreplay (https://github.com/airbnb/okreplay) que registra e repita as respostas do servidor. Consulte com.example.features.dashboard.view.mainactivityokReplayesPressOtest Para obter mais detalhes.
- Adicionado suporte ao Firebase Cloud Testing (Firebase.google.com/docs/test-lab/) através do TeamCity! Agora, todas as solicitações de tração/ construção noturna de compilação/ liberação usam o serviço para executar testes de café expresso. Consulte JustanOtherandroidapp_runeSpressOtestsInfireBase.xml para obter mais detalhes.
- Adicionado suporte à Burst Library (https://github.com/square/burst) para testes de unidade parametrizados (consulte com.example.util.stringutilstest para obter mais detalhes).
- Adicionados atalhos de aplicativos! Estático, dinâmico e dinâmico usado pela biblioteca https://github.com/matthiasrobbers/shortbread! Para obter detalhes, verifique a classe do aplicativo, a declaração MainActivity @shortcut e o arquivo atalhos.xml.
- Adicionado mais 2 verificações personalizadas de fiapos em torno das cores (verifique a classe não materialColorsDetector e o DirectMaterialPaletTecolorSagedETector).
- Adicionado uma verificação personalizada de fiapos para cores codificadas. (Verifique a classe HardCodedColorsDetector)
- O plug-in gradle para verificar o tamanho da APK e falhar automaticamente na construção se o tamanho do APK for superior a um valor específico (verifique o arquivo Build.gradle e Gradle.properties para a configuração e https://github.com/vanniktech/gradle-android-apk-size-plugin para o plugin gradle real).
- Adicionado suporte para os scripts do TeamCity IG cometidos no VCS! Eles são escritos em Kotlin/XML (verifique a pasta .TeamCity ou leia mais na parte inferior deste arquivo)
- Adicionado Sherlock ao projeto para que os desenvolvedores (e o controle de qualidade) possam ter acesso fácil às exceções ocorrendo (e compartilhá -los) através do aplicativo (consulte a classe do aplicativo e o arquivo Build.gradle e https://github.com/ajitsing/sherlock para o projeto).
- Adicionado Traceur ao projeto que permite exibir mais lúcitos de empilhamento úteis com o RXJava 2 (verifique a classe Traceurtool e as outras classes relacionadas ou https://github.com/tpoon/traceur para a biblioteca).
- Adicionou a biblioteca Chuck para ver chamadas de rede diretamente no telefone. Consulte https://github.com/jgilfelt/chuck para a biblioteca e a classe NetworkModule para o interceptador adicionado.
- Desativando as animações antes do expresso testes e reenncando-as depois! (Veja Grant_animation_permission.gradle e Espressotesthelper Class)
- Ações adicionais para o Butterknife (consulte a classe Butterknifeactions)
- Suporte para partes zombeteiras do seu gráfico de punhal via biblioteca daggermock (consulte a classe MainActivityTest)
- Layout de restrição adicionado! (Consulte Atividades_main.xml)
- Adicionado um agendador de rxjava que informa o Espresso por meio de uma fonte de contagem sobre quando pausar a execução do teste e aguardar as tarefas assíncronas terminarem (verifique com.example.util.rx.rxidlingscheduler)
- Projeto atualizado para usar o novo Mosby MVP V3 !! Verifique https://github.com/sockeqwe/mosby para obter mais detalhes.
- Adicionado suporte para a classe RXJavaPlugins, que permite a substituição fácil dos agendadores RXJava 2 nos testes. Consulte o método de configuração da classe MainPresentStest.
- Adicionado algumas variações dos ladrilhos de configurações rápidas. Consulte https://medium.com/google-developers/quick-settings-tiles-e3c22daf93a8 para obter informações sobre o recurso e com.example.features.tiles.passivetileServiceOnlytoggle Classe para a implementação (além de mais alguns brindes no mesmo pacote)
Conteúdo:
Bibliotecas:
- Rxjava
- Dagger 2 com exemplos de injeção assistida e diferentes módulos, dependendo do tipo de construção. Também suporte para Android Dagger v2.11
- ROTROFIT 2 E ROTROFIT MODE MODE PARA COMBURAS DE DEBUG
- MVP de Mosby com o suporte do estado de exibição (v3!)
- Madeira
- Valor automático e fábrica de automóveis
- Deslize com um invólucro
- Butternife
- AssertJ para afirmações fluentes
- Tecido (craques e respostas)
- Retolambda
- Stetho
- Mandril
- Shortbread (https://github.com/matthiasrobbers/shortbread)
- PermissionsDispatcher para permissões de tempo de execução (https://github.com/permissions-dispatcher/permissionsdispatcher)
Análise estática:
- PMD (https://pmd.github.io/ - verifique o arquivo static_analysis_java.gradle)
- CheckStyle (Verifique o arquivo static_analysis_java.gradle)
- Fiapo (checar o arquivo lint.gradle)
- FindBugs (check Arquivo static_analysis_java.gradle)
- Cobertura do código Jacoco que pode gerar relatórios para testes de unidade, testes de café expresso ou a combinação dos dois
- Um conjunto de regras de inspeção de IDE personalizadas
- Um módulo com regras e testes personalizados para eles
Teste:
- Adicionado suporte para colher. Consulte https://github.com/square/spoon para obter mais detalhes. Também adicionou o plug -in gradle para colher. Pode -se executar os testes com 'Gradlew Spoon' e depois abrir os relatórios gerados no diretório 'Build/Spoon'.
- Cobertura de teste em execução no servidor TeamCity CI
- Testes de café expresso com e sem servidor web simulado
- Testes de servidor da web simulados que carregam respostas de arquivos JSON
- Testes robolétricos
- Testes de unidade normais
- OK HTTP Interceptor para alterar o URL base nos testes
- Recursos ociosos
- Tela de desbloqueio para testes de café expresso (Check classe com.example.util.espresstestrunner)
- Suporte para a classe RXJavaPlugins, que permite a substituição fácil de agendadores RXJava 2 em testes (verifique a classe MainPresenderStest mais)
- Suporte a um agendador RXJava que ajuda nos testes de café expresso e execução de código assíncrono. (Verifique com.example.util.rx.rxidlingscheduler)
- Suporte para partes zombeteiras do seu gráfico de punhal via biblioteca daggermock (consulte a classe MainActivityTest)
- Desativando as animações antes do expresso testes e reenncando-as depois! (Veja Grant_animation_permission.gradle e Espressotesthelper Class)
- Adicionado Sherlock ao projeto para que os desenvolvedores (e o controle de qualidade) possam ter acesso fácil às exceções ocorrendo (e compartilhá -los) através do aplicativo (consulte a classe do aplicativo e o arquivo Build.gradle e https://github.com/ajitsing/sherlock para o projeto).
- BIRST Library (https://github.com/square/burst) para testes de unidade parametrizados (consulte com.example.util.stringutilstest para obter mais detalhes).
- Adicionado suporte ao Firebase Cloud Testing (Firebase.google.com/docs/test-lab/) através do TeamCity! Agora, todas as solicitações de tração/ construção noturna de compilação/ liberação usam o serviço para executar testes de café expresso. Consulte JustanOtherandroidapp_runeSpressOtestsInfireBase.xml para obter mais detalhes.
- Adicionado um teste de café expresso usando a biblioteca Okreplay (https://github.com/airbnb/okreplay) que registra e repita as respostas do servidor. Consulte com.example.features.dashboard.view.mainactivityokReplayesPressOtest Para obter mais detalhes.
Ver Relacionado:
- Layout de restrição adicionado! (Consulte Atividades_main.xml)
- Ações adicionais para o Butterknife (consulte a classe Butterknifeactions)
Outro:
- O plug-in gradle para verificar o tamanho da APK e falhar automaticamente na construção se o tamanho do APK for superior a um valor específico (verifique o arquivo Build.gradle e Gradle.properties para a configuração e https://github.com/vanniktech/gradle-android-apk-size-plugin para o plugin gradle real).
- Separe os ícones de aplicativos de acordo com o tipo de construção
- Algumas fontes avançadas definem a configuração para dividir os testes
- Carregando algumas configurações do projeto de arquivos de propriedade no Android manifestando e build.gradle
- Pastas compartilhadas para alguns tipos de construção ou testes
- Config do trabalho de trabalho
- Anotações externas do Android Studio (https://www.jetbrains.com/help/idea/2016.3/external-annotações.html)
- Anotações no nível do pacote para @Nullable e @Nonnull
- Okhttp Interceptor para adicionar token de autenticação aos cabeçalhos facilmente
- Modo rigoroso
- Plug -in para publicar aplicativo no Playstore
- Plugin de contagem de dex para contar o número de métodos no apk
- Separe a árvore de log de madeira para crashytics. Veja com.example.tools.timber.crashlyticstree
- Ladrilhos de configurações rápidas (consulte com.example.features.tiles.passivetileServiceOnlytoggle)
- Adicionado Traceur ao projeto que permite exibir mais lúcitos de empilhamento úteis com o RXJava 2 (verifique a classe Traceurtool e as outras classes relacionadas ou https://github.com/tpoon/traceur para a biblioteca).
- Atalhos de aplicativos! Estático, dinâmico e dinâmico usado pela biblioteca https://github.com/matthiasrobbers/shortbread! Para obter detalhes, verifique a classe do aplicativo, a declaração MainActivity @shortcut e o arquivo atalhos.xml.
..e todos os tipos de outras guloseimas!
TeamCity - integração contínua
O projeto se beneficia do recurso do TeamCity de armazenar a configuração do servidor CI em Kotlin em um sistema de controle de versão. Consulte https://confluence.jetbrains.com/display/tcd10/kotlin+dsl para obter mais detalhes. As configurações podem ser encontradas na pasta .TeamCity no projeto.
Crie configurações:
Há 3 configurações de construção:
- 'Pull Solictações' Construa a configuração, acionada em todas as solicitações de tração. Verifica a correção de uma solicitação de tração (geralmente para a filial 'desenvolver'). O controle de qualidade buscaria o APK relevante do HockeyApp criado por essa configuração de compilação para testar manualmente o recurso/correção que a solicitação de tração apresenta. Esta construção:
- Executa todas as ferramentas de análise estática.
- Executa todos os testes de unidade para todos os tipos de construção.
- Execute a contagem de métodos para todos os tipos de construção.
- Verificações para duplicatas.
- Constrói APKs.
- Executa todos os testes de café expresso na nuvem de teste do Firebase.
- Envie o APKS para HockeyApp.
- Atualiza o GitHub com o status do trabalho (sucesso/falha).
- 'Nightly Builds ' Build Configuration, acionado todas as noites à meia -noite na filial 'Develop'. O controle de qualidade buscaria o apk relevante do HockeyApp criado por esta configuração de compilação para testar a integração dos recursos do aplicativo. Esta construção também é implantada para um grupo de Playstore Alpha Fechado para as pessoas testarem. Esta construção:
- Executa todos os testes de unidade para todos os tipos de construção.
- Executa a contagem de métodos para todos os tipos de construção.
- Verificações para duplicatas.
- Constrói APKs.
- Executa todos os testes de café expresso na nuvem de teste do Firebase.
- Envie o APKS para HockeyApp.
- O upload de libera APK para o canal alfa privado em Playstore.
- 'Releases' Construir a configuração, acionada em todas as ramificações que correspondem ao nome da ramificação lógica 'Release/*'. O controle de qualidade buscaria o APK relevante do HockeyApp para realizar os testes finais antes do lançamento. Essa compilação também é implantada para um grupo Beta Playstore aberto para as pessoas testarem. Esta construção:
- Executa todas as ferramentas de análise estática.
- Executa todos os testes de unidade para todos os tipos de construção.
- Executa a contagem de métodos para todos os tipos de construção.
- Verificações para duplicatas.
- Constrói APKs.
- Executa todos os testes de café expresso na nuvem de teste do Firebase.
- Envie o APKS para HockeyApp.
- O upload de libera APK para o canal beta público em Playstore.
Relatórios:
Há também todos os tipos de relatórios disponíveis:
- O relatório de análise estática do estilo de seleção mostra todos os avisos do estilo de seleção no projeto. Geralmente se reportava vazio, pois há uma política de tolerância zero no projeto. Na falha, ele identifica os problemas que precisam ser corrigidos.

- Os relatórios de teste de unidade para todos os tipos de construção mostram todos os testes que foram executados junto com detalhes adicionais e tracas de empilhamento, caso ocorra um erro. 2 painéis, um é o relatório de teste gerado pelo TeamCity, o outro é o relatório HTML do Junit4 original.


- Relatórios de contador de métodos DEX para todos os tipos de construção mostram a contagem de métodos para cada APK, juntamente com uma visualização interessante de broca que facilita muito a localização de bibliotecas que contêm muitos métodos. Como nota, geralmente a liberação e os APKs de controle de qualidade têm uma contagem de métodos menores nesses relatórios, pois o ProGuard está sendo executado nesses tipos de construção, eliminando métodos não utilizados.

- O relatório de análise estática do FindBugs mostra todos os avisos do FindBugs no projeto. Geralmente se reportava vazio, pois há uma política de tolerância zero no projeto. Na falha, ele identifica os problemas que precisam ser corrigidos.

- O relatório de análise estática de fiapos mostra todos os avisos de fiapos no projeto. Geralmente se reportava vazio, pois há uma política de tolerância zero no projeto. Na falha, ele identifica os problemas que precisam ser corrigidos.

- O relatório de análise estática do PMD mostra todos os avisos do PMD no projeto. Geralmente se reportava vazio, pois há uma política de tolerância zero no projeto. Na falha, ele identifica os problemas que precisam ser corrigidos.

- No momento, não há relatório para os testes da Firebase Cloud. Você precisará entrar no log de compilação e localizar o URL que aponta para o balde de armazenamento do Google Cloud em que os resultados são salvos. Com algumas alterações, pode -se usar um balde de armazenamento pessoal (pago) e depois puxar os resultados do teste de volta ao TeamCity. Este artigo aborda brevemente o tópico: http://building.usebutton.com/testing/cloud/android/ci/2016/04/20/teamcity-google-device-cloud/

Plugins de teamcity:
Alguns plugins do TeamCity foram usados para facilitar minha vida:
- 'Número de construção compartilhada avançada': consulte https://java.nicholaswilliams.net/teamcityplugins/download um plug -in que permite compartilhar contadores de compilação nas construções. Como esse contador faz parte do código da versão do APK, é bom mantê -los sincronizados.
- 'Plug -in de notificações de folga': consulte https://github.com/petegoo/tcslackbuildnotifier Um plug -in que permite que você poste status de construção.
- 'Chuck Norris Teamcity Plugin': consulte https://github.com/dbf256/teamcity-chuck-plugin não há muito a dizer sobre isso ;-)
Notas:
- O canal beta público (https://play.google.com/apps/testing/com.justanOtherandroidapp) pode então (em teoria) ser distribuído pela empresa. Uma coisa que tentei foi adicionar o link a uma tag NFC e pendurá -la na parede, para que todos possam buscar rapidamente o aplicativo beta!
HockeyApp
Estou usando o HockeyApp para salvar e (em teoria) distribui os APKs ao controle de qualidade ou às partes interessadas. Consulte https://hockeyapp.net para obter mais detalhes sobre o produto. É assim que se parece no painel HockeyApp:

Como você pode ver, existem diferentes construções para as diferentes configurações de construção de IC e todos os tipos de construção. Os caras do Hockeyapp tiveram a gentileza de me fornecer uma conta gratuita para demonstrar o uso de sua ferramenta.
Playstore Reviews in Slack
Usando o BOT de revisão para este (https://reviewbot.io/?utm_source=github&utm_medium=athkalia-Just-Another-Android-App) não há muito a dizer, apenas uma ferramenta super simples que faz o trabalho. Quando uma revisão chega, parece o seguinte:

Roteiro
- Atualize para a versão mais recente do gradle
- autenticação de impressão digital
- Biblioteca de Condutores
Enviando prs
Certifique -se de que o comando gradlew check seja concluído com êxito antes de criar o PR. Este comando executa todos os testes para todas as variantes, além das 4 ferramentas de análise estática: fiapos, verificações, pmd, findbugs.
Lista de coisas que não vou adicionar, fique à vontade para contribuir se você gosta de alguma dessas!
- Execute a cobertura do teste no Firebase Cloud Testing, busque os relatórios (possivelmente mescle -os com relatórios de cobertura de testes de unidade) e forneça relatórios de volta ao servidor de CI. Isso exigiria pagar por um balde S3, e não tenho certeza da utilidade de rastrear isso para ser honesto.
- Automatize mais as liberações, como as versões de marcação, a fusão de volta para desenvolver etc. Os requisitos em torno disso são muito específicos do projeto e, uma vez que pode haver conflitos etc., não vale a pena automatizar por enquanto.
- Capturas de tela automáticas através da ferramenta "fastlane - screengrab" (https://github.com/fastlane/fastlane/tree/master/screengrab) Eles não suportam o Windows e eu não tenho um Mac :(
Qualquer solicitação de feedback/puxão é bem -vindo!
Você pode me pegar em www.sakiskaliakoudas.com