O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Sobre os Android App Bundles

Um Android App Bundle é um formato de publicação que inclui todos os recursos e códigos compilados do seu app e adia a geração e a assinatura do APK no Google Play.

O Google Play usa o pacote de apps para gerar e disponibilizar APKs otimizados para cada configuração de dispositivo. Assim, somente o código e os recursos necessários para um dispositivo específico são salvos para executar o app. Não é mais necessário criar, assinar e gerenciar vários APKs para otimizar a compatibilidade com dispositivos diferentes, e os usuários recebem downloads menores e mais otimizados.

Além disso, é possível adicionar módulos de recursos dinâmicos ao projeto do app e incluí-los no pacote de apps. Esses módulos contêm funcionalidades e recursos que você pode decidir não incluir quando os usuários fizerem o download e instalarem seu app pela primeira vez. Com a biblioteca Play Core, seu app poderá solicitar o download desses módulos posteriormente. O Google Play exibirá apenas o código e os recursos desse módulo para o dispositivo. Ao combinar isso com a compatibilidade com bibliotecas nativas não compactadas, apps maiores (como jogos) podem reduzir os requisitos de armazenamento e aumentar a retenção de usuários.

Assista o vídeo a seguir para ter uma visão geral do motivo para publicar seu app usando os Android App Bundles.

Com o Android App Bundle, a restrição de tamanho para download compactado agora é de 150 MB. Não é possível usar o pacote de apps com arquivos de expansão APK.

Se você estiver usando o Android Studio 3.2 ou uma versão mais recente, poderá criar um Android App Bundle com apenas alguns cliques. No entanto, a adição de módulos de recursos dinâmicos exigirá mais esforço, porque pode envolver a refatoração de partes do app.

Esta página descreve as etapas para começar a criar Android App Bundles, além de alguns conceitos importantes relacionados a pacotes de apps e a Dynamic Delivery.

Primeiros passos

Para criar pacotes de apps e oferecer compatibilidade com Dynamic Delivery, siga estas etapas:

  1. Faça o download do Android 3.2 ou versões mais recentes. Essa é a maneira mais fácil de adicionar módulos de recursos dinâmicos e criar pacotes de apps.

  2. Adicione compatibilidade com o Dynamic Delivery incluindo um módulo base, organizando o código e os recursos para APKs de configuração e, opcionalmente, adicionando módulos de recursos dinâmicos.

  3. Crie um Android App Bundle usando o Android Studio. Você também pode implantar o app em um dispositivo conectado a partir de um pacote de apps modificando sua configuração de execução/depuração e selecionando a opção para implantar o APK do pacote de apps. Lembre-se de que usar essa opção resultará em tempos de compilação maiores em comparação com a criação e implantação de apenas um APK.

  4. Teste seu Android App Bundle usando-o para gerar APKs que você implantará em um dispositivo.

  5. Inscreva-se na Assinatura de apps do Google Play. Caso contrário, não será possível fazer upload do seu pacote de apps para o Play Console.

  6. Publique seu pacote de apps no Google Play.

Para criar pacotes de apps que incluem pacotes de recursos, consulte Sobre a Dynamic Asset Delivery.

O formato Android App Bundle

Um Android App Bundle é um arquivo (com a extensão de arquivo .aab) enviado ao Google Play.

Os pacotes de apps são binários assinados que organizam o código e os recursos do seu app em módulos, conforme ilustrado na Figura 1. O código e os recursos de cada módulo são organizados de forma semelhante ao que você encontraria em um APK. Isso faz sentido, porque cada um desses módulos pode ser gerado como APKs separados. Em seguida, o Google Play usa o pacote de apps para gerar os diversos APKs enviados aos usuários, como o APK de base, os APKs de recursos dinâmicos, os APKs de configuração e, no caso de dispositivos que não são compatíveis com APKs divididos, multi-APKs. Os diretórios coloridos em azul, como drawable/, values/ e lib/, representam o código e os recursos que o Google Play usa para criar APKs de configuração para cada módulo.

Os pacotes de apps organizam seu app em diretórios, cada um representando um
        módulo. Dentro de cada diretório de módulo, o código e os recursos são organizados de
         forma semelhante a um APK típico.

Figura 1. O conteúdo de um Android App Bundle com um módulo base, dois módulos de recursos dinâmicos e dois pacotes de recursos.

