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 O 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ê estiver pensando em adicionar módulos de recursos ao projeto do aplicativo ou se você já lançou o aplicativo usando vários APKs, há alguns aspectos na configuração da compilação do módulo base que você deve ter em mente.

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, ela só deve ser incluída no arquivo de configuração da compilação do módulo base. Para mais informações, consulte Configure 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 processar mudanças de idioma

Com base no Google Play, o Google Play determina quais recursos de idioma instalar com o app da seleção de idioma nas configurações do dispositivo do usuário. Considere um usuário que altera o idioma padrão do sistema após o download do aplicativo. Caso seu app seja compatível com esse idioma, o dispositivo vai solicitar e fazer o download de outros APKs de configuração para esses recursos de idioma do Google Play.

Para apps que oferecem um seletor de idioma dentro do aplicativo e de forma dinâmica mudar o idioma do app, independentemente da configuração no nível do sistema, você precisa fazer algumas alterações para evitar falhas devido à ausência de recursos. De qualquer defina a propriedade android.bundle.language.enableSplit como false ou considere a implementação de downloads de linguagens sob demanda usando a biblioteca Play Core como descritos em Fazer o download de outros recursos de idioma