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

Definir seu build para APKs de configuração

Para reduzir o tamanho do APK do app no dispositivo de cada usuário, defina seu build para APKs de configuração (ou APKs de config.). Isso coloca o código DEX do app e os recursos independentes de dispositivo em um único APK, e cada conjunto de recursos e código nativo dependentes de dispositivo em APKs separados. Em seguida, os dispositivos solicitam apenas os APKs necessários para executar seu app. Isso permite que você reduza o tamanho do download do app criando APKs que contenham arquivos para densidades de tela específicas, ABIs e/ou idiomas.

Os APKs de configuração são semelhantes aos vários APKs, com algumas diferenças importantes:

  • No momento, os vários APKs só estão disponíveis para apps instalados, e os APKs de configuração são apenas para apps instantâneos.
  • Com os vários APKs, um APK é criado para cada combinação de atributos. Com os APKs de configuração, há um APK básico com código DEX independente de dispositivo e um APK para o valor de cada dimensão variável, ou seja, um APK por idioma, densidade ou ABI compatível. Por exemplo, imagine um app com variação de densidade e idioma, compatível com quatro densidades e três idiomas. Com os vários APKs, o desenvolvedor enviaria 3 * 4 = 12 APKs. Com os APKs de configuração, ele enviaria 1 (APK básico) + 3 + 4 = 8 APKs. Com os vários APKs, exatamente um APK é enviado para qualquer dispositivo. Com os APKs de configuração, o dispositivo recebe um APK básico e, possivelmente, um ou mais APKs de recursos em cada dimensão compatível (atualmente, idioma, densidade e ABI).
  • Com os vários APKs, os códigos de versão são usados para selecionar entre diversos APKs compatíveis para um determinado dispositivo. Os APKs de configuração não usam uma ordem especificada pelo desenvolvedor. A ordem é determinada pelo destino dos APKs disponíveis.
  • Os APKs de configuração são compatíveis com a nova dimensão de destino language. Os APKs múltiplos não são.

Pré-requisitos

Antes de definir seu build para APKs de configuração, siga as etapas a seguir para garantir que ele esteja pronto e verifique se a configuração necessária para a ferramenta está definida no Android Studio:

  • Defina a versão mínima do SDK do módulo do app instantâneo como 21 ou mais recente.
  • Use o Android Studio 3.0 ou posterior.

Definir seu build para APKs de configuração

Para configurar seu build para APKs de configuração com base em idiomas, adicione um bloco de idiomas (link em inglês) para o bloco splits de seu módulo de recurso e especifique generatePureSplits = true no bloco android. Para ver mais informações sobre como configurar o bloco splits, consulte Configurar a build para vários APKs.

android {
  ...
  generatePureSplits = true
  splits {
    abi {
      enable = true
    }
    density {
      enable = true
    }
    language {
      enable = true
      include "es-rMX", "zh", "en"
    }
  }
}

Os valores de idioma estão no formato descrito em Fornecimento de recursos alternativos.

Exibir APKs de configuração

Diferente do uso de vários APKs, os desenvolvedores não definem uma ordem para vários APKs de configuração equivalentes. Então, como o Google Play decide qual será exibido?

Para a ABI, o Google Play escolhe entre os APKs compatíveis usando uma ordem fixa, que é a mesma para todos os dispositivos. A ordem é x86_64, x86, mips64, mips, arm64-v8a, armeabi-v7a, armeabi. Por exemplo, se um dispositivo for compatível com x86 e armeabi-v7a e os APKs estiverem disponíveis para ambos, o APK x86 será exibido (junto ao básico).

Para a densidade, o Google Play escolhe o APK mais próximo da densidade do dispositivo entre aqueles disponíveis.

A seleção de APKs por idioma é mais complexa.

Questões específicas da segmentação por idioma

Pode-se esperar que o Play tente usar uma correspondência exata da localidade do usuário. Se for en-GB, talvez ele exiba um APK voltado para en-GB, se disponível. Caso contrário, retornará para en. Essa abordagem teria dois problemas:

  1. Não há exigência de que um APK de configuração tenha que conter traduções de todas as strings, assim como não há esse requisito para um arquivo strings.xml. É aceitável, inclusive comum, adicionar um idioma para apenas uma ou algumas strings. Por exemplo, en/strings.xml pode conter "carro" e "caminhonete", e en-rGB/strings.xml pode conter apenas "caminhão". Portanto, assim como o conjunto necessário de traduções para qualquer dispositivo pode estar em vários arquivos strings.xml, esses arquivos podem estar contidos em vários APKs de configuração.
  2. Os dispositivos Android têm gráficos substitutos muito variados. As versões do Android podem mudar o gráfico substituto. Por exemplo, consulte o guia Idioma e localidade. Além disso, os OEMs personalizam a ordem de substituição. Por exemplo, se “zh” prefere “zh-TW” ou “zh-CN”, depende do OEM. O Google Play nem sempre sabe qual é a ordem de substituição usada pelo dispositivo solicitante.

Ele soluciona os problemas exibindo todos os APKs de configuração voltados para idiomas cuja subtag de idioma (a parte antes do traço) corresponde às das localidades do usuário selecionadas. Esse processo se baseia na observação de que algoritmos substitutos geralmente não fazem substituição entre os idiomas. Veja um exemplo:

A localidade do usuário é de-CH.
Os APKs disponíveis são de, de-CH, de-AT e fr.
O Google Play exibe de, de-CH e de-AT, mas não fr.

O Google Play também processa alguns casos conhecidos em que os idiomas são agrupados, mesmo contendo subtags de idioma incompatíveis, por exemplo, fil/tag.

O agrupamento é feito pelo Google Play no momento da exibição e não requer ações da parte do desenvolvedor.

Solução de problemas e perguntas frequentes

  • O Gradle não produziu APKs de configuração e, em vez disso, gerou a seguinte mensagem:
    Variant ..., MinSdkVersion 18 is too low (<21) to support pure splits,
    reverting to full APKs
    

    Especifique minSdkVersion = 21 no arquivo build.gradle do seu módulo de app instantâneo

  • O plug-in do Gradle gera a seguinte mensagem:
    > Configure project :base
    Pure splits are not supported by PlayStore yet.
    

    Esse é um problema conhecido. Ignore essa mensagem.

  • Como os APKs de configuração afetam o limite de 4 MB?

    O tamanho do recurso é calculado por meio da soma do tamanho do APK de recurso, do tamanho do APK de recursos básico e do maior conjunto possível de APKs de configuração que poderiam ser entregues a um dispositivo. Por exemplo, se um recurso tiver três APKs de idioma no APK básico, dois APKs de densidade no APK básico e dois APKs de densidade no APK de recursos, o tamanho final do recurso será calculado pela soma do tamanho do APK de recursos, do tamanho do APK básico, dos maiores APKs de idioma e de densidade do APK básico e do maior APK de densidade do APK de recursos.

Problemas conhecidos

  • O Gradle não consegue criar APKs de ABI para alguns builds incrementais (https://issuetracker.google.com/69680755, link em inglês). Esse problema pode ser resolvido com a limpeza e uma nova tentativa de criação.
  • Atualmente, as ferramentas de compilação não criam APKs de configuração multidimensionais. Por exemplo, um projeto pode conter um recurso em res/drawable-fr-xhdpi para dispositivos xhdpi em francês, mas o Gradle não pode colocar esse recurso em APKs de configuração. Esses recursos são colocados nos APKs básico ou de recursos.