Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dividir para conquistar Modularização e Featu...

Dividir para conquistar Modularização e Features Dinâmicas no Android

Palestra apresentada pareando com @selem32 (twitter)
Hoje em dia temos apps crescendo cada dia mais e times crescendo cada dia mais. Diante dessa situação, as preocupações mais comuns são: Como não ter times impactando no trabalho de outros times? Como diminuir o tamanho do meu aplicativo, mesmo precisando adicionar mais Features? Parecem perguntas sem resposta. Mas atualmente temos formas de evitar esses problemas existentes. Modularizando um grande aplicativo, podemos separar conceitos e códigos fonte, desacoplando as funcionalidades e as camadas, sendo possível ter um código fonte limpo e organizado. Além disso podemos ter módulos de Features Dinâmicas, com eles podemos ter features que são instaladas conforme a necessidade do usuário.

Angélica Oliveira

April 25, 2020
Tweet

More Decks by Angélica Oliveira

Other Decks in Technology

Transcript

  1. Apresentação Angélica Oliveira Android Developer @ThoughtWorks Twitter @AngOliveiraa Linkedin @angelica-oliv

    Selem Afonso Android Developer @Sympla/MovilePay Twitter @selem32 Linkedin @selem-afonso-a0b75a8
  2. Por que modularizar? • Tempo de vida dos projetos; •

    Projetos muito grandes; • Difícil manutenção e implementação de novas features; • Tempo de Build.
  3. Benefícios de modularizar CRESCIMENTO DA EQUIPE AUTOMAÇÃO MAIS SIMPLES REUTILIZAÇÃO

    DO CÓDIGO POSSIBILIDADE DE INOVAÇÃO REVISÕES MAIS EFICIENTES TEMPO DE BUILD INTEGRAÇÃO COM OUTROS APPS
  4. Desafios ao modularizar • Se mal projetados pode virar um

    copia e cola. • Manter a documentação bem atualizada • Compartilhar conteúdo entre módulos
  5. Camadas da aplicação Módulo principal da aplicação. Único módulo de

    aplicações monolíticas, contém todo o código da aplicação. Em aplicações modularizadas irá operar de acordo com o tipo do projeto.
  6. Core Módulos compartilhados entre outros módulos. Contém lógica de negócios,

    acesso a dados, cache. Ex.: Network, Analytics, Test
  7. Features Módulos de feature - Contém funcionalidades específicas desacopladas da

    aplicação. Depende do tipo de aplicação que estamos construindo.
  8. Dynamic Feature Modules? • Módulos instalados conforme necessidade • Desinstalação

    de módulos não utilizados • Instalação condicional • Instant Apps
  9. 80% dos usuários usam 20% do app • Tempo de

    download do app • Internet dos usuários para download do aplicativo
  10. 80% dos usuários usam 20% do app • Tempo de

    download do app • Internet dos usuários para download do aplicativo • Espaço de armazenamento do device dos usuários
  11. Como começar? • App modularizado • API mínima • Escolha

    o módulo dinâmico Melhores práticas UX
  12. Como começar? • App modularizado • API mínima • Escolha

    o módulo dinâmico • Alteração da arquitetura
  13. Alterações Necessárias • Gradle files -> Arquitetura e dependências •

    Application -> SplitCompatApplication • AndroidManifest -> Título e tipo de módulo dinâmico
  14. Alterações Necessárias • Gradle files -> Arquitetura e dependências •

    Application -> SplitCompatApplication • AndroidManifest -> Título e tipo de módulo dinâmico • View responsável por iniciar módulo -> Listener e Manager da instalação
  15. private val listener = SplitInstallStateUpdatedListener { state -> when (state.status())

    { SplitInstallSessionStatus.DOWNLOADING -> { // In order to see this, the application has to be uploaded to the Play Store. } SplitInstallSessionStatus.INSTALLED -> ... SplitInstallSessionStatus.INSTALLING -> ... SplitInstallSessionStatus.FAILED -> ... else -> { // do nothing } } }
  16. Quer mais detalhes? Link para post no Medium com exemplos

    de código referências, sample no Github etc
  17. THANKS Angélica Oliveira Android Developer @ThoughtWorks Twitter @AngOliveiraa Linkedin @angelica-oliv

    Selem Afonso Android Developer @Sympla/MovilePay Twitter @selem32 Linkedin @selem-afonso-a0b75a8