A lista a seguir descreve mais detalhadamente alguns dos arquivos e diretórios do pacote de apps:

  • base/, feature1/ e feature2/: cada um desses diretórios de nível superior representa um módulo diferente do seu app. O módulo base está sempre em um diretório base do pacote de apps. No entanto, o diretório de cada módulo de recurso dinâmico recebe o nome especificado pelo atributo split no manifesto do módulo. Para saber mais, leia sobre o manifesto do módulo de recursos dinâmicos.
  • asset_pack_1/ e asset_pack_2/: para apps ou jogos grandes e exigentes graficamente, você pode modificar recursos em pacotes de recursos. Os pacotes de recursos são ideais para jogos devido aos limites de tamanho maiores. É possível personalizar como e quando cada pacote de recursos é transferido por download para um dispositivo de acordo com três modos de transferência: install-time, fast-follow e on-demand. Todos os pacotes de recursos são hospedados e enviados no Google Play. Para saber mais sobre como adicionar pacotes de recursos ao seu pacote de apps, consulte Sobre o Dynamic Asset Delivery.
  • BUNDLE-METADATA/: esse diretório inclui arquivos de metadados que contêm informações úteis para ferramentas ou app stores. Esses arquivos de metadados podem incluir mapeamentos do ProGuard, além da lista completa dos arquivos DEX do app. Os arquivos neste diretório não são empacotados nos APKs do app.
  • Arquivos em buffer de protocolo do módulo (*.pb): esses arquivos fornecem metadados que ajudam a descrever o conteúdo de cada módulo de app para as app stores, como o Google Play. Por exemplo, BundleConfig.pb fornece informações sobre o próprio pacote, como a versão das ferramentas de criação usada para criar o pacote, e native.pb e resources.pb descrevem o código e os recursos em cada módulo, o que é útil quando o Google Play otimiza APKs para diferentes configurações de dispositivos.
  • manifest/: diferentemente dos APKs, os pacotes de apps armazenam o arquivo AndroidManifest.xml de cada módulo nesse diretório separado.
  • dex/: diferentemente dos APKs, os pacotes de apps armazenam os arquivos DEX de cada módulo nesse diretório separado.
  • res/, lib/ e assets/: esses diretórios são idênticos aos de um APK típico. Quando você faz upload do pacote de apps, o Google Play inspeciona esses diretórios e pacotes e seleciona somente os arquivos que satisfazem a configuração do dispositivo de destino, preservando os caminhos de arquivos.
  • root/: esse diretório armazena arquivos que são posteriormente realocados para a raiz de qualquer APK que inclua o módulo em que o diretório está localizado. Por exemplo, o diretório base/root/ de um pacote de apps pode incluir recursos baseados em Java que seu app carrega usando Class.getResource(). Esses arquivos são posteriormente realocados para o diretório raiz do APK base do app e para todos os multi-APKs gerados pelo Google Play. Os caminhos dentro desse diretório também são preservados. Ou seja, os diretórios (e os subdiretórios deles) também são realocados para a raiz do APK.

Criar e implantar Android App Bundles

Um pacote de apps é diferente de um APK porque não é possível implantar um pacote em um dispositivo. Em vez disso, é um formato de publicação que inclui todos os recursos e códigos compilados do seu app em um único artefato. Assim, depois que você fizer upload do seu pacote de apps assinado, o Google Play terá tudo o que precisa para criar e assinar os APKs do app e enviá-los aos usuários por meio do Dynamic Delivery.

Se você estiver usando o Android Studio, poderá criar seu projeto como um pacote de apps assinado em apenas alguns cliques. Se você não estiver usando o ambiente de desenvolvimento integrado, poderá criar um pacote de apps na linha de comando. Em seguida, faça o upload do pacote de apps para o Play Console para testar ou publicar seu app com o Dynamic Delivery.

Testar o pacote de apps

Depois de criar seu Android App Bundle, você precisará testar como o Google Play o usará para gerar APKs e como esses APKs se comportarão quando forem implantados em um dispositivo.

Para testar o pacote de apps, use um dos seguintes métodos:

Download de módulos de recursos dinâmicos com a Biblioteca Play Core

Se o app inclui recursos dinâmicos, ele precisa usar a Biblioteca Play Core para solicitar, monitorar e gerenciar os downloads de módulos de recursos dinâmicos. Para saber mais, acesse Download de módulos com a Biblioteca Play Core.

Se você quiser ver a biblioteca em ação, teste o app de amostra da Biblioteca Play Core (link em inglês).

Observação sobre os Instant Apps

No Android Studio 3.2 ou em versões mais recentes, é possível adicionar uma experiência instantânea a um pacote de apps, contanto que o tamanho do app seja pequeno o suficiente. Para ver detalhes sobre os limites de tamanho para os diferentes tipos de experiências instantâneas que você pode criar, consulte Visão geral do Google Play Instant.

Restrição de tamanho de download compactado

A publicação com Android App Bundles ajuda os usuários a instalar seu app com os menores downloads possíveis e aumenta o limite de tamanho de download compactado para 150 MB. Ou seja, quando um usuário faz o download do seu app, o tamanho total dos APKs compactados exigidos para instalá-lo (por exemplo, APK base + APKs de configuração) precisa ser de, no máximo, 150 MB. Qualquer download subsequente, como o download sob demanda de um recurso dinâmico (e dos APKs de configuração dele), também precisa atender a essa restrição de tamanho de download compactado. Os pacotes de recursos não contribuem para esse limite de tamanho, mas têm outras restrições de tamanho.

