A Visualização do desenvolvedor para Android 11 já está disponível. Teste e compartilhe seu feedback.

Sobre os Android App Bundles

Um Android App Bundle é um novo formato de upload que inclui todos os recursos e códigos compilados do seu app, mas que tem o APK gerado e assinado pelo Google Play.

O novo modelo de exibição de apps do Google Play, chamado de Dynamic Delivery, usa seu pacote de apps para gerar e disponibilizar APKs otimizados para a configuração do dispositivo de cada usuário para que eles façam o download apenas do código e dos recursos necessários à execução do app. Você não precisa mais criar, assinar e gerenciar vários APKs para oferecer 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 a instalação do app pela primeira vez. Com a Biblioteca Play Core, seu app poderá solicitar o download desses módulos posteriormente como APKs de recursos dinâmicos e, por meio da Dynamic Delivery, o Google Play exibe para o dispositivo apenas o código e os recursos desse módulo.

Assista o vídeo a seguir para ter uma visão geral do motivo para você fazer upload do app usando os Android App Bundles.

A publicação com os Android App Bundles também aumenta o limite de tamanho do app para 150 MB sem precisar usar arquivos de expansão de APK. Lembre-se de que esse limite se aplica somente ao tamanho real do download, não ao tamanho de publicação. Assim, os usuários podem fazer o download de apps com até 150 MB de tamanho e, com a Dynamic Delivery, todo esse armazenamento é usado apenas para o código e os recursos necessários para executar o app. Quando você combina isso com a compatibilidade com bibliotecas nativas descompactadas, os apps maiores, como jogos, podem reduzir o uso do disco e aumentar a retenção de usuários.

Se você estiver usando o Android Studio 3.2 ou uma versão posterior, a maioria dos projetos de apps exigirá pouco esforço para oferecer compatibilidade com a Dynamic Delivery, e você poderá criar um Android App Bundle com apenas alguns cliques. No entanto, a adição de módulos de recursos dinâmicos exige um pouco mais de esforço e a possível refatoração 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 à 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 posteriores. 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.

O formato Android App Bundle

Um Android App Bundle é um arquivo (com a extensão .aab) do qual você faz upload para o Google Play para oferecer compatibilidade com a Dynamic Delivery.

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 exibidos 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 e dois módulos de recursos dinâmicos.

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.
  • 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 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 qual versão das ferramentas de criação foi 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 os 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, esse é um formato de upload que inclui todos os recursos e códigos compilados do seu app em um único artefato. Assim, depois que você fizer o upload do seu pacote de apps assinado, o Google Play terá tudo o que precisa para criar e assinar os APKs do app e exibi-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 upload do seu pacote de apps para o Play Console para testar ou publicar o 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.

Observação sobre os Instant Apps

No Android Studio 3.2 ou em versões posteriores, é 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 do download compactado

Embora a publicação com Android App Bundles ajude os usuários a instalar o app com o menor download possível, os downloads compactados são limitados a 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.

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 exibir seu app usando o Dynamic Delivery. Se você tiver problemas que não estão descritos abaixo, informe um bug (link em inglês).

  • 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.
  • Como as instalações de apps podem exigir o download de mais de um APK, como o APK base e alguns dos APKs de configuração, você precisa tomar cuidado ao transferir manualmente os APKs do app para um dispositivo, ação também conhecida como sideload. Do contrário, o app pode enfrentar problemas no ambiente de execução devido a códigos e recursos ausentes.
  • No momento, o Google Play inclui todo o código e os recursos de um módulo de recurso dinâmico em um único APK. Em breve, para dispositivos com Android 5.0 (API de nível 21) ou versões posteriores, a exibição será otimizada para usar APKs de configuração.
  • 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), que 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 (link em inglês), que ajuda a criar um app que faz o download de recursos dinâmicos sob demanda e os instala.

Postagens do blog

Vídeos