Créer plusieurs fichiers APK pour différentes tailles d'écran

Si vous publiez votre application sur Google Play, vous devez compiler et importer un Android App Bundle (AAB). Dans ce cas, Google Play génère et diffuse automatiquement des APK optimisés pour chaque configuration d'appareil, afin que l'utilisateur télécharge uniquement le code et les ressources nécessaires pour exécuter votre application. La publication de plusieurs fichiers 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.

Lorsque vous développez votre application Android afin de tirer parti de plusieurs APK sur Google Play, il est important d'adopter de bonnes pratiques dès le départ et d'éviter les maux de tête inutiles. plus loin dans le processus de développement. Cette leçon vous explique comment créer plusieurs APK application, chacune couvrant une classe différente de taille d'écran. Vous apprendrez également certains outils nécessaires pour la gestion de plusieurs codebases APK est aussi simple que possible.

Vérifier que vous avez besoin de plusieurs APK

Lorsque vous essayez de créer une application compatible avec plusieurs tailles d'appareils Android, votre application doit exploiter tout l'espace disponible sur des appareils plus grands, sans sacrifier la compatibilité ni la facilité d'utilisation sur les petits écrans. Il peut sembler au départ que bien que la prise en charge de plusieurs APK soit la meilleure solution, mais ce n'est souvent pas le cas. L'option Utiliser un seul APK Au lieu de cela, la section du guide du développeur utilisant plusieurs fichiers APK contient des informations utiles sur la façon de avec un seul APK, en utilisant notre bibliothèque Support. Vous devez également lire les sur la compatibilité avec plusieurs écrans. Vous disposez même d'une bibliothèque d'aide télécharger à l'aide du SDK Android, qui vous permet d'utiliser des fragments sur des appareils antérieurs à Honeycomb (ce qui la prise en charge de plusieurs écrans dans un seul APK).

Si vous pouvez le gérer, confiner votre application à un seul APK présente plusieurs avantages. y compris:

  • La publication et les tests sont plus faciles
  • Il n'y a qu'un seul codebase à gérer
  • Votre application peut s'adapter aux changements de configuration de l'appareil
  • La restauration des applications sur tous les appareils fonctionne
  • Vous n'avez pas à vous soucier de la préférence du marché, du comportement lié aux "mises à niveau" d'un fichier APK ou choisir quel APK correspond à quelle classe d'appareils.

Le reste de cette leçon part du principe que vous avez fait des recherches sur le sujet, assimilé attentivement dans les ressources associées, et nous avons déterminé que plusieurs APK correspondaient application.

Définir vos besoins

Commencez par créer un graphique simple pour déterminer rapidement le nombre d'APK dont vous avez besoin et l'écran la ou les tailles couvertes par chaque APK. Heureusement, il est facile de déterminer rapidement et facilement vos besoins, et d'avoir une référence pour plus tard. Commencez avec une ligne de cellules représentant les différentes tailles d'écran disponibles sur la plate-forme Android.

petit normal grand xlarge

Maintenant, colorez simplement le graphique de sorte que chaque couleur représente un APK. Voici un exemple de la façon dont vous peut appliquer chaque APK à une certaine plage de tailles d'écran.

petit normal grand xlarge

Selon vos besoins, vous pouvez également disposer de deux fichiers APK : "petit fichier et tout le reste" ou « XL et tout le reste". La coloration dans le graphique facilite également la communication au sein des équipes : vous pouvez Il suffit maintenant de désigner chaque APK comme "bleu", "vert" ou "rouge", quel que soit le nombre de types d'écrans différents. qu'il couvre.

Placer l'ensemble du code et des ressources courants dans un projet de bibliothèque

Qu'il s'agisse de modifier une application Android existante ou d'en créer une, c'est est la première chose que vous devez faire au codebase, et de loin la plus importante. Tout qui est inclus dans le projet de bibliothèque ne doit être mis à jour qu'une seule fois (pensez aux chaînes localisées en langue, des thèmes de couleur, des bugs corrigés dans le code partagé), ce qui accélère le développement la probabilité d'erreurs qui auraient pu être facilement évitées.

Remarque:Bien que les détails d'implémentation concernant la création et des projets de bibliothèque sortent du cadre de cette leçon, vous pouvez vous familiariser consultez Créer une bibliothèque Android.

Si vous convertissez une application existante pour qu'elle accepte plusieurs fichiers APK, Parcourez votre codebase à la recherche de fichiers de chaînes localisés, de listes de valeurs, de thèmes les couleurs, les icônes de menu et la mise en page qui ne changent pas d'un APK à l'autre, et mettez le tout dans le projet de bibliothèque. Le code qui ne changera pas beaucoup doit aller également dans le projet Bibliothèque. Vous vous retrouverez probablement à étendre ces pour ajouter une ou deux méthodes d'APK à APK.

