Configurer la distribution au moment de l'installation

Les modules de fonctionnalités vous permettent de séparer certaines fonctionnalités et ressources du module de base de votre application et de les inclure à votre app bundle. Vous pouvez ensuite personnaliser les options de distribution pour contrôler quand et comment les appareils équipés d'Android 5.0 (niveau d'API 21) ou d'une version ultérieure téléchargent les fonctionnalités de votre application.

N'oubliez pas que cette modularisation nécessite davantage d'efforts et, parfois, une refactorisation du code existant de votre application. Par conséquent, réfléchissez bien aux fonctionnalités de votre application qui bénéficieraient le plus d'un accès à la demande.

Si vous souhaitez modulariser progressivement les fonctionnalités de l'application, sans pour autant modifier son comportement ni personnaliser les options de distribution avancées, vous pouvez créer des modules de fonctionnalités configurés pour une diffusion au moment de l'installation. Autrement dit, vous pouvez modulariser une fonctionnalité, mais ne pas activer les options avancées afin qu'elle soit disponible lorsqu'un utilisateur installe votre application.

De plus, les modules de fonctionnalités configurés pour être distribués lors de l'installation peuvent être désinstallés plus tard s'ils ne sont plus nécessaires. Pour ce faire, ils doivent être configurés comme amovibles.

Cette section explique comment créer un module de fonctionnalité au moment de l'installation. Avant de commencer, assurez-vous d'utiliser Android Studio 3.5 ou une version ultérieure, ainsi que le plug-in Android Gradle 3.5.0 ou version ultérieure.

Configurer un nouveau module pour la distribution au moment de l'installation

Le moyen le plus simple de créer un module de fonctionnalité consiste à utiliser Android Studio 3.5 ou une version ultérieure. Étant donné que les modules de fonctionnalité ont une dépendance inhérente au module d'application de base, vous ne pouvez les ajouter qu'aux projets d'application existants.

Pour ajouter un module de fonctionnalité à votre projet d'application à l'aide d'Android Studio, procédez comme suit :

  1. Si ce n'est pas déjà fait, ouvrez votre projet d'application dans l'IDE.
  2. Sélectionnez Fichier > Nouveau > Nouveau module dans la barre de menu.
  3. Dans la boîte de dialogue Créer un module, sélectionnez Module de fonctionnalités dynamiques, puis cliquez sur Suivant.
  4. Dans la section Configurer votre nouveau module, procédez comme suit :
    1. Sélectionnez le module d'application de base pour votre projet d'application dans le menu déroulant.
    2. Spécifiez un nom de module. L'IDE utilise ce nom pour identifier le module en tant que sous-projet Gradle dans votre fichier de paramètres Gradle. Lorsque vous créez votre app bundle, Gradle utilise le dernier élément du nom du sous-projet pour injecter l'attribut <manifest split> dans le fichier manifeste du module de fonctionnalité.
    3. Spécifiez le nom du package du module. Par défaut, Android Studio suggère un nom de package qui combine le nom du package racine du module de base et le nom du module que vous avez spécifié à l'étape précédente.
    4. Sélectionnez le niveau d'API minimal que le module doit accepter. Cette valeur doit correspondre à celle du module de base.
  5. Appuyez sur Suivant.
  6. Dans la section Options de téléchargement du module, procédez comme suit :

    1. Spécifiez le titre du module en utilisant jusqu'à 50 caractères. Le module de base de votre application doit inclure le titre du module en tant que ressource de chaîne, que vous pouvez traduire. Lors de la création du module à l'aide d'Android Studio, l'IDE ajoute la ressource de chaîne au module de base et injecte l'entrée suivante dans le fichier manifeste du module de fonctionnalité :

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. Dans le menu déroulant Inclusion à l'installation, sélectionnez Inclure le module au moment de l'installation. Android Studio injecte les éléments suivants dans le fichier manifeste du module pour refléter votre choix :

      <dist:module ... >
        <dist:delivery>
            <dist:install-time />
        </dist:delivery>
      </dist:module>
      

      Si vous souhaitez apprendre à créer un module de fonctionnalité téléchargeable après l'installation d'une application, consultez l'article Configurer la distribution à la demande.

    3. Cochez la case Fusion si vous souhaitez que ce module soit disponible pour les appareils équipés d'Android 4.4 (niveau d'API 20) ou version antérieure et inclus dans plusieurs APK. Vous pouvez donc l'omettre sur les appareils qui ne sont pas compatibles avec le téléchargement et l'installation d'APK divisés. Android Studio injecte les éléments suivants dans le fichier manifeste du module pour refléter votre choix :

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  7. Cliquez sur Terminer.

Une fois qu'Android Studio a terminé de créer votre module, examinez vous-même son contenu à partir du volet Projet. Pour y accéder, sélectionnez Affichage > Fenêtres d'outils > Projet dans la barre de menu. Le code, les ressources et l'organisation par défaut doivent être semblables à ceux du module d'application standard.

Permettre la suppression d'un module lors de l'installation

Lors d'une distribution au moment de l'installation, il peut être utile de créer des modules de fonctionnalité qu'il est possible de désinstaller par la suite lorsqu'ils ne sont plus requis. Par exemple, pour réduire la taille d'installation de votre application, vous pouvez modulariser le contenu requis pour la formation ou l'intégration, puis désinstaller le module de fonctionnalités à l'aide de l'API Play Core une fois que l'utilisateur est configuré pour utiliser votre application.

Par défaut, les modules d'installation ne peuvent pas être supprimés. Pour marquer un module comme amovible et pouvoir le désinstaller, ajoutez la balise removable et définissez sa valeur sur true :

<dist:module ... >
  <dist:delivery>
      <dist:install-time>
          <dist:removable dist:value="true"/>
      </dist:install-time>
  </dist:delivery>
</dist:module>