← Back to list

Modularização no Android: Criando módulos e estratégias.

Nesse post eu expliquei um pouco sobre o conceito, vantagens e desvantagens da modularização no ambiente android, mas a dúvida que fica é…

Pedro Nery · 2022-08-17 04:16 · 11 claps · 4.0 min read
#android #android-app-development #android-modular-app #modularization
Open on Medium ↗

Modularização no Android: Criando módulos e estratégias.

**Nesse post **eu expliquei um pouco sobre o conceito, vantagens e desvantagens da modularização no ambiente android, mas a dúvida que fica é: Como iniciar um processo de modularização em um projeto?

A primeira coisa a ser decidida antes de começar a criar os nossos módulos, é pensar na estratégia da nossa modularização, ou seja: definir quais módulos devem existir no projeto, em quais situações, e como eles devem se comunicar.

Estratégia de Modularização

No último post citado, eu utilizei de exemplo um formato de modularização por features, ou seja, nós criamos um módulo para cada feature do projeto. Claro que essa definição não deve ser levada ao pé da letra, pois existem diversas features que compartilham a mesma tela, ou o mesmo fluxo de telas, e se for para criar um módulo para cada uma, criaremos módulos muito pequenos, mas com alta complexidade no compartilhamento de informações comuns entre eles, o que acaba não compensando.

Por isso que na minha visão, o ideal para esse caso seria uma estratégia de “modularização por fluxo”, sendo um fluxo um agrupamento de features que tenham correlação técnica ou de negócio, fazendo com que compartilhem tantas implementações em comum, que separar eles acrescentaria desnecessariamente a complexidade da árvore de dependências.

Além dos módulos de feature, você pode ter os módulos comuns, assim como os citados **nesse artigo**.

Exemplo de árvore de dependências de uma modularização por fluxo.

Vantagens da modularização por feature:

  • Alto nível de divisão por módulos, potencializando a diminuição de tempo de build e organização do projeto
  • Evita que implementações que não tem nenhuma relação conheçam uma a outra(No exemplo acima, as features de produto e de benefícios)

Desvantagens da modularização por feature:

  • Devido ao alto nível de divisão, também aumenta a complexidade do mapa de dependências, muitas vezes forçando que existam módulos comuns de utilidades, navegação, etc
  • Possibilita que camadas da sua arquitetura que não deveriam se conhecer, se conheçam(No exemplo acima, a View de fluxo de pagamentos pode conhecer o Model do mesmo fluxo)

Mas existe outra abordagem de modularização que ainda é bastante utilizada em alguns projetos: a modularização por camada de arquitetura.

Pense em um projeto que utiliza MVVM simples, com apenas as camadas de View, ViewModel e Model. A modularização por camada de arquitetura consistiria em um módulo para todas as Views, outro para todas as ViewModels, e outro para todos os Models. Segue um exemplo da árvore de dependências:

Vantagens da modularização por camadas:

  • O baixo nível de divisão de módulos diminui a complexidade do mapa de dependências e a necessidade de módulos comuns
  • Evita que camadas que não deveriam se conhecer, se conheçam(Uma View nunca conhecerá um repositório, por exemplo)

Desvantagens da modularização por camadas:

  • Devido ao baixo nível de divisão, o desenvolvedor se beneficiará pouco da diminuição de tempo de build e da organização do projeto.
  • Implementações que não tem nenhuma ligação entre si se conhecerão(Telas que nunca terão navegação entre si, podem se conhecer)

Na minha experiência pessoal, vejo a estratégia de modularização por features ser muito mais utilizada, por principalmente potencializar os benefícios da modularização no geral. Mas o desenvolvedor pode e deve pegar os pontos positivos e negativos de cada estratégia, e chegar a conclusão do que vale mais para o seu projeto.

Depois de decidir qual estratégia será utilizada, podemos criar os nossos módulos

Criando um módulo:

Criar um módulo é muito fácil, apenas devemos decidir onde nós criaremos ele, se será na pasta raiz do projeto, dentro de uma pasta com outros módulos, ou dentro de outro módulo(Tornando esse novo módulo um sub-módulo do módulo que ele está inserido).

Digamos que você queira criar um módulo na pasta raiz do projeto, basta então clicar com o botão direito dentro da pasta raiz no Android Studio(Para ver ela, mude a visualização do projeto para “Project”), vá em New, e depois Module.

Agora precisamos definir qual será o tipo desse módulo, os que mais nos importa são 2 tipos principais: Application(Definidos como Phone e Tablet), e Android Library.

O módulo application é o principal do nosso projeto, ou seja, nós podemos inicializar o nosso aplicativo a partir dele, porque ele tem obrigatoriamente todas as informações e configurações necessárias para ser um aplicativo(Como nome do app, ícone, activity principal, etc)

Já o módulo library é um módulo que pode ter qualquer tipo de implementação, como telas, úteis, etc. Mas ele não é feito para se inicializar um aplicativo a partir dele, o objetivo dele é apenas ser implementado por outros módulos, para que esses módulos possam utilizar as suas implementações.

Então para criar um library, basta selecionar a opção “Android Library”, decidir o nome dele(Em letra minúscula), e apertar em finish.

Observação: Após a criação, podemos alterar o tipo do nosso módulo no seu build.gradle, alterando o apply plugin: “com.android.application” para apply plugin: “com.android.library” , ou vice versa.

Ao criar um módulo, o nome dele automaticamente será incluído no arquivo settings.gradle do projeto. É importante que o nome de todos os módulos applications e librarys estejam presentes neste arquivo.


메타데이터
post_id
8d685dc2db7d
slug
modularização-no-android-criando-módulos-e-estratégias-8d685dc2db7d
url
https://medium.com/@pedronery2608/modulariza%C3%A7%C3%A3o-no-android-criando-m%C3%B3dulos-e-estrat%C3%A9gias-8d685dc2db7d
canonical_url
https://medium.com/@pedronery2608/modulariza%C3%A7%C3%A3o-no-android-criando-m%C3%B3dulos-e-estrat%C3%A9gias-8d685dc2db7d
author_url
https://medium.com/@pedronery2608
status
ok
fetched_at
2026-08-18 18:48:57