Prendre en charge plusieurs fichiers APK (original) (raw)

Si vous publiez votre application sur Google Play, vous devez compiler et importer un Android App Bundle (AAB). Google Play génère et diffuse automatiquement des APK optimisés pour la configuration de l'appareil de chaque utilisateur. Ils ne téléchargent ainsi que le code et les ressources dont ils ont besoin pour exécuter votre application. La publication de plusieurs APK est utile si vous ne publiez pas sur Google Play, mais que vous devez créer, signer et gérer chaque APK vous-même.

La compatibilité avec plusieurs APK est une fonctionnalité de Google Play qui vous permet de publier différents APK pour votre application, chacun ciblant des configurations d'appareil différentes. Chaque APK est une version complète et indépendante de votre application qui partage la même fiche d'application sur Google Play, doit avoir le même nom de package et être signée avec la même clé de version. Cette fonctionnalité est utile dans les cas où votre application ne peut pas atteindre tous les appareils souhaités avec un seul APK.

Les appareils Android peuvent être différents les uns des autres. Il est donc important que votre application soit disponible sur le plus d'appareils possible. Les applications Android s'exécutent généralement sur la plupart des appareils compatibles avec un seul APK, en fournissant des ressources alternatives pour différentes configurations (par exemple, différentes mises en page pour différentes tailles d'écran). Le système Android sélectionne les ressources appropriées pour l'appareil au moment de l'exécution. Toutefois, dans certains cas, un seul APK ne peut prendre en charge toutes les configurations d'appareil, car d'autres ressources rendent le fichier APK trop volumineux ou d'autres problèmes techniques empêchent un seul APK de fonctionner sur tous les appareils.

Pour vous aider à publier votre application sur le plus d'appareils possible, Google Play vous permet de publier plusieurs APK dans la même fiche d'application. Google Play fournit ensuite chaque APK aux appareils appropriés en fonction des configurations prises en charge, telles que déclarées dans le fichier manifeste de chaque APK.

En publiant votre application avec plusieurs APK, vous pouvez :

Actuellement, Google Play ne prend en charge que les caractéristiques suivantes pour la publication de plusieurs APK pour la même application.

Remarque : Pour en savoir plus sur la préparation et la publication des APK sur Google Play, consultez l'article du centre d'aidepréparer et déployer des versions.

Fonctionnement de plusieurs APK

Pour utiliser plusieurs APK sur Google Play, vous ne disposez que d'une seule entrée pour votre application, mais plusieurs appareils peuvent télécharger un APK différent. Par conséquent :

Filtres compatibles

L'attribution des APK en fonction des appareils est déterminée par les filtres Google Play, spécifiés par les éléments du fichier manifeste de chaque APK. Cependant, Google Play vous permet de publier plusieurs APK uniquement lorsque chacun d'eux utilise des filtres pour prendre en charge une variante des caractéristiques suivantes :

D'autres éléments manifestes qui activent les filtres Google Play, mais qui ne sont pas listés ci-dessus, sont toujours appliqués pour chaque APK, comme d'habitude. Cependant, Google Play ne vous permet pas de publier des APK distincts en fonction des variantes de ces caractéristiques d'appareils. Ainsi, vous ne pouvez pas publier plusieurs APK si les filtres listés ci-dessus sont identiques pour chaque APK (mais les APK diffèrent en fonction d'autres caractéristiques dans le fichier manifeste ou l'APK). Par exemple, vous ne pouvez pas fournir des APK différents qui ne diffèrent que par les caractéristiques .

Règles pour plusieurs APK

Avant de publier plusieurs APK pour votre application, vous devez comprendre les règles suivantes :

Le non-respect des règles ci-dessus génère une erreur dans la Google Play Console lorsque vous activez vos APK. Vous ne pourrez pas publier votre application tant que vous n'aurez pas résolu l'erreur.

D'autres conflits peuvent se produire lorsque vous activez vos APK, mais ils se traduisent par des avertissements plutôt que par des erreurs. Les causes de ces avertissements peuvent être les suivantes :

Dans ce cas, un message d'avertissement s'affiche, mais vous pouvez tout de même publier votre application.

Créer plusieurs APK

Une fois que vous avez décidé de publier plusieurs APK, vous devez probablement créer des projets Android distincts pour chaque APK que vous souhaitez publier afin de pouvoir les développer séparément. Pour ce faire, il vous suffit de dupliquer votre projet existant et de lui attribuer un nouveau nom. (Vous pouvez également utiliser un système de compilation capable de générer différentes ressources, telles que des textures, en fonction de la configuration de compilation.)

Conseil : Pour éviter de dupliquer des parties conséquentes du code de votre application, vous pouvez utiliser un projet de bibliothèque. Un projet de bibliothèque contient le code et les ressources partagés, que vous pouvez inclure dans vos projets d'application en cours.

Lorsque vous créez plusieurs projets pour la même application, il est recommandé d'identifier chacun de ces projets à l'aide d'un nom indiquant les restrictions des appareils à placer sur l'APK, afin de pouvoir les identifier facilement. Par exemple, "HelloWorld_21" peut correspondre à un nom d'application conçu pour le niveau d'API 21 ou supérieur.

Remarque : Tous les APK que vous publiez pour la même application doivent avoir le même nom de package et être signés avec la même clé de certificat. Assurez-vous également de bien comprendre lesrègles applicables à plusieurs APK.

Attribuer des codes de version

Chaque APK d'une même application doit avoir un code de version unique, spécifié par l'attribut android:versionCode. Vous devez veiller à attribuer les codes de version lorsque vous publiez plusieurs APK, car ils doivent tous être différents, mais dans certains cas ils doivent être ou devraient être définis dans un ordre spécifique, en fonction des configurations prises en charge par chaque APK.

Ordonner des codes de version

Un APK nécessitant un niveau d'API plus élevé doit généralement avoir un code de version plus élevé. Par exemple, si vous créez deux APK compatibles avec différents niveaux d'API, l'APK avec le niveau d'API le plus élevé doit avoir le code de version le plus élevé. Ainsi, si un appareil reçoit une mise à jour du système qui lui permet d'installer l'APK pour des niveaux d'API plus élevés, l'utilisateur reçoit une notification pour mettre à jour l'application. Pour en savoir plus sur l'application de cette exigence, consultez la section ci-dessus : Règles pour plusieurs APK.

Vous devez également déterminer dans quelle mesure l'ordre des codes de version pourrait affecter l'APK reçu par vos utilisateurs, en raison du chevauchement des couvertures des différents APK ou des modifications que vous pourriez apporter ultérieurement à vos APK.

Par exemple, si vous disposez de différents APK relatifs à la taille de l'écran (par exemple, un pour les petits et moyens et un autre pour les grands et très grands), mais que vous prévoyez de les remplacer, à l'avenir, par un APK pour les petits écrans et un autre pour les moyens à très grands, vous devez faire en sorte que le code de version pour l'APK concernant les grands et très grands écrans soit le plus élevé des deux. Ainsi, un appareil de taille normale recevra la mise à jour appropriée une fois la modification effectuée, car le code de version passera de l'APK existant au nouvel APK compatible avec l'appareil.

Par ailleurs, lorsque vous créez plusieurs APK qui diffèrent en fonction des différents formats de compression de textures OpenGL, notez que de nombreux appareils acceptent plusieurs formats. Étant donné qu'un appareil reçoit l'APK avec le code de version le plus élevé lorsqu'il y a chevauchement de couverture entre deux APK, vous devez ordonner les codes de version parmi vos APK pour que celui ayant le format de compression préféré ait le code de version le plus élevé. Par exemple, vous pouvez effectuer des builds différents pour votre application à l'aide des formats de compression PVRTC, ATITC et ETC1. Si vous préférez ces formats dans cet ordre exact, l'APK qui utilise PVRTC doit avoir le code de version le plus élevé, l'APK qui utilise ATITC, un code de version inférieur et celui utilisant ETC1 doit avoir la version la plus basse. Ainsi, si un appareil est compatible avec PVRTC et ETC1, il reçoit l'APK avec PVRTC, car il possède le code de version le plus élevé.

Si le Google Play Store ne parvient pas à identifier quel APK installer pour un appareil cible, vous pouvez également créer un APK universel qui inclut des ressources pour toutes les variantes d'appareil que vous souhaitez prendre en charge. Si vous fournissez un APK universel, attribuez-lui le versionCode (code de version) le plus bas. Comme le Google Play Store installe la version de votre application qui est à la fois compatible avec l'appareil cible et qui possède le versionCode le plus élevé, l'attribution d'un versionCode plus faible à l'APK universel garantit que le Google Play Store tente d'installer un autre de vos APK avant de revenir à l'APK universel, plus volumineux.

Utiliser un schéma de code de version

Pour autoriser différents APK à mettre à jour leurs codes de version indépendamment des autres (par exemple, lorsque vous corrigez un bug dans un seul APK, pour ne pas avoir besoin de mettre à jour tous les APK), vous devez utiliser un schéma pour vos codes de version qui laisse suffisamment d'espace entre chaque APK pour que vous puissiez augmenter le code dans l'un sans l'augmenter dans les autres. Vous devez également inclure le nom de votre version en cours dans le code (c'est-à-dire la version visible par l'utilisateur attribuée à android:versionName) afin que vous puissiez facilement associer la version au nom de la version.

Remarque : Lorsque vous augmentez le code de version d'un APK, Google Play invite les utilisateurs de la version précédente à mettre à jour l'application. Ainsi, pour éviter des mises à jour inutiles, vous ne devez pas augmenter le code de version pour les APK n'ayant pas été modifiés.

Nous vous recommandons d'utiliser un code de version comportant au moins sept chiffres : les entiers qui représentent les configurations compatibles se trouvent dans les bits d'ordre supérieur, et le nom de la version (issu d'android:versionName) dans ceux d'ordre inférieur. Par exemple, lorsque le nom de version de l'application est 3.1.0, les codes de version pour un APK de niveau d'API 4 et pour un APK de niveau d'API 11 se présentent respectivement sous la forme "0400310" et "1100310". Les deux premiers chiffres sont réservés au niveau d'API (4 et 11, respectivement), les deux chiffres du milieu correspondent à des tailles d'écran ou à des formats de texture GL (non utilisés dans ces exemples), et les trois derniers chiffres renvoient au nom de la version de l'application (3.1.0). Le schéma 1 montre deux exemples de répartition en fonction de la version de la plate-forme (niveau d'API) et de la taille de l'écran.

Figure 1. Schéma suggéré pour vos codes de version, en utilisant les deux premiers chiffres pour le niveau d'API, les deuxième et troisième chiffres pour la taille minimale et maximale de l'écran (1 à 4, pour chacune des quatre tailles) ou pour indiquer les formats de texture, et enfin les trois derniers chiffres pour la version de l'application.

Ce schéma pour les codes de version n'est qu'une suggestion qui vous permettra d'établir un modèle qui suivra l'évolution de votre application. Ce schéma n'est d'ailleurs pas une solution permettant d'identifier différents formats de compression de texture. Une solution possible serait de définir votre propre tableau spécifiant un entier différent pour chacun des différents formats de compression pris en charge par votre application (par exemple, 1 correspondrait à ETC1 et 2 à ATITC, etc.).

Vous pouvez utiliser le schéma de votre choix, mais vous devez bien réfléchir à la manière dont les futures versions de votre application devront augmenter leurs codes de version et à la manière dont les appareils pourront recevoir des mises à jour lorsque leur configuration changera (par exemple, en raison d'une mise à jour du système) ou lorsque vous modifierez la compatibilité de la configuration pour un ou plusieurs APK.