Configurar o envio no momento da instalação

Os módulos de recursos permitem separar determinados recursos do módulo base do app e os incluir no seu pacote de app. 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 já existente do app. Portanto, analise atentamente quais recursos do seu app seriam mais beneficiados com a disponibilização para usuários on demand.

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, os módulos de recursos configurados para entrega no momento da instalação podem ser desinstalados mais tarde, se não forem mais necessários. Para isso, eles precisam ser configurados como removíveis.

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 do app, eles só podem ser adicionados a projetos de apps já existentes.

Para adicionar um módulo de recursos ao projeto do app usando o Android Studio, faça o seguinte:

  1. Abra o projeto do app no ambiente de desenvolvimento integrado.
  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 a opção Base application module para o projeto do seu app.
    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 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.
    3. 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. 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 base.
  5. Clique em Next.
  6. Na seção Module Download Options, faça o seguinte:

    1. Use a opção Module title para especificar o título do módulo em até 50 caracteres. O módulo base 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 string 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>
      

      Observação: se você ativar a redução de recursos, por exemplo, para builds de lançamento, o redutor pode remover o recurso de string de título do módulo, se o código no módulo base não o referencia. Para garantir que o recurso de string permaneça na saída do build, inclua-o em um arquivo keep de recursos personalizado.

    2. 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 possa ser transferido por download após a instalação do app, leia Configurar a entrega sob demanda.

    3. 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 anterior e seja incluído em vários APKs. Isso significa que você pode omiti-lo em dispositivos que não oferecem suporte ao download e à 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>
      
  7. Clique em Concluir.

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.

Tornar um módulo de tempo de instalação removível

Pode ser útil criar módulos de recursos para entrega no momento da instalação que tenham a opção de serem desinstalados posteriormente, se não forem mais necessários. Por exemplo, para reduzir o tamanho de instalação do app, é possível modularizar o conteúdo necessário para treinamento ou integração e, em seguida, desinstalar o módulo de recurso usando a API Play Core depois que o usuário estiver pronto para usar o app.

Por padrão, os módulos de tempo de instalação não são removíveis. Para marcar um módulo como removível e permitir que ele seja desinstalado, adicione a tag removable e defina o valor como true:

<dist:module ... >
  <dist:delivery>
      <dist:install-time>
          <dist:removable dist:value="true"/>
      </dist:install-time>
  </dist:delivery>
</dist:module>