Configurar o módulo base

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.

Primeiros passos

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 application abaixo ao arquivo build.gradle fornece o código e os recursos para a funcionalidade básica do seu app.

Groovy

// The standard application plugin creates your app's base module.
plugins {
 id 'com.android.application'
}

Kotlin

plugins {
    // The standard application plugin creates your app's base module.
    id("com.android.application")
}

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.

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ê está pensando em adicionar módulos de recursos ao projeto do app ou se lançou o app anteriormente usando vários APKs, há alguns aspectos da configuração do build do módulo básico que precisam ser considerados.

Código da versão e atualizações do app

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.

Outras considerações

  • Assinatura de apps:se você incluir informações de assinatura nos arquivos de build, faça isso apenas no arquivo de configuração do build do módulo base. Para saber mais, consulte Configurar o Gradle para assinar seu app.
  • Redução de código: para ativar a redução de código em 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ões 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:

Groovy

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

Kotlin

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

Como gerenciar mudanças de idioma

O Google Play determina quais recursos de idioma vão ser instalados com o app com base na seleção de idioma nas configurações do dispositivo do usuário. Imagine um usuário que muda o idioma padrão do sistema depois de fazer o download do app. Se o app for compatível com esse idioma, o dispositivo vai solicitar e fazer o download de outros APKs de configuração para esses recursos de idioma pelo Google Play.

Em apps que oferecem um seletor de idioma e mudam dinamicamente o idioma, independente da configuração de idioma no sistema, é necessário fazer algumas mudanças para evitar falhas devido à ausência de recursos. Defina a propriedade android.bundle.language.enableSplit como false ou considere implementar downloads de idioma sob demanda usando a biblioteca Play Core, conforme descrito em Fazer o download de outros recursos de idioma.