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.

Na maioria dos projetos de app, não é necessário muito esforço para criar pacotes de apps compatíveis com a veiculação de APKs otimizados. Por exemplo, se você já organiza o código e os recursos do app de acordo com as convenções estabelecidas, basta criar Android App Bundles assinados usando o Android Studio ou a linha de comando e enviá-los para o Google Play. A veiculação otimizada do APK torna-se um benefício automático.

Ao usar o formato de pacote de apps para publicá-lo, você também tem a opção de usar o Envio de recursos do Google Play, que permite adicionar módulos de recursos ao projeto do app. 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.

Os desenvolvedores de jogos que publicam apps com pacotes podem usar o Play Asset Delivery: a solução do Google Play para fornecer grandes quantidades de recursos de jogos que oferecem aos desenvolvedores métodos de envio flexíveis e alto desempenho.

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.

Nesta página, descrevemos as etapas para começar a criar Android App Bundles e alguns conceitos importantes relacionados a pacotes de apps.

Primeiros passos

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 de compilação. 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.

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 pacote de apps no Play Console para testar ou publicar o app.

Para criar pacotes de apps, siga estes passos:

  1. Faça o download do Android Studio 3.2 ou versão mais recente. Essa é a maneira mais fácil de adicionar módulos de recursos e criar pacotes de apps.

  2. Adicione compatibilidade com o envio de recursos do Google Play incluindo um módulo base, organizando o código e os recursos para APKs de configuração e, opcionalmente, adicionando módulos de recursos.

  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 no Play Console.

  6. Publique seu pacote de apps no Google Play.

Para criar pacotes de apps que incluam pacotes de recursos, consulte Sobre o Play Asset 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 com a biblioteca Play Core

Caso seu app inclua módulos de recursos, será necessário usar a biblioteca Play Core para solicitar, monitorar e gerenciar downloads de módulos de recursos. 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 de um módulo de recurso (e seus APKs de configuração) sob demanda, 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 que podem ser baixados 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 ou exibir seu app com os Android App Bundles. Se você tiver problemas que não estão descritos abaixo, informe um bug.

  • 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, não faça referência a 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 do módulo base do app, a mesma variante não será selecionada automaticamente para módulos de recursos 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 que entram em conflito com as configurações dos módulos base ou outros. Por exemplo, você pode definir buildTypes.release.debuggable = true no módulo base e defini-lo como false em um módulo de recurso. 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 herdam algumas configurações de compilação do módulo base. Portanto, é necessário compreender quais configurações precisam ser mantidas e quais precisam ser omitidas na configuração de compilação do módulo de recurso.
  • O download de módulos de recursos exige que os dispositivos tenham uma versão recente do app Play Store instalada. Assim, se o app incluir módulos de recursos, 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.

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, 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 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 recebe o nome especificado pelo atributo split no manifesto do módulo. Para saber mais, leia sobre o manifesto do módulo de recursos.
  • 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 a Visão geral do Play 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.

Visão geral dos APKs divididos

Um componente fundamental para a exibição de apps otimizados é o mecanismo de APK dividido disponível no Android 5.0 (API de nível 21) e versões mais recentes. Os APKs divididos são muito semelhantes aos APKs comuns: eles incluem bytecode DEX compilado, recursos e um manifesto do Android. No entanto, a plataforma Android pode tratar vários APKs divididos instalados como um único app. Ou seja, você pode instalar vários APKs divididos que têm acesso a códigos e recursos comuns e são exibidos como um app instalado no dispositivo.

A vantagem dos APKs divididos é a capacidade de dividir um APK monolítico, ou seja, um APK que inclui código e recursos para todos os elementos e configurações de dispositivos compatíveis com seu app, em pacotes menores e discretos instalados no dispositivo do usuário, conforme necessário.

Por exemplo, um APK dividido pode incluir o código e os recursos de outra funcionalidade de que apenas alguns dos seus usuários precisam, enquanto outro APK dividido inclui recursos apenas para um idioma ou densidade de tela específico. Cada APK dividido é transferido por download e instalado mediante a solicitação do usuário ou quando exigido pelo dispositivo.