En revanche, si vous créez l'application en partant de zéro, essayez autant que possible d'écrire le code d'abord dans le projet de bibliothèque, puis de le déplacer vers le bas un APK individuel si nécessaire. C'est beaucoup plus facile à gérer à long terme que de l'ajouter à un, puis un autre, puis un autre, et plusieurs mois plus tard, on tente de déterminer si ce blob peut être déplacé vers le haut à la section de la bibliothèque sans vous ruiner.

Créer des projets APK

Chaque APK que vous allez publier doit disposer d'un projet Android distinct. Pour faciliter organisation, placez le projet de bibliothèque et tous les projets APK associés dans le même dossier parent. N'oubliez pas non plus que chaque APK doit avoir le même nom de package, bien qu'il ne soit pas nécessairement partager le nom du package avec la bibliothèque. Si vous disposiez de trois APK selon le schéma décrit précédemment, votre répertoire racine peut se présenter comme suit:

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-red

Une fois les projets créés, ajoutez le projet de bibliothèque comme référence pour chaque projet APK. Si définissez votre activité de départ dans le projet de bibliothèque et étendez cette activité dans votre APK. projet. Avoir une activité de départ définie dans le projet Bibliothèque vous permet de mettre toutes l'initialisation de votre application au même endroit, de sorte que chaque APK n'ait pas à réimplémentez une configuration "universelle" des tâches telles que l'initialisation d'Analytics, la vérification des licences, etc. des procédures d'initialisation qui ne changent pas beaucoup d'un APK à l'autre ;

Ajuster les fichiers manifestes

Lorsqu'un utilisateur télécharge une application qui utilise plusieurs APK via Google Play, la bonne L'APK à utiliser est choisi selon deux règles simples:

  • Le fichier manifeste doit indiquer que l'APK en question est éligible
  • Parmi les APK éligibles, le numéro de version le plus élevé l'emporte.

À titre d'exemple, prenons l'ensemble de plusieurs APK décrits précédemment et supposons que chaque APK a été configuré pour prendre en charge toutes les tailles d'écran supérieures à sa "cible" la taille de l'écran. Prises individuellement, la plage possible de chaque APK ressemblerait à ceci:

petit normal grand xlarge
petit normal grand xlarge
petit normal grand xlarge

En revanche, si vous utilisez le numéro de version le plus élevé l'emporte, si l'attribut versionCode est défini dans pour chaque APK de sorte que rouge ≥ vert ≥ bleu, le graphique se réduit en conséquence:

petit normal grand xlarge

Supposons maintenant que le fichier APK rouge présente des exigences contraires aux deux autres. La la page Filtres sur Google Play d'Android Le guide du développeur contient toute une liste de coupables possibles. À titre d'exemple, supposons que rouge nécessite une caméra frontale. L'intérêt du fichier APK rouge est d'utiliser la fonctionnalité l'espace disponible à l'écran pour faire des choses divertissantes avec cette caméra frontale. Mais il s’avère que Tous les appareils de très grande taille n'ont même pas de caméra frontale ! L'horreur !

Heureusement, si un utilisateur navigue sur Google Play à partir de l'un de ces appareils, Google Play examine manifeste, regardez que Red indique que la caméra frontale est une exigence et ignorez-la discrètement, a déterminé que Red et que l’appareil ne correspondait pas au paradis numérique. Il verra ensuite que Le vert n'est pas seulement compatible avec les très grands appareils, il ne se soucie pas non plus de l'existence ou non d'un avec la caméra frontale. L'utilisateur peut toujours télécharger l'application sur Google Play, malgré l'erreur de la caméra avant, il existait toujours un APK compatible avec cet écran en particulier. la taille de l'image.

Pour conserver tous vos APK sur des canaux distincts, il est important d'avoir un code de version efficace. d'un schéma. Le code recommandé est indiqué dans la zone Codes de version de consultez notre guide du développeur. Puisque l'exemple d'ensemble d'APK ne concerne qu'un des trois , il suffirait de séparer chaque APK par 1 000 et d'effectuer un incrément à partir de cette valeur. Ce pourrait se présenter comme suit:

Bleu: 1001, 1002, 1003, 1004...
Vert: 2001, 2002, 2003, 2004...
Rouge:3001, 3002, 3003, 3004...

En rassemblant tous ces éléments, vos fichiers manifestes Android ressembleraient probablement à ceci : suivantes:

