Os módulos de recursos permitem separar determinados recursos do módulo básico do app e incluí-los no pacote de apps. Em seguida, personalize as opções de entrega para controlar quando e como os dispositivos com o Android 5.0 (nível da API 21) ou mais recentes fazem o download dos recursos do app.
Esse tipo de modularização é mais trabalhoso e pode exigir a refatoração do código existente do app. Portanto, analise atentamente quais recursos do seu app seriam mais beneficiados com a disponibilização para usuários sob demanda.
Se você quiser modularizar gradualmente os recursos do app ao longo do tempo, sem mudar o comportamento dele ou personalizar as opções avançadas de entrega, poderá fazer isso criando módulos de recursos configurados para entrega na instalação. Ou seja, é possível modularizar um recurso como um módulo de recursos, mas não ativar opções avançadas para que o recurso esteja disponível quando o usuário instalar seu app.
Além disso, pode ser útil criar módulos de recursos configurados para entrega na instalação, porque você tem a opção de desinstalar esse recurso mais tarde se ele não for mais necessário. Por exemplo, para reduzir o tamanho instalado do app, você pode modularizar o conteúdo necessário para treinamento ou integração e desinstalar o módulo de recurso depois que estiver tudo configurado para o uso do app.
Esta seção descreve como criar um módulo de recurso para entrega na instalação. Antes de começar, verifique se você está usando o Android Studio 3.5 ou uma versão mais recente e o Plug-in do Android para o Gradle 3.5.0 ou mais recente.
Configurar um novo módulo para entrega na instalação
A maneira mais fácil de criar um novo módulo de recursos é usando o Android Studio 3.5 ou uma versão mais recente. Como os módulos de recursos têm uma dependência inerente no módulo básico, só é possível adicioná-los a projetos de apps existentes.
Para adicionar um módulo de recursos ao projeto do app usando o Android Studio, faça o seguinte:
- Abra o projeto do app no ambiente de desenvolvimento integrado.
- Selecione File > New > New Module na barra de menus.
- Na caixa de diálogo Create New Module, selecione Dynamic Feature Module e clique em Next.
- Na seção Configure your new module, faça o seguinte:
- No menu suspenso, selecione a opção Base application module para o projeto do seu app.
- Especifique um nome para o módulo em Module name. O ambiente de desenvolvimento integrado usa esse nome para identificar o
módulo como um subprojeto do Gradle no
arquivo de configurações do Gradle. Quando o
pacote de apps é criado, o Gradle usa o último elemento do nome do
subprojeto para inserir o atributo
<manifest split>
no manifesto do módulo de recursos. - Especifique o nome do pacote do módulo. Por padrão, o Android Studio sugere um nome de pacote que combina o nome do pacote raiz do módulo base com o nome do módulo especificado na etapa anterior.
- Selecione uma opção em Minimum API level para definir o nível mínimo de API com que o módulo será compatível. Esse valor deve corresponder ao do módulo básico.
- Clique em Next.
Na seção Module Download Options, faça o seguinte:
Use a opção Module title para especificar o título do módulo em até 50 caracteres. O módulo básico do app precisa incluir o título do módulo como um recurso de string, que você pode traduzir. Durante a criação do módulo usando o Android Studio, o ambiente de desenvolvimento integrado adiciona o recurso de strings ao módulo base para você e injeta a seguinte entrada no manifesto do módulo de recursos:
<dist:module ... dist:title="@string/feature_title"> </dist:module>
No menu suspenso em Install-time inclusion, selecione Include module at install-time. O Android Studio injeta o seguinte no manifesto do módulo para refletir sua escolha:
<dist:module ... > <dist:delivery> <dist:install-time /> </dist:delivery> </dist:module>
Se você quiser saber como criar um módulo de recurso que pode ser transferido por download após a instalação do app, leia Configurar a entrega sob demanda.
Marque a caixa ao lado de Fusing se você quiser que esse módulo esteja disponível para dispositivos com Android 4.4 (API de nível 20) e anteriores e seja incluído em vários APKs. Isso significa que você pode omiti-lo em dispositivos que não sejam compatíveis com o download e a instalação de APKs divididos. O Android Studio injeta o seguinte no manifesto do módulo para refletir sua escolha:
<dist:module ...> <dist:fusing dist:include="true | false" /> </dist:module>
Clique em Finish.
Quando o Android Studio terminar de criar seu módulo, inspecione o conteúdo no painel Project (selecione View > Tool Windows > Project na barra de menus). O código, os recursos e a organização padrão precisam ser semelhantes aos do módulo padrão do app.
Configuração da compilação do módulo de recursos
Quando você cria um novo módulo de recurso usando o Android Studio, o ambiente de desenvolvimento integrado
aplica o seguinte plug-in do Gradle ao arquivo build.gradle
do módulo.
// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.
apply plugin: 'com.android.dynamic-feature'
Muitas das propriedades disponíveis para o plug-in de aplicativo padrão também estão disponíveis para seu módulo de recurso. As seções a seguir descrevem as propriedades que você precisa ou não incluir na configuração da compilação do módulo de recurso.
O que não incluir na configuração da compilação do módulo de recursos
Como cada módulo de recurso depende do módulo básico, ele também
herda certas configurações. Portanto, você precisa omitir o seguinte no
arquivo build.gradle
do módulo de recurso:
- Configurações de assinatura: os pacotes de apps são assinados usando configurações de assinatura que você especifica no módulo base.
- A propriedade
minifyEnabled
: você pode ativar a redução de código para todo o projeto do app apenas na configuração da compilação do módulo básico. Portanto, você precisa omitir essa propriedade de módulos de recursos. No entanto, você pode especificar outras regras do ProGuard para cada módulo de recurso. versionCode
eversionName
: ao criar seu pacote de apps, o Gradle usa as informações da versão do app fornecidas pelo módulo básico. Você precisa omitir essas propriedades do arquivobuild.gradle
do módulo de recurso.
Estabelecer uma relação com o módulo básico
Quando o Android Studio cria seu módulo de recurso, ele fica visível
para o módulo básico adicionando a propriedade android.dynamicFeatures
ao arquivo
build.gradle
do módulo básico, como mostrado abaixo:
// In the base module’s build.gradle file.
android {
...
// Specifies feature modules that have a dependency on
// this base module.
dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}
Além disso, o Android Studio inclui o módulo básico como uma dependência do módulo de recurso, conforme mostrado abaixo:
// In the feature module’s build.gradle file:
...
dependencies {
...
// Declares a dependency on the base module, ':app'.
implementation project(':app')
}
Especificar outras regras do ProGuard
Embora somente a configuração da compilação do módulo básico possa ativar a redução de código
no projeto do app, você pode fornecer regras personalizadas do ProGuard com cada
módulo de recurso usando a propriedade
proguardFiles
,
como mostrado abaixo.
android.buildTypes {
release {
// You must use the following property to specify additional ProGuard
// rules for feature modules.
proguardFiles 'proguard-rules-dynamic-features.pro'
}
}
Observe que essas regras do ProGuard são mescladas com as regras de outros módulos (incluindo o módulo base) no momento da compilação. Assim, embora cada módulo de recurso possa especificar um novo conjunto de regras, essas regras se aplicam a todos os módulos no projeto do app.
Implantar o app
Durante o desenvolvimento do app com compatibilidade com módulos de recursos, você pode
implantar o app em um dispositivo conectado, como faria normalmente, selecionando
Run > Run na barra de menus. Ou clicando em Run na
barra de ferramentas.
Se o projeto do app incluir um ou mais módulos de recursos, você poderá escolher quais recursos incluir ao implantar o app modificando a configuração de execução/depuração existente da seguinte maneira:
- Selecione Run > Edit Configurations na barra de menus.
- No painel à esquerda da caixa de diálogo Run/Debug Configurations, selecione a configuração de Android App que você quer usar.
- Em Dynamic features to deploy, na guia General, marque a caixa ao lado de cada módulo de recursos que você quer incluir durante a implantação do app.
- Clique em OK.
Por padrão, o Android Studio não implementa seu app usando pacotes de apps. Em vez disso, o ambiente de desenvolvimento integrado compila e instala no dispositivo APKs que são otimizados para a velocidade de implantação, não para o tamanho do APK. Para configurar o Android Studio para compilar e implantar APKs e experiências instantâneas a partir de um pacote de apps, modifique sua configuração de execução/depuração.
Outros recursos
Para saber mais sobre o uso de módulos de recursos, experimente os recursos a seguir.
Postagens do blog
- Novos recursos para desenvolver, lançar e expandir seus negócios no Google Play (link em inglês)
- As atualizações mais recentes do Android App Bundle, incluindo a API de outros idiomas (link em inglês)
- Plaid : uma história de modularização (link em inglês)