Dans cette série en trois parties, nous explorons les applications instantanées Android, une nouvelle fonctionnalité qui offre un moyen totalement nouveau d’atteindre les utilisateurs qui n’ont pas encore installé votre application sur leur appareil. Cela permet de rendre votre application identifiable et accessible depuis n’importe quel emplacement prenant en charge les URL, y compris les e-mails, les résultats de recherche Google, les publications sur les plateformes de médias sociaux, les commentaires YouTube et les forums..
Dans le premier article, nous avons examiné ce que sont les applications instantanées, leur fonctionnement et les principaux avantages qu'elles offrent aux développeurs Android. et Utilisateurs d'applications Android. Nous avons même acquis une expérience pratique des applications instantanées, en utilisant l'assistant de création de projet d'Android Studio pour générer rapidement et facilement un projet préconfiguré pour prendre en charge les applications instantanées Android..
Dans le deuxième article, j'ai utilisé l'exemple d'application téléchargeable MyLocation pour montrer comment mettre à jour un projet Android existant pour prendre en charge la fonctionnalité d'applications instantanées. Si vous suivez depuis le début, à ce stade, vous aurez reconfiguré avec succès le projet MyLocation afin d'inclure un module de fonction unique pouvant s'exécuter sur n'importe quel périphérique virtuel Android. sans pour autant vous devez installer l'application complète MyLocation.
Cependant, MyLocation ne contient actuellement qu'un seul module de fonctionnalités de base et, lorsqu'il s'agit de projets Android réels, vous aurez souvent envie de proposer plusieurs fonctionnalités sous forme d'application instantanée. Dans cette dernière tranche, je vais vous montrer comment ajouter plusieurs modules de fonctionnalités à vos projets Android en vous guidant tout au long du processus d'ajout d'un second module de fonctionnalités à MyLocation, puis en mappant ce module sur une autre URL..
Enfin, pour vous assurer de tirer le meilleur parti des applications instantanées, nous allons compléter cette série en jetant un coup d'œil aux meilleures pratiques d'applications instantanées..
Si vous avez terminé le deuxième versement, votre version du projet MyLocation devrait actuellement être divisée en modules suivants:
MapsActivity
pouvant s'exécuter indépendamment de l'application installable et se lancant sur le périphérique de l'utilisateur chaque fois qu'il tente d'accéder à l'URL www.example.com/maps.Si cela ne correspond pas à votre version de MyLocation, vous pouvez la télécharger à partir de GitHub..
Avant de commencer à ajouter un deuxième module de fonctionnalité à MyLocation, vous devez prendre en compte quelques éléments.
Premièrement, au moment de la rédaction de cet article, il était uniquement possible de développer des applications instantanées à l'aide des versions Android Studio 3.0 Preview et Canary. Chaque fois que vous travaillez avec des versions à accès précoce, vous devez être prêt à rencontrer des bogues, des fonctionnalités manquantes et tout autre comportement généralement étrange qui sera (espérons-le!) Corrigé bien avant la version stable. Cependant, travailler avec plusieurs modules de fonctionnalités d'application instantanés semble être une tâche difficile. particulièrement capricieux dans les versions Android Studio 3.0 Canary.
Pour réduire le risque de rencontrer des problèmes, vous devez vérifier que vous disposez de la dernière version de Canary avant d'installer un second module de fonctions dans le projet MyLocation. Cependant, si votre projet Est-ce que commencez soudainement à générer des erreurs ou à refuser de compiler, puis, à la fin de cet article, vous trouverez une section Dépannage contenant des solutions de contournement et des solutions possibles pour tous les problèmes susceptibles de survenir lors de l'ajout de modules de fonctionnalités supplémentaires à votre projet..
Notez également que dans ce didacticiel, nous allons créer un module de fonctionnalité supplémentaire, mapper ce module sur une URL unique, puis tester le module sur un périphérique virtuel Android. C'est déjà beaucoup de terrain à couvrir, alors pour éviter que ce message ne prenne trop de temps, nous allons créer un module qui affiche simplement une interface utilisateur et ne contient aucune fonctionnalité réelle. Cependant, il n'y a aucune raison pour que vous ne puissiez pas développer ce module avec votre propre code et vos propres ressources, si vous souhaitiez une expérience d'application instantanée plus authentique..
La première étape pour transformer MyLocation en une application instantanée multi-fonctionnalités est de créer notre module de fonctionnalités:
Nous n'implémentons peut-être aucune fonctionnalité réelle dans notre module mylocation-directions, mais nous avons toujours besoin d'une confirmation visuelle que ce module a été chargé correctement. Sélectionnez donc le modèle de votre choix (j'opte pour Activité de base) puis cliquez sur Suivant. Je vais mapper ce module de fonctionnalité sur www.example.com/directions. Commencez donc par entrer exemple.com dans le Hôte d'URL d'application instantanée champ. Ouvrez le Type de route d'URL d'application instantanée liste déroulante et sélectionnez soit Chemin, pathPrefix, ou pathPattern. Puisque je veux que ce module réponde à www.example.com/directions seulement, Je vais choisir Chemin.
dans le Itinéraire instantané de l'application, entrer /directions. Cela nous donne notre URL complète: example.com/directions. Changer la Nom de l'activité à DirectionsActivité
. Assurez-vous que le Nom de la mise en page est réglé sur activités_directions, puis cliquez sur terminer.
Comme toi peut Comme je l’ai déjà remarqué, un projet prenant en charge la fonctionnalité d’applications instantanées se composera inévitablement de plusieurs modules. Si ces modules doivent fonctionner ensemble pour créer plusieurs fichiers APK Instant App différents, plus votre APK «installable» installable, alors ils doivent être conscients les uns des autres, ce qui signifie que vous devez ajouter les dépendances nécessaires à chaque module build.gradle
fichier.
Lorsque vous créez un module de fonction via le Nouveau> Nouveau module… menu, Android Studio génère en fait quelques-unes de ces dépendances, mais ne les génère pas toutes. Et, pour compliquer encore les choses, vous devez utiliser différentes expressions, en fonction du type de module (s) avec lequel vous travaillez..
Pour vous donner un aperçu, chaque fois que vous créez un module de fonctionnalité, vous devez informer votre projet que:
projet d'implantation
expression. projet de long métrage
expression.projet d'implantation
expression. Dans cette section, nous allons examiner chacune de ces dépendances. Commençons par les propriétés de dépendance générées automatiquement par Android Studio..
projet d'implémentation (': mylocation-base')
Le module de fonctionnalités de base de votre projet contient tout le code commun et toutes les ressources utilisés dans votre projet. Ainsi, tous les modules de fonctionnalités supplémentaires créés tout dépend de ce module de fonctionnalités de base unique.
Si vous ouvrez le module de votre fonctionnalité (directions de déplacement
) build.gradle
fichier, vous verrez qu'Android Studio a déjà ajouté le module de fonctionnalités de base (base de déplacement
) comme dépendance:
dépendances … projet d'implémentation (': mylocation-base')
Quel que soit le nombre de modules de fonction supplémentaires que vous créez, tous build.gradle
les fichiers contiendront cette même déclaration: projet d'implémentation (': mylocation-base')
.
projet de fonctionnalité (": mylocation-directions")
Votre module de fonctionnalités de base doit également connaître tous vos modules de fonctionnalités supplémentaires..
Si vous ouvrez votre base de déplacement
modules build.gradle
fichier, alors vous verrez que, une fois encore, Android Studio a fait le travail pour vous, et a déclaré directions de déplacement
comme dépendance:
dépendances … projet de fonctionnalité (": mylocation-directions")
Tous les modules de fonctionnalité supplémentaires que vous créez seront également ajoutés à cette section automatiquement, par exemple:
dépendances … projet de fonctionnalité (": mylocation-directions") projet de fonctionnalité (": mylocation-share") projet de fonctionnalité (": mylocation-search")
Android Studio ne génère pas automatiquement certaines dépendances. Vous devrez donc les ajouter manuellement..
projet d'implémentation (': mylocation-directions')
Les applications instantanées sont des composants autonomes pouvant fonctionner indépendamment de l'application installable. Dans le contexte de notre application MyLocation, cela signifie que directions de déplacement
peut fonctionner sans mylocation-app
. Cependant, l'inverse n'est pas vrai: mylocation-app
ne peut pas fonctionner sans directions de déplacement
.
Le fichier APK installable doit contenir tout des modules de votre projet, y compris tous les modules de fonctionnalités de votre application instantanée. Par conséquent, nous devons donner le module APK (mylocation-app
) un avertissement sur notre nouveau module de fonctionnalités (directions de déplacement
).
Ouvrez le mylocation-app
build.gradle fichier et pointez-le vers le directions de déplacement
module:
dépendances projet d'implémentation (': mylocation-base') // Ajoute la ligne suivante // projet d'implémentation (': mylocation-directions')
Vous devrez répéter cette étape pour chaque module de fonction que vous créez. Par conséquent, si vous continuez à ajouter des modules de fonction, le mylocation-app
build.gradle
Le fichier peut finir par ressembler à ceci:
Dépendances projet d'implémentation (': mylocation-base') projet d'implémentation (': mylocation-directions') projet d'implémentation (": mylocation-share") projet d'implémentation (": mylocation-search")
Le module d'application instantanée est responsable de la transformation de chacun des modules de fonctionnalité de votre projet en un fichier APK d'application instantanée. Il doit donc en savoir plus sur chaque module de fonction que vous créez.
Ouvrez votre mylocation-instantapp
modules build.gradle
déposer et déclarer base de déplacement
comme dépendance en utilisant le projet d'implantation
expression:
dépendances projet d'implémentation (': mylocation-base') projet d'implémentation (': mylocation-directions')
Bien que nous parlions de dépendances de projets, il reste une dépendance importante à ajouter..
Un projet qui prend en charge les applications instantanées doit simplement déclarer son ID d'application
attribut une fois, dans le module APK (app). Cependant, pour être sûr que ce single ID d'application
Si l'attribut est propagé correctement dans tous vos modules de fonctionnalités, vous devez ajouter le module APK en tant que dépendance du module de fonctionnalités de base..
Ouvrez votre base de déplacement
modules build.gradle
déposer et ajouter mylocation-app
comme dépendance, en utilisant le projet d'application
expression:
dependencies … // Ajoute la ligne suivante // projet d'application (": mylocation-app")
Contrairement à toutes les autres dépendances dont nous avons parlé, il vous suffit de déclarer une dépendance sur le module APK une fois par projet, et pas à chaque fois que vous créez un module de fonctionnalité..
Bien que cette étape ne soit pas obligatoire, notre module de fonctionnalités contient actuellement des fichiers et des répertoires inutiles. Nous allons donc suivre les meilleures pratiques et rationaliser nos processus. directions de déplacement
module:
directions de déplacement
module. src / androidTest
annuaire.src / test
annuaire. Lors de la création de ce module, nous avons entré des informations sur l'URL vers laquelle nous souhaitons mapper ce module. Cependant, actuellement, l’assistant de création de module d’Android Studio ne peut pas créer de mappage d’URL complet. Vous devez donc ouvrir le Assistant de liens d'application et terminez ce processus manuellement:
Vous avez maintenant deux modules de fonctionnalité qui sont mappés à différentes URL.
directions de déplacement
ModuleActuellement, notre configuration d'exécution est configurée pour simuler l'utilisateur en tapant sur le lien www.example.com/maps, qui se lancera. MapsActivity
, et par extension notre base de déplacement
module. Cependant, si nous testons notre module de fonctionnalité supplémentaire, nous devrons simuler l'utilisateur en tapant www.example.com/directions, ce qui lancera notre DirectionsActivité
. Cela nous oblige à mettre à jour notre configuration d'exécution:
Votre DirectionsActivité
devrait maintenant apparaître sur votre AVD. Félicitations, vous venez de créer une application instantanée multi-fonctions!
Avoir à lutter contre les bugs et autres comportements étranges fait partie du plaisir de travailler avec les versions à accès anticipé d'Android Studio.
Si votre Android Studio construit Est-ce que allez bien, et vous ne trouvez rien qui cloche dans votre projet, alors il est possible que l'erreur vienne d'Android Studio lui-même.
Dans cette section, je vais partager quelques solutions de contournement pour toutes les erreurs les plus courantes d'Android Studio et les bizarreries que vous pouvez rencontrer lors de la création d'une application instantanée multi-fonctionnalités..
Et, juste au cas où vous rencontriez un problème qui ne figure pas dans cette liste, je partagerai également une liste de correctifs généraux pouvant vous aider à aplanir les problèmes rencontrés actuellement avec Android Studio..
La première fois que vous essayez de tester votre application instantanée sur un DAV qui exécute Nougat, il est possible que l'application ne parvienne pas à se déployer. Si cela se produit, alors:
Si vous rencontrez le Problème de fiabilité avec le cache de provisioning instantané des applications message d'erreur lorsque vous essayez de déployer votre application, cela signifie que vous devez vider votre cache:
Si Android Studio se plaint de problèmes liés à AAPT2 (tels que l'affichage d'un La liaison AAPT2 a échoué message d'erreur), vous pouvez généralement résoudre ces problèmes en désactivant AAPT.
Pour désactiver AAPT, ouvrez le fichier Gradle de votre projet. scripts / gradle.properties
fichier et ajouter le texte suivant:
android.enableAapt2 = false
C’est facilement le problème le plus frustrant et le plus étrange que vous puissiez rencontrer lors du développement d’applications instantanées..
Dans certaines versions d’Android Studio 3.0, l’utilisation de la -
Les caractères des noms de modules peuvent devenir un problème lorsque vous ajoutez de nouveaux modules à votre projet. Cette erreur est particulièrement étrange, car le -
caractéristiques des personnages dans de nombreux exemples d'applications instantanées de Google, y compris l'application instantanée Codelabs.
Si Android Studio commence à se plaindre de la android: splitName
attribut, puis vérifiez que vous exécutez la dernière version de Android Studio 3.0. Vous pourrez également résoudre ce problème en nettoyant, puis en reconstruisant votre projet..
Si le problème persiste, vous devrez peut-être passer un certain temps à parcourir chacun de vos modules et à retirer le -
personnage.
Une fois que vous avez terminé de tester votre projet d'application instantanée, les étapes suivantes consistent à organiser des tests alpha et bêta, puis vous êtes prêt à lancer votre application sur le public.!
Vous pouvez effectuer toutes ces tâches via la console Google Play. Si vous avez déjà publié une application installable "normale", ce processus devrait vous sembler très familier:
Vous pouvez ensuite choisir parmi les types de piste suivants, selon que vous souhaitez tester ou publier votre application:
Lorsque vous essayez de publier un projet avec une prise en charge instantanée des applications, il est possible que vous rencontriez l'erreur suivante:
Votre site 'www.example.com”N'a pas été lié à votre application via le protocole Digital Assets Link.
Si cela se produit, vérifiez que:
assetlinks.json
) est accessible au public et n'est protégé par aucune forme d'authentification, d'IP interne ou de pare-feu. Les applications instantanées constituent une toute nouvelle façon de consommer des applications Android. Il n'est donc pas surprenant qu'elles appliquent leurs meilleures pratiques..
Dans cette section, nous allons nous assurer que vous tirez le meilleur parti de cette nouvelle fonctionnalité en jetant un coup d'œil aux meilleures pratiques d'application instantanées..
Ce n’est pas si inhabituel que des applications installables demandent à l’utilisateur de créer un compte sur le tout premier écran. Après tout, si l’utilisateur s’est déjà engagé à installer une application, il est peu probable qu’il soit effrayé par cette application qui le demande. leur adresse email!
Cependant, les applications instantanées sont un complètement histoire différente, car il est possible pour un utilisateur de lancer un module d'application instantané sans savoir n'importe quoi à propos de l'application connexe. Imaginez qu'un ami vous ait envoyé un lien avec aucune explication. Taper sur ce lien pour lancer une application instantanée. Vous ne savez pas ce que cette application a à offrir ni qui l'a créée, mais elle vous demande immédiatement votre adresse e-mail. Dans quelle mesure êtes-vous susceptible de transmettre ces informations??
Si votre application instantanée inclut une expérience de connexion, essayez de différer le plus possible cette boîte de dialogue de connexion. Donner à l'utilisateur plus de temps pour découvrir le contenu et les fonctionnalités de votre application augmentera ses chances de créer un compte à l'invite..
Même si votre application installable tourne autour de l'utilisateur qui crée un compte, vous devez toujours essayer de concevoir vos modules d'application instantanée afin que les utilisateurs puissent effectuer la tâche qui les invite à lancer ce module, avant de leur demander de créer un compte.
La plupart des applications pouvant être installées ne comportent que quelques points d’entrée. Celles-ci sont généralement limitées à la première activité que l’utilisateur voit lors du lancement de votre application, ainsi qu’à toutes les activités pouvant être démarrées avec des intentions implicites ou explicites..
Les applications instantanées ont loin plus de points d'entrée, car chaque module de fonctionnalité doit avoir au moins un point d'entrée et peut potentiellement avoir plusieurs points d'entrée.
Lorsque vous ajoutez un support d'application instantané à votre application, l'une des décisions les plus importantes que vous devez prendre est de savoir quelle activité (ou quelles activités) constituerait le meilleur point d'entrée pour chaque module. Vous devez sélectionner vos points d'entrée avec soin, car chaque point d'entrée devrait idéalement:
L'interface utilisateur, la navigation, les fonctionnalités et l'apparence générale de votre application doivent être constantes dans tous les modules de votre application instantanée. et votre APK installable. Si vous avez remis à quelqu'un un appareil avec votre application en cours d'exécution, il ne devrait pas être en mesure de dire s'il regarde l'instant de votre application ou son formulaire installable..
En outre, tout utilisateur d'application instantanée qui franchit le pas et installe votre application devrait être en mesure de reprendre exactement où il s'est arrêté. Par exemple, vous pouvez transférer l'état de l'application stockée de votre application instantanée vers votre application installable à l'aide de cookies ou de stockage local..
Étant donné que les applications instantanées sont chargées à la demande, la taille du fichier binaire de l'application instantanée a un impact considérable sur la facilité avec laquelle les utilisateurs peuvent accéder à votre application..
L'équipe Android a imposé une limite de 4 Mo à chaque composant d'application instantanée (c'est la taille du module de fonctionnalité plus module de fonctionnalités de base de votre projet), mais vous devriez viser à rendre vos modules encore plus légers si possible.
Si vous avez du mal à rationaliser un module particulier, jetez un regard critique sur ce que vous avez inclus dans ce module, car il peut être possible de reformuler un seul module en plusieurs modules plus petits et autonomes..