O conteúdo a seguir descreve os diferentes tipos de APK que podem ser instalados juntos em um dispositivo para formar sua experiência completa com o app. Você saberá como configurar o projeto do seu app para oferecer compatibilidade com esses APKs nas próximas seções desta página.

  • APK básico: contém o código e os recursos que todos os outros APKs divididos podem acessar e oferece a funcionalidade básica para seu app. Quando um usuário solicita o download do seu app, esse APK é transferido por download e instalado primeiro. Isso ocorre porque somente o manifesto do APK básico contém uma declaração completa dos serviços, provedores de conteúdo, permissões, requisitos de versão da plataforma e dependências do app nos recursos do sistema. O Google Play gera o APK básico para seu app a partir do módulo de app (ou básico) do projeto. Caso sua preocupação esteja relacionada à redução do tamanho inicial de download do app, é importante lembrar que todo o código e os recursos incluídos neste módulo estão presentes no APK básico.
  • APKs de configuração: cada um desses APKs inclui bibliotecas nativas e recursos para uma densidade de tela, arquitetura de CPU ou idioma específicos. Quando o usuário faz o download do seu app, o dispositivo transfere e instala apenas os APKs de configuração destinados ao dispositivo. Cada APK de configuração é uma dependência de um APK de base ou de um APK de módulo de recurso. Ou seja, eles são transferidos por download e instalados com o APK a que disponibilizam código e recursos. Diferentemente dos módulos básicos e de recursos, você não cria um módulo separado para os APKs de configuração. Se você usa práticas padrão para organizar recursos alternativos e específicos da configuração para seus módulos básicos e de recursos, o Google Play gera automaticamente APKs de configuração para você.
  • APKs de módulos de recursos: cada um desses APKs contém código e recursos para uma funcionalidade do seu app que você modulariza usando módulos de recursos. Depois, é possível personalizar como e quando esse recurso será transferido por download em um dispositivo. Por exemplo, usando a biblioteca Play Core, os recursos podem ser instalados sob demanda depois que o APK básico for instalado no dispositivo, para oferecer outras funcionalidades para o usuário. Imagine um app de chat que faz o download do recurso de captura e envio de fotos e o instala somente quando o usuário pede para usar essa funcionalidade. Como os módulos de recursos podem não estar disponíveis no momento da instalação, é importante incluir todos os códigos e recursos comuns no APK básico. Ou seja, o módulo de recursos presume que o código e os recursos somente do APK básico estarão disponíveis no momento da instalação. O Google Play gera APKs de módulos de recursos para o app com base nos módulos de recursos do projeto.

Pense em um app com três módulos de recursos e compatibilidade com várias configurações de dispositivo. A Figura 1 abaixo ilustra o que seria a árvore de dependências dos diversos APKs do app. Observe que o APK básico forma o topo da árvore, e todos os outros APKs dependem do APK básico. Se quiser saber como os módulos desses APKs são representados em um Android App Bundle, consulte Formato do Android App Bundle.

O APK básico está no topo da árvore, e os APKs do módulo de recursos têm
uma dependência. APKs de configuração, que incluem
código e recursos específicos da configuração do dispositivo para base e cada
APK de módulo de recursos, formam os nós da árvore de dependência.

Figura 1. Árvore de dependência de um app veiculado por meio de APKs divididos.

Não é necessário compilar esses APKs por conta própria. O Google Play faz isso por você usando um único pacote de apps assinado que você cria com o Android Studio. Para saber mais sobre o formato do pacote de apps e como criar um, consulte Criar, implantar e fazer upload de Android App Bundles.

Dispositivos com Android 4.4 (API nível 19) e anteriores

Como os dispositivos com o Android 4.4 (API nível 19) e anteriores não são compatíveis com download e instalação de APKs divididos, o Google Play oferece a esses dispositivos um único APK, denominado multi-APK, otimizado para a configuração do dispositivo. Ou seja, os multi-APKs representam a experiência completa do seu app, mas não incluem código e recursos desnecessários, como aqueles para outras densidades de tela e arquiteturas de CPU.

No entanto, eles incluem recursos para todos os idiomas compatíveis com seu app. Isso permite, por exemplo, que o usuário altere a configuração de idioma preferencial do app sem precisar fazer o download de outro multi-APK.

Em multi-APKs, não é possível fazer o download de módulos de recursos sob demanda posteriormente. Para incluir um módulo de recurso nesse APK, você precisa desativar a opção On-demand ou ativar Fusing durante a criação do módulo de recursos.

Com os pacotes de apps, não é preciso criar, assinar, fazer upload nem gerenciar APKs para cada configuração de dispositivo compatível com seu app. Você ainda cria e faz upload de um único pacote de apps para todo o app, e o Google Play cuida do resto para você. Sendo assim, independentemente de você pretender ou não oferecer compatibilidade com dispositivos com o Android 4.4 ou versões anteriores, o Google Play oferece um mecanismo de veiculação flexível para você e seus usuários.

Outros recursos

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

Amostras

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 a criar o seu rapidamente usando o Android Studio. Esse codelab também mostra como testar seus pacotes de apps usando bundletool.
  • Módulos sob demanda, que ajuda a criar um app que faz o download e instala módulos de recursos sob demanda.

Postagens do blog

Vídeos