Configurar entrega na instalação

Os módulos de recursos dinâmicos permitem separar determinados recursos e funcionalidades do módulo base do seu app e incluí-los no pacote de apps. Por meio do Dynamic Delivery, você pode personalizar as opções de entrega para controlar quando e como os dispositivos que executam o Android 5.0 (API de nível 21) ou posterior fazem o download dos recursos do app.

Lembre-se de que esse tipo de modularização requer mais esforço e, possivelmente, o refatoramento do código já existente do seu app. Por isso, considere atentamente as funcionalidades do app que beneficiariam a maioria dos usuários se estivessem disponíveis on demand.

Se você quiser modularizar gradualmente os recursos do app ao longo do tempo, sem alterar o comportamento dele ou personalizar as opções avançadas de entrega, poderá fazer isso criando módulos de recursos dinâmicos configurados para entrega na instalação. Ou seja, você pode modularizar um recurso como um recurso dinâmico, mas não ativar opções avançadas para que ele esteja disponível quando um usuário instalar seu app.

Além disso, pode ser útil criar recursos dinâmicos configurados para a 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 seu app, você pode modularizar o conteúdo necessário para treinamento ou integração e desinstalar o módulo de recurso dinâmico depois que estiver tudo configurado para o uso do app.

Esta seção descreve como criar um módulo de recurso dinâmico para entrega na instalação. Antes de começar, verifique se você está usando o Android Studio 3.3 ou versão posterior e o Android Gradle Plugin 3.3.0 ou versão posterior.

Configurar um novo módulo para entrega na instalação

A maneira mais fácil de criar um novo módulo de recursos dinâmicos é usando o Android Studio 3.3 ou versão posterior. Como os módulos de recursos dinâmicos têm uma dependência inerente ao módulo base do app, você só pode adicioná-los a projetos de app já existentes.

Para adicionar um módulo de recursos dinâmicos ao projeto do seu app usando o Android Studio, proceda da seguinte forma:

  1. Abra o projeto do seu app no ambiente de desenvolvimento integrado, caso ainda não tenha feito isso.
  2. Selecione File > New > New Module na barra de menus.
  3. Na caixa de diálogo Create New Module, selecione Dynamic Feature Module e clique em Next.
  4. Na seção Configure your new module, faça o seguinte:
    1. No menu suspenso, selecione o módulo base para o projeto do seu app, em Base application module.
    2. 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 Gradle no seu arquivo de configurações do Gradle. Quando você cria seu pacote de apps, o Gradle usa o último elemento do nome do subprojeto para injetar o atributo <manifest split> no manifest do módulo de recursos dinâmicos.
    3. Em package name, 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.
    4. Em Minimum API level, selecione o nível mínimo de API com o qual você quer que o módulo seja compatível. Esse valor precisa corresponder ao do módulo base.
  5. Clique em Next.
  6. Na seção Configure On-Demand Options, desmarque a caixa ao lado de Enable on-demand. Se você quiser saber como criar um recurso dinâmico que pode ser transferido por download após a instalação do app, leia configurar a entrega on demand.
  7. Clique em Finish.

Depois que 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 do app padrão.

Configuração de compilação do módulo de recurso dinâmico

Quando você cria um novo módulo de recurso dinâmico 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 dynamic feature module.
    // The plugin includes the Gradle tasks and properties required to configure and build
    // an app bundle that includes your dynamic 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 dinâmico. As seções a seguir descrevem as propriedades que você precisa ou não incluir na configuração de compilação do módulo de recurso dinâmico.

O que não incluir na configuração de compilação do módulo de recurso dinâmico

Como cada módulo de recurso dinâmico 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 dinâmico:

  • 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 seu projeto de app somente a partir da configuração de compilação do módulo base. Por isso, você precisa omitir essa propriedade dos módulos de recursos dinâmicos. No entanto, você pode especificar outras regras do ProGuard para cada módulo de recurso dinâmico.
  • versionCode e versionName: 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 arquivo build.gradle do seu módulo dinâmico.

Estabelecer uma relação com o módulo básico

Quando o Android Studio cria seu módulo de recurso dinâmico, ele fica visível para o módulo base adicionando a propriedade android.dynamicFeatures ao arquivo build.gradle do módulo base, conforme mostrado abaixo:

// In the base module’s build.gradle file.
    android {
        ...
        // Specifies dynamic 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 base como uma dependência do módulo de recurso dinâmico, conforme mostrado abaixo:

// In the dynamic 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 de compilação do módulo base possa ativar a redução de código no projeto do app, você pode fornecer regras personalizadas do ProGuard com cada módulo dinâmico usando a propriedade proguardFiles, como mostrado abaixo.

android.buildTypes {
         release {
             // You must use the following property to specify additional ProGuard
             // rules for dynamic 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 dinâmico possa especificar um novo conjunto de regras, essas regras se aplicam a todos os módulos no projeto do app.

Implantar o app

Enquanto estiver desenvolvendo seu app com compatibilidade com Dynamic Delivery, você poderá 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 seu app incluir um ou mais módulos de recursos dinâmicos, você poderá escolher quais recursos dinâmicos incluir ao implantar o app modificando a configuração de execução/depuração já existente da seguinte maneira:

  1. Selecione Run > Edit Configurations na barra de menus.
  2. No painel esquerdo da caixa de diálogo Run/Debug Configurations, selecione a configuração desejada do Android App.
  3. Em Dynamic features to deploy, na guia General, marque a caixa ao lado de cada módulo de recursos dinâmicos que você queira incluir ao implantar o app.
  4. 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 cria e instala no seu dispositivo APKs que são otimizados para a velocidade de implantação em vez de para o tamanho do APK. Para configurar o Android Studio para criar e implantar APKs e experiências instantâneas de um pacote de apps, modifique sua configuração de execução/depuração.

Outros recursos

Para saber mais sobre como usar o Dynamic Delivery, tente usar os recursos a seguir.

Postagens do blog (em inglês)

Vídeos (em inglês)