Format Android App Bundle

Un Android App Bundle est un fichier (avec l'extension de fichier .aab) que vous importez sur Google Play.

Les app bundles sont des binaires signés qui organisent le code et les ressources de votre application en modules, comme illustré dans la figure 1. Le code et les ressources de chaque module sont organisés de la même manière que dans un APK, ce qui est logique, puisque chacun de ces modules peut être généré sous forme d'APK distinct. Google Play utilise ensuite l'app bundle pour générer les différents APK proposés aux utilisateurs, tels que l'APK de base, les APK de fonctionnalités, les APK de configuration et (pour les appareils non compatibles avec les APK divisés) les APK multiples. Les répertoires en bleu (tels que les répertoires drawable/, values/ et lib/) représentent le code et les ressources utilisés par Google Play pour créer des APK de configuration pour chaque module.

Les app bundles organisent votre application dans des répertoires représentant chacun un module. Dans chaque répertoire de module, le code et les ressources sont organisés de la même manière que dans un fichier APK standard.

Figure 1. Contenu d'un Android App Bundle comprenant un module de base, deux modules de fonctionnalités et deux packs d'éléments.

La liste suivante décrit certains fichiers et répertoires de l'app bundle plus en détail :

  • base/, feature1/ et feature2/ : chacun de ces répertoires de premier niveau représente un module différent de votre application. Le module de base de votre application est toujours contenu dans un répertoire base du package Android App Bundle. Toutefois, le répertoire de chaque module de fonctionnalités porte le nom spécifié par l'attribut split dans le fichier manifeste du module. Pour en savoir plus, consultez le fichier manifeste du module de fonctionnalités.
  • asset_pack_1/ et asset_pack_2/ : vous pouvez modulariser des éléments dans des packs d'éléments pour les applications ou les jeux volumineux et nécessitant une interface graphique. Les packs d'éléments sont particulièrement adaptés aux jeux en raison de leur grande taille. Vous pouvez personnaliser le mode et le moment de téléchargement de chaque pack d'éléments sur un appareil selon trois modes : à l'installation, en distribution rapide et à la demande. Tous les packs d'éléments sont hébergés et diffusés à partir de Google Play. Pour savoir comment ajouter des packs d'éléments à votre app bundle, consultez la présentation de Play Asset Delivery.
  • BUNDLE-METADATA/ : ce répertoire inclut des fichiers de métadonnées contenant des informations utiles pour les outils ou les plates-formes de téléchargement d'applications. Ces fichiers de métadonnées peuvent inclure des mappages ProGuard et la liste complète des fichiers DEX de votre application. Les fichiers de ce répertoire ne sont pas empaquetés dans les APK de votre application.
  • Fichiers de tampon de protocole du module (*.pb) : ces fichiers fournissent des métadonnées permettant de décrire le contenu de chaque module d'application aux plates-formes de téléchargement d'applications, comme Google Play. Par exemple, BundleConfig.pb fournit des informations sur le bundle lui-même, telles que la version des outils de compilation utilisés pour compiler l'app bundle, et native.pb et resources.pb décrivent le code et les ressources de chaque module, ce qui est utile lorsque Google Play optimise les APK pour différentes configurations d'appareils.
  • manifest/ : contrairement aux APK, les app bundles stockent le fichier AndroidManifest.xml de chaque module dans ce répertoire distinct.
  • dex/ : contrairement aux APK, les app bundles stockent les fichiers DEX de chaque module dans ce répertoire distinct.
  • res/, lib/ et assets/ : ces répertoires sont identiques à ceux d'un fichier APK standard. Lorsque vous importez votre app bundle, Google Play n'inspecte ces répertoires et packages que pour les fichiers qui correspondent à la configuration de l'appareil cible, tout en préservant les chemins de fichiers.
  • root/ : ce répertoire stocke les fichiers qui sont déplacés par la suite vers le répertoire racine de tout fichier APK comprenant le module dans lequel se trouve ce répertoire. Par exemple, le répertoire base/root/ d'un app bundle peut inclure des ressources Java que votre application charge à l'aide de Class.getResource(). Ces fichiers sont ensuite déplacés vers le répertoire racine de l'APK de base de votre application et tous les APK multiples que Google Play génère. Les chemins de ce répertoire sont également conservés. Autrement dit, les répertoires (et leurs sous-répertoires) sont également déplacés à la racine de l'APK.

Présentation des APK divisés

L'un des mécanismes fondamentaux de la diffusion d'applications optimisées consiste à utiliser des APK divisés, sur Android 5.0 (niveau d'API 21) ou version ultérieure. Les APK divisés sont très semblables aux APK standards : ils incluent du bytecode DEX compilé, des ressources et un fichier manifeste Android. Cependant, la plate-forme Android peut traiter plusieurs APK divisés installés comme une seule application. Autrement dit, vous pouvez installer plusieurs APK divisés qui ont accès au code et aux ressources courants, et qui s'affichent sous la forme d'une application installée sur l'appareil.

L'avantage des APK divisés est de pouvoir diviser un APK monolithique (c'est-à-dire un APK qui contient du code et des ressources pour toutes les fonctionnalités et configurations d'appareil compatibles avec votre application) en packages plus petits et discrets qui seront installés sur l'appareil de l'utilisateur selon ses besoins.

Par exemple, un APK divisé peut inclure le code et les ressources d'une fonctionnalité supplémentaire dont seul un petit nombre de vos utilisateurs a besoin, tandis qu'un autre APK divisé n'inclura que les ressources pour une langue ou une densité d'écran spécifiques. Ces APK divisés sont téléchargés et installés lorsque l'utilisateur le demande ou que l'appareil l'exige.

Vous trouverez ci-dessous la description des différents types d'APK que vous pouvez installer ensemble sur un appareil pour former une application. Vous découvrirez comment configurer votre projet d'application pour qu'il soit compatible avec ces APK dans les sections suivantes de cette page.

  • APK de base : cet APK contient le code et les ressources auxquels tous les autres APK divisés peuvent accéder et fournit les fonctionnalités de base de votre application. Lorsqu'un utilisateur demande à télécharger votre application, cet APK est téléchargé et installé en premier. En effet, seul le fichier manifeste de l'APK de base contient une déclaration complète des services, fournisseurs de contenu, autorisations, exigences de version de la plate-forme et dépendances par rapport aux fonctionnalités système de votre application. Google Play génère l'APK de base de votre application à partir du module d'application (ou de base) de votre projet. Si vous souhaitez réduire la taille de téléchargement initiale de votre application, n'oubliez pas que l'ensemble du code et des ressources inclus dans ce module sont inclus dans l'APK de base de votre application.
  • APK de configuration : chacun de ces APK inclut des bibliothèques natives et des ressources pour une densité d'écran, une architecture de processeur ou un langage spécifiques. Lorsqu'un utilisateur télécharge votre application, son appareil ne télécharge et n'installe que les APK de configuration qui ciblent son appareil. Chaque APK de configuration est une dépendance d'un APK de base ou d'un APK de module de fonctionnalité. Autrement dit, ils sont téléchargés et installés avec le fichier APK pour lequel ils fournissent le code et les ressources. Contrairement aux modules de base et de fonctionnalité, vous ne créez pas de module distinct pour les APK de configuration. Si vous utilisez des pratiques standards pour organiser les ressources alternatives spécifiques à la configuration de vos modules de base et de fonctionnalité, Google Play génère automatiquement des APK de configuration pour vous.
  • APK pour les modules de fonctionnalités : chacun de ces fichiers APK contient le code et les ressources d'une fonctionnalité de votre application que vous modularisez à l'aide de modules de fonctionnalités. Vous pouvez ensuite personnaliser quand et comment cette fonctionnalité est téléchargée sur un appareil. Par exemple, à l'aide de la bibliothèque Play Core, des fonctionnalités peuvent être installées à la demande après l'installation de l'APK de base sur l'appareil afin de fournir des fonctionnalités supplémentaires à l'utilisateur. Prenons l'exemple d'une application de chat qui télécharge et installe des fonctionnalités de capture et d'envoi de photos uniquement lorsque l'utilisateur demande à utiliser cette fonctionnalité. Il est possible que les modules de fonctionnalités ne soient pas disponibles au moment de l'installation. Vous devez donc inclure le code et les ressources communs dans l'APK de base. Autrement dit, le module de fonctionnalité doit supposer que seuls le code et les ressources du fichier APK de base sont disponibles au moment de l'installation. Google Play génère des APK de module de fonctionnalité pour votre application à partir des modules de fonctionnalités de votre projet.

Prenons l'exemple d'une application proposant trois modules de fonctionnalités et la compatibilité avec plusieurs configurations d'appareil. La figure 1 ci-dessous illustre l'arborescence des dépendances pour les différents APK de l'application. Notez que l'APK de base constitue la tête de l'arborescence, et que tous les autres APK dépendent de l'APK de base. (Si vous souhaitez en savoir plus sur la représentation des modules de ces APK dans un Android App Bundle, consultez le guide sur le format Android App Bundle.)

L'APK de base se trouve en tête de l'arborescence. Les APK des modules de fonctionnalités sont dépendants de celui-ci. Les APK de configuration, qui incluent le code et les ressources spécifiques à la configuration de l'appareil pour la base et chaque APK de module de fonctionnalité, forment les nœuds feuilles de l'arborescence des dépendances.

Figure 1. Arborescence de dépendances pour une application diffusée à l'aide d'APK divisés

N'oubliez pas que vous n'avez pas besoin de compiler ces APK vous-même. Google Play le fait pour vous à l'aide d'un seul app bundle signé créé avec Android Studio. Pour en savoir plus sur le format des app bundles et découvrir comment en créer un, consultez le guide Créer, déployer et importer des packages Android App Bundle.

Appareils fonctionnant sous Android 4.4 (niveau d'API 19) ou version antérieure

Comme les appareils équipés d'Android 4.4 (niveau d'API 19) ou version antérieure ne sont pas compatibles avec le téléchargement ni l'installation d'APK divisés, Google Play leur fournit un seul APK, appelé APK multiple, optimisé pour la configuration de l'appareil. Autrement dit, les APK multiples représentent l'expérience complète de votre application, mais n'incluent pas de code ni de ressources inutiles, tels que ceux associés à d'autres densités d'écran et architectures de processeur.

Toutefois, ils incluent des ressources pour toutes les langues compatibles avec votre application. Cela permet, par exemple, aux utilisateurs de modifier le paramètre de langue préféré de votre application sans avoir à télécharger un autre fichier APK multiple.

Les APK multiples ne permettent pas de télécharger des modules de fonctionnalités à la demande. Pour inclure un module de fonctionnalité dans cet APK, vous devez désactiver l'option à la demande ou activer l'option de fusion au moment de créer le module de fonctionnalité.

N'oubliez pas qu'avec les app bundles, vous n'avez pas besoin de compiler, de signer, d'importer ni de gérer des APK pour chaque configuration d'appareil compatible avec votre application. Il vous suffit de compiler et d'importer un seul app bundle pour l'ensemble de votre application, et Google Play se charge du reste pour vous. Ainsi, que vous envisagiez de prendre ou non en charge les appareils équipés d'Android 4.4 ou version antérieure, Google Play fournit un mécanisme de diffusion flexible pour vous et vos utilisateurs.

Modification de la langue de l'utilisateur

Avec les app bundles, les appareils ne téléchargent que le code et les ressources dont ils ont besoin pour exécuter votre application. Ainsi, pour les ressources linguistiques, l'appareil d'un utilisateur ne télécharge que les ressources linguistiques de votre application correspondant à la ou les langues actuellement sélectionnées dans les paramètres de l'appareil.

Lorsqu'un utilisateur change de langue dans les paramètres de l'appareil, Google Play peut avoir besoin de télécharger et d'installer des APK supplémentaires pour que l'application puisse être affichée dans la nouvelle langue.

Google Play tentera de télécharger les langues supplémentaires immédiatement après le changement. Si l'appareil de l'utilisateur est hors connexion, si le téléchargement échoue ou si les ressources sont trop volumineuses, Google Play tentera à nouveau le téléchargement en arrière-plan lorsque les conditions de l'appareil seront plus favorables. Si vous exécutez l'application sur un appareil équipé d'Android 9.0 (niveau d'API 28) ou version antérieure, et si votre application est au premier plan lors de l'installation des nouveaux APK divisés de langues, elle se fermera.

Si votre application nécessite que toutes les langues soient disponibles sur l'appareil à tout moment, vous pouvez désactiver la division des langues dans votre configuration de compilation.

Si votre application nécessite de télécharger des langues supplémentaires indépendamment de celles des utilisateurs sélectionnées dans les paramètres de l'appareil (pour implémenter un outil de sélection de langue dans l'application, par exemple), vous pouvez utiliser la bibliothèque Play Core pour les télécharger à la demande.