La guerre ... La guerre ne change jamais. Ainsi, la guerre pour un code beau et fonctionnel est en cours. Et pour chaque tâche difficile, sa propre arme est née: quelqu'un le fait pour lui-même et quelqu'un utilise des outils prêts à l'emploi. Le développement Android ne fait pas exception. Lors de notre conférence
AppsConf 2018 , nous discuterons comment et ce qui est le plus intéressant à utiliser maintenant, où vous pouvez trébucher et ce qui est intéressant, c'est l'énorme arsenal d'outils de développement que Google a finalement commencé à mettre en place. Les principaux sujets des rapports peuvent être consultés sur notre site Web, mais pour l'instant, nous avons demandé à l'expert développeur Google Denis Neklyudov et Alexander Smirnov de parler de la nouvelle boîte à outils Android Jetpack, qui a été introduite en mai de cette année.

Alexander Smirnov, co-fondateur et CTO chez PapaJobs, fondateur de la communauté des développeurs Android MOSDROID, le principal blog vidéo Android dans Faces. |
Denis Neklyudov, le premier GDE en Russie, travaille à Singapour à 90seconds.tv, le chef de file du podcast AndroidDev, orateur de diverses conférences et auteur de plusieurs cours de développement. |
Android Jetpack a été introduit en mai sur Google I / O.
Qu'attendiez-vous de cette conférence? Vos attentes se sont-elles réalisées?Alexander Smirnov : Je m'attendais à beaucoup moins que ce que j'ai finalement imaginé. Il semblait qu'il n'était pas nécessaire de développer la plateforme d'un point de vue commercial. Dans le segment mobile, Google a remporté une victoire écrasante dans 87% du marché avec des tendances positives, et au cours des dernières années, le ML est devenu leur principal domaine de travail. J'attendais des progrès sur Material Design, l'ajout d'outils ML pour les développeurs, la sortie de Constraint Layout 2.0. Mais nous avons vu un énorme pas en avant pour mettre les choses en ordre et soutenir les développeurs. Soudainement satisfait des nouveaux éléments d'AJP et du début de la lutte pour un meilleur support. Salut, Android X.
Denis Neklyudov : J'ai adhéré à la règle principale des voyages aux conférences d'épicerie: n'attendez pas les annonces, les changements révolutionnaires, les cadeaux - rien que rencontrer de vieux amis. Si seulement ils n'avaient rien cassé. Mais non, ils ont introduit Android X, dont la migration n'est pas le processus le plus agréable dans les grands projets. Mais il y avait beaucoup de positif. La chose la plus précieuse à propos des E / S Google est la communication avec les développeurs du framework et les collègues de l'atelier.
Quels nouveaux éléments ont déjà été mis en pratique?Denis Neklyudov : Depuis AJP, nous avons testé uniquement la migration vers Android X. J'ai un ensemble de solutions éprouvées dans le projet, je n'ai aucune envie de précipiter et d'introduire de nouveaux composants. Ils ont juste pris en charge Target SDK 28, vérifié la récente version d'Android Pie et se sont calmés. Nous attendons que les améliorations promises pour les tests soient disponibles. Jetpack maintenant - ce sont diverses petites bibliothèques rassemblées en un seul endroit, ce qui rend parfois la vie des développeurs un peu plus facile et plus agréable. La plupart des nouveaux produits ne sont pas encore prêts pour les versions de lancement des applications.
Alexander Smirnov :
Parmi les nouveautés présentées, j'ai tout essayé, mais en production, nous avons uniquement mis à jour l'application vers le nouveau Material Design et appliqué Android KTX, ce que nous avons aimé pour sa simplicité et sa commodité. J'aime réduire un tas de code en quelques lignes. Nous avons jeté le reste dans le pipeline et passons cette année.
Jetpack réussira les tâches et vous apprécierez de l'utiliser. Mais oui, certaines sections sont toujours en alpha, donc au stade du développement, de petits problèmes peuvent apparaître. C'est normal. Je ne recommanderais pas de faire glisser les outils de production en état alpha, mais avec le même Kotlin, cela ne m'a pas arrêté.
Pour Android, la question d'une navigation pratique a toujours été un problème aigu.
Est-ce que quelque chose changera avec AJP?Denis Neklyudov : Dans Android, la navigation a toujours été puissante et variée: Activité, Fragment, il faut encore traiter DeepLinks et surveiller les arguments passés. Vous pouvez facilement vous perdre dans une grande carte d'écrans. Google essaie simplement de résoudre ce problème avec la nouvelle navigation, qui est même intégrée à Android Studio avec son propre réacteur de hiérarchie d'écran.
J'utilise des solutions maison qui répondent aux exigences et à l'architecture globale du projet. Bien que la navigation comporte de graves bogues et n'est pas prête à être utilisée dans les applications publiées.
Alexander Smirnov : Chez Jetpack, Google a fait un grand pas en avant: la navigation est apparue, ce qui va changer l'architecture des applications pour le mieux. Dans les grandes applications, la navigation peut devenir si compliquée qu'il n'est pas réaliste de se souvenir de toutes les options de transition. Et ils doivent encore être programmés et testés. Il y avait plusieurs alternatives qui ont essayé de résoudre ce problème: Cicerone, Flow, Conductor. Aucun d'entre eux n'est aussi fonctionnel.
Tout d'abord, il convient de noter l'éditeur de navigation: il est pratique de créer un diagramme de transition graphique avec, et il est agréable de le contrôler avec la souris. Implémentation d'un traitement DeepLinks pratique avec prise en charge de la lecture de l'arborescence de transition entière. Le composant de navigation divise le travail avec DeepLinks en deux cas: explicite et implicite. Le premier, nous pouvons nous créer via une DSL pratique et appeler en tant que PendingIntent via une action spécifique. Le second est DeepLinks qui nous est familier, par exemple, à partir du navigateur. Ils sont créés et appelés de différentes manières, mais ils sont traités de manière identique à l'aide du graphique de navigation et de la prise en charge complète de la création de la pile pour ouvrir la section nécessaire. Le traitement de DeepLinks n'a jamais été aussi simple.
La bibliothèque de pagination a été ajoutée à AJP. Comment change-t-elle de travail avec RecyclerView?Denis Neklyudov : RecyclerView a toujours eu un inconvénient: vous devez passer beaucoup de temps sur une solution qui permet un chargement page par page dans les deux sens, et même avec la possibilité de passer à différentes parties de cette liste interminable. Dans la bibliothèque de pagination, Google a présenté sa solution à ce problème.
Alexander Smirnov : La bibliothèque reprend la routine de la plupart des développeurs Android - travaillant avec des listes. Pour accélérer l'affichage de grands ensembles de données, nous les divisons tous en pages et travaillons avec eux. En utilisant la bibliothèque de pagination, ce type de travail devient simple, car nous obtenons l'implémentation hors de la boîte. De plus, le composant peut travailler sur le chargement de données à partir de plusieurs sources et les mélanger. Nous avons également une idée intéressante avec les espaces réservés, quand au moment du chargement de données supplémentaires, vous pouvez montrer de beaux talons au lieu de filateurs éternels. En outre, une fonction d'arrêt a été ajoutée pour fonctionner avec des instantanés ou des données instables - le composant lui-même peut comprendre ce qui a été modifié et quels éléments doivent être déposés au centre de la liste et lesquels en haut.
En fait, ce composant a été créé pour fonctionner en conjonction avec RecyclerView, mais la bibliothèque de pagination se compose de deux parties principales: PagedList et PagedListAdapter. En fait, en utilisant PagedList, vous pouvez travailler avec ces parties, télécharger à partir de plusieurs sources.
Un des nouveaux produits est Workmanager. Comment change-t-il son travail avec des tâches d'arrière-plan?Alexander Smirnov : Il permet de passer systématiquement des services omnipotents à une API pratique dans Jetpack: il vous permet d'ajouter la nécessité de remplir les conditions environnementales pour démarrer une tâche, de définir l'ordre des tâches et des chaînes. Vous pouvez transférer des données vers une tâche exécutable et en obtenir le résultat. Il présente trois avantages considérables: vous n'avez pas besoin de Google Play sur votre appareil, vous ne pouvez exécuter des tâches que sous certaines conditions, vous pouvez créer des chaînes de tâches.
Aucun des analogues précédents n'était autosuffisant, il y avait donc une bibliothèque comme Android-Job d'Evernote, qui utilisait tous les analogues à la fois. Après l'apparition de WorkManager, leur besoin disparaît.
Denis Neklyudov : Google a obtenu une telle enveloppe sur toutes les solutions existantes pour travailler avec des tâches d'arrière-plan. Comme la tâche différée ne peut tout simplement pas être terminée dans Service, les développeurs sont confrontés à la sortie d'Android Marshmallow et à l'arrivée du mode Doze. Maintenant, l'application ne peut pas faire ce qu'elle veut. Et avec chaque version de ces restrictions de plus en plus. Même avec Lollipop, nous avons JobScheduler disponible, qui lance des tâches en arrière-plan sous certaines conditions et avec le consentement du système, mais il a des bugs sur les versions antérieures et on ne sait pas comment travailler avec lui dans les versions Android où il n'existe pas. Pour ce faire, un wrapper a été créé sous la forme d'un gestionnaire de réseau GCM et réécrit à nouveau en tant que répartiteur de travaux Firebase. Mais ils se sont révélés imparfaits - c'est la naissance de leur WorkManager de remplacement moderne, qui se charge d'effectuer des tâches d'arrière-plan sur n'importe quelle version d'Android sans bugs.
AJP a ajouté une nouvelle fonctionnalité - Slices. Qu'est-ce qui l'intéresse?Alexander Smirnov : Tout d'abord, les tranches doivent être présentées à votre produit et à votre agent de commercialisation. Ils permettent à l'utilisateur de voir votre application plus souvent et d'utiliser plus rapidement la partie nécessaire: allez directement à la section souhaitée, changez la fonctionnalité nécessaire. Slices vous permet également de participer à votre application parmi les résultats de recherche dans la recherche Google, et pourra également s'intégrer dans l'Assistant Google à l'avenir.
Dans Slices, vous pouvez afficher des fonctions liées au type de votre application et à ses capacités. Trois groupes peuvent être distingués: navigation, exécution des tâches et retour aux données. En général, les utilisateurs de Slices obtiennent une interaction plus simple et plus rapide, les développeurs obtiennent plus de trafic et d'occasions de renvoyer l'utilisateur vers l'application.
Denis Neklyudov :
Avouez -le, vous avez longtemps manqué de capacité à recevoir des informations des applications dans des applications avec des éléments interactifs directement de la recherche. Les tranches résolvent exactement un tel problème, permettant à l'application de déclarer l'interface utilisateur et les actions avec elle, qui seront intégrées dans des applications tierces, y compris la recherche. J'attends avec impatience le moment où les nouvelles sur Google Assistant sur le smartphone seront intégrées à Feedly, les photos du passé de Timehop, mes vols depuis App in the Air, l'itinéraire pour travailler "Y. Navigator", etc.
Pour les propriétaires d'applications, c'est une excellente occasion d'augmenter la fréquence d'utilisation de leurs services, il deviendra également plus pratique pour l'utilisateur de changer de piste dans Spotify sans quitter le nouveau simulateur de course.
Et quelles sont les limites?Alexander Smirnov : Slices est encore fortement découpé par des modèles: un tas d'applications sont intégrées dans d'autres et l'utilisateur doit comprendre que le mécanisme d'interaction sera différent. Pour la polyvalence, vous devez toujours payer. Si vous vous souvenez des widgets, ils étaient également très limités. L'extension du fonctionnel, bien sûr, le sera, mais je ne pense pas que quelque chose de grand devrait en être attendu.
Denis Neklyudov : Je suis d'accord, maintenant l'API Slices est limitée à un certain ensemble de modèles possibles qui peuvent être intégrés dans une application tierce, mais de nouveaux modèles apparaîtront également avec de nouvelles versions. Les développeurs ont spécifiquement interdit les interfaces personnalisées afin de pouvoir contrôler l'apparence des tranches dans l'application intégrée, et pour qu'elles soient toutes cohérentes.
Google a ajouté une bibliothèque KTX à AJP. Quelles sont vos impressions d'elle?Alexander Smirnov : Un excellent outil, c'est exactement ce qui manquait depuis très longtemps. KTX est un ensemble d'extensions pour une utilisation plus agréable de l'API Android dans les tâches quotidiennes.
Je recommande fortement de le passer à tous les développeurs Android afin d'augmenter la productivité. Il apporte confort, rapidité et bonne humeur lors du développement. Avec KTX, vous pouvez même réduire le passe-partout et obtenir un code propre et bien lisible.
Mais vous devez étudier attentivement les extensions fournies par KTX et regarder le code source de ces extensions pour comprendre ce qui se passe sous le capot. Et comme il n'y a plus de pièges, vous pouvez vous battre en toute sécurité.
Denis Neklyudov : Les développeurs AJP ont pris la bonne décision: le framework devrait être plus convivial pour Kotlin. Le projet avec un ensemble de fonctions statiques est né, élargissant la syntaxe du framework. Kotlin possède de nombreuses fonctionnalités de langage pratiques, et seules les fonctions d'extension vous permettent d'accéder aux classes du framework de manière pratique. Par exemple, view.isVisible est une alternative courte à view.getVisibility () == View.Visible.
Il y a beaucoup de fonctions différentes, il vaut mieux
voir par vous-même . Bien sûr, vous pouvez vivre sans eux, comme, en effet, sans Kotlin. Mais c'est plus agréable.
Google fait de plus en plus la promotion de Kotlin. Que ressentez-vous à ce sujet?
Quelles sont ses perspectives?Alexander Smirnov : J'ai une attitude très positive envers Kotlin et depuis janvier 2016, je l'utilise comme principal langage de développement pour Android. Pendant ce temps, il a participé à la migration de trois sociétés de Java vers Kotlin. Java, malheureusement, se développe assez lentement, et Kotlin pour le développement mobile est une bouffée d'air frais.
Le moment où Kotlin devient le principal langage de développement pour Android est une question de temps. Les développeurs Android font déjà leur apparition, dans lequel Kotlin est le premier langage de développement, et Java est quelque chose de peu familier. Nous avons un avenir agréable avec Kotlin, au moins jusqu'à ce que Google décide de construire un nouvel OS, pour ainsi dire, Android amélioré. Mais c'est une question de futur lointain, qui n'est pas un fait de ce qui va arriver.
Denis Neklyudov : Je ne peux pas dire que Google fait la promotion active de Kotlin, plutôt, certains projets liés au cadre lui-même deviennent conviviaux pour Kotlin. Cela ne signifie pas du tout qu'en 2018, un développeur Java pour Android est une sorte de renégat ou représentant d'une minorité. Mais le fait que Kotlin devienne de plus en plus confiant et plus rapide devient le langage par défaut pour les développeurs, et c'est une bonne nouvelle.
Lorsque vous entendez parler de Flutter, un framework multiplateforme pour les applications mobiles de Google, Kotlin Native, qui compile pour Android et iOS, fait immédiatement écho. Beaucoup attendent qu'il devienne la langue de tout: Android, iOS, Web, Embeded ... Les plans JetBrains sont napoléoniens. Nous observons les rapports de bogues, les tests bêta et apprécions le langage agréable dans lequel nous avons réussi à migrer nos projets avec un minimum de douleur.
Cela fait plus de trois mois depuis la sortie d'Android AJP. Comment s'est-il montré?Alexander Smirnov : En utilisant AJP, Google a prévu d'aider les développeurs Android à créer des applications de haute qualité encore plus rapidement et sans solutions supplémentaires au zoo. Et en prime, ils ont facilité l'entrée des développeurs Android dans le développement. Je pense que Jetpack a fait face à la tâche.
Le résultat a été un ensemble sympa qui résout les tâches de la plupart des développeurs. Mais nous pouvons dire avec certitude dans environ 6-12 mois, lorsque nous arriverons à la sortie de la plupart des innovations. Jusqu'à présent, cela a empêché de nombreuses personnes de commencer à utiliser AJP en production.
Denis Neklyudov : Google n'a pas fait AJP à partir de zéro, mais a combiné de nombreux développements utiles qui ne sont pas inclus dans le cadre lui-même et sont intégrés dans des applications par leurs développeurs. C'est une bonne idée de les combiner sous un nom à la mode et dynamique. Il est bon pour les développeurs qu’il existe désormais une seule
ressource où vous pouvez trouver une solution officielle à de nombreux problèmes. Au moins, c'est pratique.
Bien sûr, tout ce qui est inclus dans cet ensemble n'est pas prêt à être utilisé dans des applications sérieuses, quelque chose est encore au stade du développement actif et du débogage. Du cadre lui-même, il y a un sentiment persistant de la version bêta, je ne vais vraiment pas faire pression sur le patient et discuter de l'IDE. Mais nous sommes habitués à Android.
Dans cette liste de bibliothèques et de solutions, chacun trouvera quelque chose d'utile pour lui-même. Et pour les développeurs débutants, c'est une ressource absolument obligatoire pour se familiariser, afin qu'ils ne marchent pas sur un râteau connu, mais essaient d'abord des moyens plus ou moins officiels pour résoudre leurs problèmes.
Quelles sont les perspectives de développement d'AJP? Quoi de neuf l'an prochain?Alexander Smirnov : Nous avons maintenant de nombreux nouveaux développements, donc, tout d'abord, ils doivent être finalisés et stabilisés. Ensuite, je m'attendrais au développement systématique de chacun des composants et des outils, peut-être un léger ajout de quelque chose de nouveau. Jetpack était un pas en avant, donc dès l'année prochaine, je m'attends à des améliorations systématiques, mais après une autre année, cela peut être très intéressant. Ce qui vaut vraiment la peine d'attendre l'année prochaine, c'est une intégration plus dense et pratique avec Android Studio.
Denis Neklyudov : AJP se développera à chaque nouvelle tâche résolue, qui a été mise dans le domaine public. Avec chaque version d'Android, le framework Jetpack sera également développé sous la forme d'AppCompat et de composants matériels. Ce qui apparaîtra dans un avenir proche est difficile à dire, j'attends l'ajout d'azote - un ensemble d'utilitaires pour tester les applications à grande échelle.
À l'échelle mondiale, Google étend constamment les capacités du navigateur, à quoi cela peut-il conduire à l'avenir?Denis Neklyudov : Je répète constamment qu'il n'est pas nécessaire de percevoir certaines étapes de Google comme quelque chose de global et de centralisé. Si l'équipe Chrome a suffisamment de ressources pour développer AMP, PWA, et maintenant aussi WebAssembly, cela ne signifie pas qu'il y a un complot pour prendre et transférer tout le monde sur le Web d'ici 202 .... Comme le développement Flutter, cela ne signifie pas que nous utiliserons tous ce cadre, puis Android sera condamné à mourir, car d'abord ChromeOS, puis Fuchsia reprendront tous les appareils des utilisateurs. Cet été, Jake Wharton a parlé à Droidcon Berlin sur la façon dont la frontière entre le Web et les applications natives s'estompe. Il peut être déduit du rapport que dans la situation actuelle, il est nécessaire de prendre en charge correctement toutes les plates-formes séparément et d'essayer de réutiliser le code entre elles. Cependant, si vous pensez qu'Internet peut être très haut débit, stable et bon marché partout dans le monde, alors les applications Web ont peut-être une chance de dominer. Mais jusqu'à présent, c'est à peine cru.
Alexander Smirnov : La transition des applications natives aux applications Web progressives est le rêve de millions de développeurs Web, de chefs de produit et d'un grand nombre d'autres personnes. En choisissant une application PWA au lieu d'un mobile, l'entreprise simplifie le développement, l'utilisation, la mise à jour et l'attraction des utilisateurs. PWA est une bonne solution pour un large segment d'applications mobiles simples, et nous ne pourrons pas abandonner complètement le développement natif très bientôt.
Eh bien, qui est intéressé à écouter les nouvelles du monde du développement Android en direct, à découvrir beaucoup de choses intéressantes sur les derniers plans insidieux de Google Enclave, à discuter directement avec des experts, nous attendons à notre conférence
AppsConf 2018 .
Pour ceux qui préfèrent tout étudier à la maison, nous avons une chaîne YouTube où les vidéos AppsConf seront téléchargées (quelques mois après la conférence).
Et les annonces de tous les événements et du matériel utile, y compris les futures conférences, les annonces des meilleurs rapports, les invitations aux réunions, les rapports décryptés et les articles utiles, nous publions sur notre liste de diffusion .