Configurer le module de base

Un app bundle est différent d'un APK dans la mesure où il ne peut pas être déployé un sur un appareil. Il s'agit plutôt d'un format de publication qui inclut l'ensemble du code et des ressources compilés de votre application dans un seul artefact. Une fois que vous avez importé votre app bundle signé, Google Play peut compiler et signer les APK de votre application, puis les distribuer aux utilisateurs.

Premiers pas

La plupart des projets d'application nécessitent peu d'efforts pour être compatibles avec le format Android App Bundle. En effet, le module qui comprend le code et les ressources nécessaires à l'APK de base de votre application correspond au module d'application standard que vous obtenez par défaut lorsque vous créez un projet d'application dans Android Studio. Autrement dit, le module qui applique le plug-in application ci-dessous à son fichier build.gradle fournit le code et les ressources nécessaires à la fonctionnalité de base de votre application.

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")
}

En plus des fonctionnalités essentielles de votre application, le module de base fournit la plupart des configurations de compilation et des entrées de fichier manifeste qui affectent le projet d'application dans son ensemble.

Configuration de la compilation du module de base

Pour la plupart des projets d'application existants, vous n'avez pas besoin de modifier la configuration de compilation du module de base. Toutefois, si vous envisagez d'ajouter des modules de fonctionnalité à votre projet d'application ou si vous avez déjà publié votre application à l'aide de plusieurs APK, il est important de garder à l'esprit certains aspects clés liés à la configuration de compilation du module de base.

Mise à jour de l'application et du code de version

Avec Android App Bundle, vous n'avez plus besoin de gérer les codes de version des différents APK que vous importez sur Google Play. À la place, vous ne gérez qu'un seul code de version dans le module de base de l'application, comme indiqué ci-dessous :

// 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"
    }
}

Une fois que vous avez importé votre app bundle, Google Play utilise le code de version du module de base pour attribuer le même code de version à tous les APK qu'il génère à partir de ce bundle. Autrement dit, lorsqu'un appareil télécharge et installe votre application, tous les APK divisés correspondants partagent le même code de version.

Lorsque vous souhaitez mettre à jour votre application avec un nouveau code ou de nouvelles ressources, vous devez mettre à jour le code de version dans le module de base de l'application et créer un app bundle complet. Lorsque vous importez cet app bundle dans Google Play, un nouvel ensemble de fichiers APK basés sur le code de version spécifié par le module de base est généré. Puis, lorsque les utilisateurs mettent à jour votre application, Google Play leur fournit les versions mises à jour de tous les APK actuellement installés sur l'appareil. Autrement dit, tous les APK installés sont mis à jour et contiennent ainsi le nouveau code de version.

Autres points à prendre en compte

  • Signature d'application : si vous incluez des informations de signature dans les fichiers de compilation, vous ne devez les ajouter que dans le fichier de configuration de compilation du module de base. Pour en savoir plus, consultez la section Configurer Gradle pour signer votre application.
  • Minification de code : si vous souhaitez activer la minification de code pour l'ensemble de votre projet d'application (y compris ses modules de fonctionnalité), vous devez le faire à partir du fichier build.gradle du module de base. Autrement dit, vous pouvez inclure des règles ProGuard personnalisées dans un module de fonctionnalité, mais la propriété minifyEnabled dans les configurations de compilation de ce module sera ignorée.
  • Le bloc splits est ignoré : lors de la création d'un app bundle, Gradle ignore les propriétés du bloc android.splits. Si vous souhaitez contrôler les types de fichiers APK de configuration compatibles avec votre app bundle, utilisez plutôt android.bundle pour désactiver certains types de fichiers APK de configuration.
  • Gestion des versions de l'application : le module de base détermine le code de version et le nom de version de l'ensemble du projet d'application. Pour en savoir plus, consultez la section Gérer les mises à jour d'application.

Réactiver ou désactiver des types de fichiers APK de configuration

Par défaut, lorsque vous créez un app bundle, vous pouvez générer des fichiers APK de configuration pour chaque ensemble de ressources linguistiques, de densité d'écran et de bibliothèques ABI. À l'aide du bloc android.bundle dans le fichier build.gradle du module de base, comme indiqué ci-dessous, vous pouvez désactiver la compatibilité avec un ou plusieurs types de fichiers APK de configuration :

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
        }
    }
}

Gérer les changements de langue

Google Play détermine les ressources linguistiques à installer avec l'application en fonction de la langue sélectionnée dans les paramètres de l'appareil de l'utilisateur. Prenons l'exemple d'un utilisateur qui modifie la langue système par défaut après avoir téléchargé votre application. Si votre application est compatible avec cette langue, l'appareil demandera et téléchargera des fichiers APK de configuration supplémentaires pour ces ressources linguistiques depuis Google Play.

Pour les applications qui proposent un outil de sélection de la langue et qui modifient la langue de l'application de manière dynamique, indépendamment du paramètre de langue spécifié au niveau du système, certaines modifications sont nécessaires afin d'éviter les plantages dus à des ressources manquantes. Définissez la propriété android.bundle.language.enableSplit sur false ou envisagez d'implémenter des téléchargements de langues à la demande à l'aide de la bibliothèque Play Core, comme décrit dans la section Télécharger des ressources linguistiques supplémentaires.