Se o Play Console descobrir durante o upload que um dos possíveis downloads do app ou dos recursos sob demanda tem mais de 150 MB, você receberá um erro.

Lembre-se de que os Android App Bundles não são compatíveis com arquivos de expansão de APK (*.obb). Portanto, se você encontrar esse erro ao publicar seu pacote de apps, use um dos seguintes recursos para reduzir os tamanhos de download de APK compactados:

  • Ative todos os APKs de configuração definindo enableSplit = true para cada tipo de APK de configuração. Isso garante que os usuários façam o download apenas do código e dos recursos necessários para executar o app no dispositivo deles.
  • Reduza seu app removendo códigos e recursos não utilizados.
  • Siga as práticas recomendadas para reduzir o tamanho do app ainda mais.
  • Considere converter recursos que são usados apenas por alguns dos usuários em módulos de recursos dinâmicos que podem ser usados posteriormente, sob demanda. Lembre-se de que isso pode exigir certo nível de refatoração do seu app. Portanto, tente usar as outras sugestões descritas acima primeiro.

Problemas conhecidos

Veja a seguir os problemas conhecidos ao criar Android App Bundles ou disponibilizar seu app usando o Dynamic Delivery. Se você tiver problemas que não estão descritos abaixo, informe um bug (link em inglês).

  • As instalações parciais de apps transferidos por sideload (ou seja, apps que não são instalados por meio da Google Play Store e não têm um ou mais APKs divididos necessários) falham em todos os dispositivos certificados pelo Google e dispositivos com Android 10 (API de nível 29) ou mais recente. Ao fazer o download do seu app na Google Play Store, o Google garante que todos os componentes necessários estejam instalados.
  • Se você usa ferramentas que modificam dinamicamente as tabelas de recursos, os APKs gerados em pacotes de apps podem se comportar de maneira inesperada. Portanto, é recomendável desativar essas ferramentas ao criar um pacote de apps.
  • No manifesto de um módulo de recurso dinâmico, você não precisa referenciar recursos que não existem no módulo base. Isso acontece porque, quando o Google Play gera o APK base do seu app, ele mescla os manifestos de todos os módulos com o do APK base. Portanto, a vinculação de recursos será interrompida se o manifesto do APK base referenciar recursos que não existem nesse APK.
  • A partir do Android Studio 3.2 Canary 14, quando você mudar a variante de compilação para o módulo base do app, a mesma variante não será selecionada automaticamente para módulos de recursos dinâmicos que dependem do módulo base. Por isso, você pode receber um erro ao criar o app. Basta confirmar se você selecionou a mesma variante de compilação para o módulo base e para os outros módulos que dependem dele.
  • Atualmente, é possível configurar propriedades na configuração da compilação de um módulo de recurso dinâmico que entram em conflito com as propriedades dos módulos base ou outros. Por exemplo, você pode definir buildTypes.release.debuggable = true no módulo base, mas como false em um módulo de recurso dinâmico. Esses conflitos podem causar problemas na criação e no ambiente de execução. Lembre-se de que, por padrão, os módulos de recursos dinâmicos herdam algumas configurações da compilação do módulo base. Portanto, é necessário compreender quais configurações precisam ser mantidas e quais precisam ser omitidas na configuração da compilação do módulo de recurso dinâmico.
  • O download de módulos de recursos dinâmicos exige que os dispositivos tenham uma versão recente do app Play Store instalada. Assim, se o app incluir módulos de recursos dinâmicos, os downloads para uma porcentagem muito pequena de usuários poderão recorrer a um único multi-APK otimizado, com a mesma experiência de download para dispositivos com o Android 4.4 (API de nível 20) ou versões anteriores.

Outros recursos

Para saber mais sobre Android App Bundles, consulte os seguintes recursos.

Amostras

  • Amostra da API PlayCore (link em inglês), que demonstra o uso da API PlayCore para solicitar recursos dinâmicos e fazer o download deles.
  • Amostra de carregamento de código dinâmico (link em inglês): demonstra três abordagens diferentes para acessar o código com segurança a partir de um módulo de recursos dinâmicos instalado.

Codelabs

  • Seu primeiro Android App Bundle (link em inglês), um codelab que explica os princípios básicos dos Android App Bundles e mostra como começar rapidamente a criação do seu usando o Android Studio. Esse codelab também mostra como testar seus pacotes de apps usando bundletool.
  • Módulos sob demanda: ajudam a criar um app que faz o download de recursos dinâmicos sob demanda e os instala.

Postagens do blog

Vídeos