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

Configurar o módulo base

A maioria dos projetos de app não exige muito esforço para oferecer compatibilidade com os Android App Bundles. Isso porque o módulo que inclui o código e os recursos para o APK base do app é o módulo recebido por padrão, que você recebe quando cria um novo projeto de app no Android Studio. Ou seja, o módulo que aplica o plug-in de app abaixo ao arquivo build.gradle disponibiliza o código e os recursos para a funcionalidade básica do seu app.

// The standard application plugin creates your app's base module.
apply plugin: 'com.android.application'

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.

Além de oferecer as principais funcionalidades do app, o módulo base também disponibiliza várias das configurações de compilação e entradas de manifesto que afetam todo o projeto do app. Por exemplo, a assinatura do seu pacote de apps é determinada pelas informações incluídas no módulo base, e o controle de versões de todos os APKs do app é especificado no atributo versionCode no manifesto desse módulo. Outros aspectos importantes do módulo base são descritos abaixo.

Manifesto do módulo base

O manifesto para o módulo base do app é semelhante ao de qualquer outro módulo de app. 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, se você estiver pensando em adicionar módulos de recursos ao seu projeto de app, alguns aspectos precisam ser considerados no manifesto do APK base:

  • Como o APK base é sempre instalado primeiro, ele precisa fornecer o ponto de entrada principal para seu app. Ou seja, ele precisa declarar uma atividade com o seguinte filtro de intent:

    <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    
  • Inclua a compatibilidade com a biblioteca SplitCompat no manifesto para poder acessar o código e os recursos do módulo transferido por download. Para saber mais, leia Código de acesso e recursos de módulos transferidos por download.

  • Da mesma forma, em dispositivos com o Android 6.0 (API de nível 23) e anteriores, os apps precisam ser reiniciados antes da plataforma aplicar novas entradas do manifesto. Assim, se você precisar de determinadas permissões ou serviços assim que um módulo de recursos for transferido por download, inclua-os no manifesto do seu módulo base.

  • Os Android App Bundles incluem compatibilidade com bibliotecas nativas não compactadas. Ao criar seu app usando o Plug-in do Android para Gradle 3.6.0 ou versão mais recente, para reduzir o uso do disco para os usuários, o plug-in define por padrão o seguinte no manifesto do módulo básico:

    <application
        android:extractNativeLibs="false"
        ... >
    

Configuração da compilação do módulo básico

Para a maioria dos projetos de app existentes, não é necessário mudar nada na configuração de compilação do módulo básico. No entanto, se você pretende adicionar módulos de recursos ao projeto do app, há alguns aspectos da configuração da compilação do módulo base que precisam ser considerados:

  • Assinatura de apps: não é preciso incluir informações de assinatura no arquivo de configuração da compilação, a menos que você queira criar seu pacote de apps usando a linha de comando. No entanto, se você incluir informações de assinatura, deverá fazer isso somente no arquivo de configuração da compilação do módulo básico. Para saber mais, consulte Configurar o Gradle para assinar seu app.
  • Redução de código: para ativar a redução de código para todo o projeto do app (incluindo os módulos de recursos), faça isso no arquivo build.gradle do módulo base. Ou seja, você pode incluir regras personalizadas do ProGuard em um módulo de recursos, mas a propriedade minifyEnabled nas configurações da compilação do módulo de recursos será ignorada.
  • O bloco splits é ignorado: ao criar um pacote de apps, o Gradle ignora propriedades no bloco android.splits. Use android.bundle para desativar tipos de APKs de configuração e controlar os tipos com que o pacote de apps é compatível.
  • Controle de versão do app: o módulo base determina o código e o nome da versão para todo o projeto do app. Para saber mais, acesse a seção sobre como Gerenciar atualizações de apps.

Reativar ou desativar tipos de APKs de configuração

Por padrão, quando você cria um pacote de apps, ele é compatível com a geração de APKs de configuração para cada conjunto de recursos de idioma, densidade de tela e bibliotecas de ABI. Se usar o bloco android.bundle no arquivo build.gradle do módulo base, como mostrado abaixo, você poderá desativar a compatibilidade com um ou mais tipos de APKs de configuração:

android {
    // When building Android App Bundles, the splits block is ignored.
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // Specifies that the app bundle should not support
            // configuration APKs for language resources. These
            // resources are instead packaged with each base and
            // feature APK.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

Gerenciar atualizações de apps

Com os Android App Bundles, não é mais necessário gerenciar códigos de versão para vários APKs que você fez o upload para o Google Play. Em vez disso, você gerencia apenas um código de versão no módulo básico do app, conforme mostrado abaixo:

// In your base module build.gradle file
android {
    defaultConfig {
        …
        // You specify your app’s version code only in the base module.
        versionCode 5
        versionName "1.0"
    }
}

Depois de fazer upload do pacote de apps, o Google Play usa o código de versão no seu módulo básico para atribuir o mesmo código de versão a todos os APKs gerados a partir desse pacote. Ou seja, quando um dispositivo faz o download do seu app e o instala, todos os APKs divididos desse app compartilham o mesmo código de versão.

Para atualizar seu app com um novo código ou recursos, é preciso atualizar o código de versão no módulo básico do app e compilar um novo pacote completo de apps. Quando você faz o upload desse pacote de apps no Google Play, ele gera um novo conjunto de APKs com base no código de versão especificado pelo módulo básico. Em seguida, quando os usuários atualizam seu app, o Google Play exibe versões atualizadas de todos os APKs atualmente instalados no dispositivo. Ou seja, todos os APKs instalados são atualizados com o novo código de versão.

Fazer o download de outros APKs de configuração

Uma exceção ao fluxo de atualização descrito acima é quando um app instalado exige outros APKs de configuração. Imagine um usuário que muda o idioma padrão do sistema depois de fazer o download do seu app. Se o app for compatível com o idioma, o dispositivo solicitará outros APKs de configuração para os recursos de idioma e fará o download deles com o Google Play. No entanto, esse tipo de atualização para o app não muda o código de versão. Por isso, o dispositivo faz o download e instala somente os APKs de configuração necessários.