Bleu :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

Vert :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="true"
        android:xlargeScreens="true" />
    ...

Rouge :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-screens android:smallScreens="false"
        android:normalScreens="false"
        android:largeScreens="false"
        android:xlargeScreens="true" />
    ...

Notez que techniquement, plusieurs APK fonctionnent avec les écrans "supports" (supports). ou le tag "compatible-screens". Compatible avec les écrans, Il est généralement déconseillé d'utiliser les deux balises dans le même fichier manifeste. Il complique les choses inutilement et augmente le risque d'erreurs. Notez également qu'au lieu d'utiliser les valeurs par défaut (petites et sont toujours "true" par défaut), les fichiers manifestes définissent explicitement la valeur de chaque taille d'écran. Cela peut vous éviter des maux de tête par la suite. Par exemple, un fichier manifeste avec SDK cible < "xlarge" est automatiquement défini sur "false" pour 9, car cette taille n'existait pas encore. Soyez donc explicite !

Consulter votre checklist de pré-lancement

Avant d'importer des données sur Google Play, vérifiez les éléments suivants. N'oubliez pas qu'il s'agit s'applique spécifiquement à plusieurs APK, et ne constitue en aucun cas une liste de contrôle complète des applications en cours d'importation sur Google Play.

  • Tous les APK doivent avoir le même nom de package
  • Tous les APK doivent être signés avec le même certificat
  • Toutes les tailles d'écran compatibles avec votre APK, définies sur "true" dans le fichier manifeste. Toutes les tailles d'écran à éviter, valeur "false"
  • Vérifiez que vos filtres de manifestes ne contiennent pas d'informations contradictoires (un APK qui ne prend en charge cupcake sur les écrans XLARGE ne sera vu par personne)
  • Le fichier manifeste de chaque APK doit être unique sur au moins un écran, une texture OpenGL ou une version de la plate-forme
  • Essayez de tester chaque APK sur au moins un appareil. Sauf cela, vous avez l'un des émulateurs d'appareils personnalisables intégrés à votre ordinateur de développement. Devenez dingue !

Pensez également à inspecter l'APK compilé avant de le lancer sur le marché, pour vous assurer toute surprise qui pourrait cacher votre application sur Google Play. C'est en fait assez simple en utilisant "aapt" . Aapt (Android Asset Packaging Tool) fait partie du processus de compilation permettant de créer empaqueter vos applications Android et est également un outil très pratique pour les inspecter.

>aapt dump badging
package: name='com.example.hello' versionCode='1' versionName='1.0'
sdkVersion:'11'
uses-permission:'android.permission.SEND_SMS'
application-label:'Hello'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Hello' icon='res/drawable-mdpi/icon.png'
launchable-activity: name='com.example.hello.HelloActivity'  label='Hello' icon=''
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

Lorsque vous examinez la sortie aapt, assurez-vous que vous n'avez pas de valeurs en conflit pour prend en charge les écrans compatibles et les écrans compatibles, et que vous ne disposez pas de la caractéristique "uses-feature" involontaire valeurs qui ont été ajoutées suite à des autorisations définies dans le fichier manifeste. Dans l'exemple ci-dessus, le fichier APK sera invisible pour la plupart, voire tous les appareils.

Pourquoi ? En ajoutant l'autorisation requise SEND_SMS, l'exigence de fonctionnalité d'android.hardware.telephony a été implicitement ajoutée. Étant donné que la plupart (voire tous) les appareils de très grande taille sont des tablettes dépourvues de matériel de téléphonie, Google Play filtrera cet APK dans ces cas-là, jusqu'à ce que les futurs appareils soient suffisamment grands pour être présentés comme des écrans de grande taille et soient équipés de matériel téléphonique.

Heureusement, vous pouvez facilement résoudre ce problème en ajoutant les éléments suivants à votre fichier fichier manifeste:

<uses-feature android:name="android.hardware.telephony" android:required="false" />

L'exigence android.hardware.touchscreen est également ajoutée implicitement. Si vous souhaitez que votre APK soit visible sur les téléviseurs qui ne sont pas à écran tactile, vous devez ajouter ce qui suit à votre fichier manifeste:

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

Une fois que vous avez suivi la checklist de pré-lancement, importez vos APK sur Google Play. Il peut s'écouler un certain temps avant que l'application s'affiche lorsque vous naviguez sur Google Play. effectuer une dernière vérification. Téléchargez l'application sur n'importe quel appareil de test. que les APK ciblent les appareils concernés.

Pour en savoir plus sur la publication de plusieurs APK sur Google Play, consultez Prendre en charge plusieurs fichiers APK.