Le partage, c'est dans les gènes d'android, et sa force : explications

Par franck_29 - Le 28/11/14 - Affichages : 3895
Cela fait des années que j'ai l'idée de faire un article de vulgarisation sur le partage Android, car c'est sans doute sa force majeure et personne n'en parle. Il y a en effet dans android, comme une sorte de magie par laquelle n'importe quelle application peut partager avec n'importe quelle autre, n'importe quel type de contenu.
Alors bien sûr, c'est tellement naturel et simple, comme une évidence, qu'on finit par l'oublier.

En fait, on s'en rend vraiment compte quand la magie disparaît, quand par exemple on change de système. L'idée de le faire aujourd'hui me vient en fait d'anciens utilisateurs d'android passés récemment sur iOS d'Apple et en particulier sur le dernier modèle. Sachez que parmi eux se trouvent d'anciens membres du forum (hommes de peu de foi ;)). Oui et devinez ce qu'ils disent : "iOS c'est bien (je passe sur les superlatifs pas forcément crédibles dans la mesures où ils prononçaient les même superlatifs il y a deux mois sur d'autres matériels) mais ils manque le partage". et ils poursuivent en disant, au choix ou les deux :
"1/ Pas grave ça viendra dans la prochaine version
2/ C'est bizarre que les développeurs ne le fassent pas."

Et bien au risque de leur déplaire, sur ces deux points les choses risquent de ne pas être si simples.

Et pour s'en persuader, il faut creuser un peu la question du partage sous android, et se rendre compte qu'elle est traitée au cœur même du système, que le partage est en fait un élément constitutif de l'OS, et à tous les étages. Ce n'est pas une simple surcouche, ou une application dans son coin qui gère cela, loin de là.
Ensuite, les pauvres développeurs d'applications tierces sur iOS, n'y peuvent strictement rien non plus. Tout au plus peuvent-ils détecter que telle autre application est présente sur le système et dès lors envisager d’échanger avec elle. mais nous sommes loin du compte, de ce que permet, par construction, le système Android.

Entrons un peu dans le détail.

Android, un système bâti comme un puzzle particulier, dans lequel tout s’emboîte et tout est interchangeable

Nous sommes habitués aux systèmes d'exploitation multitâches, des processus s'exécutent en même temps et au sein d'eux, parfois, des sous-processus s'exécutent également en parallèle (des threads). Alors que tout ce petit monde travaille en même temps dans son coin, c'est bien beau, mais il faut que chacun communique avec l'autre, sinon on n'arrivera à rien (c'est comme la vraie vie), pour passer ses résultats à un autre processus qui va les afficher par exemple. On appelle cela des mécanismes de synchronisation.
Historiquement ces mécanismes de synchronisation sont plutôt "rustiques", envoi de signaux, partage de zone de mémoire, envoi de message etc...

Android apporte en fait une approche de beaucoup plus haut niveau à la synchronisation et à l'échange inter-application, une couche d'abstraction supplémentaire, presque une couche métier "du partage".

Pour commencer, une application c'est quoi

Sur Android une application se constitue de 4 composants, 4 familles de composants en fait :
  • Des activités (les actions "métiers" que doit faire l'application, par exemple lire une musique, ou afficher la liste des musiques disponibles etc...)
  • Des services (des tâches de fond qui ne requièrent pas d'interaction avec l'utilisateur)
  • Des fournisseurs de contenus (évoqués plus bas, content provider en anglais)
  • Des capacités d'écoute (broadcast reveiver en anglais, la traduction est de moi, donc pas complète)

Et chaque composant d'une application va pouvoir être invoqué, (indirectement car le système Android fait l'intermédiaire, question de sécurité), par n'importe quel composant d'une autre application. (c'est le mécanisme d' intent, "j'ai l'intention de lancer telle activité" qui va être invoqué par les applications pour faire concourir d'autres applications). En réalité, les composants "fournisseurs de contenu", ne sont pas invoqués par le mécanismes d'intent, j'en parlerai plus bas, car ils sont la clé du "partage magique".

Premier point important, le développeur ne sait pas forcément quelle application va répondre à son intention

Et c'est via ce mécanisme, que si vous souhaitez (avez l'intention de) envoyer du contenu, et que vous n'avez pas précisé par quel moyen le faire, le système affichera la liste de toutes les applications du système capables d'envoyer du contenu (SMS, eMAIL, etc...).
Au passage cela veut dire que le système Android se positionne en véritable "superviseur" des applications installées, et sait laquelle est capable de quoi (son développeur en déclare effectivement les capacités au système qui en prend connaissance (et bonne note pour plus tard) lors de son installation).

"Quand vous codez un intent, vous devez préciser l'action que vous souhaitez invoquer. Android en définit quelques uns, par exemple ACTION_SEND qui, comme vous vous en doutez, indique que votre intent doit envoyer des données d'une activité à une autre, même vers d'autres applications. Pour envoyer ces données à une autre activité (activity), tout ce que vous devez préciser c'est la donnée et son type. Le système va alors identifier les activités potentiellement compatibles est les afficher" (Extrait traduit de http://developer.android.com/training/sharing/send.html )

On a là l'implémentation aboutie d'un système conçu pour la réutilisation du code, modulaire à l'extrème où chaque composant va pouvoir invoquer d'autres composants, en ayant le moins possible à re-développer.

Second point décisif, l'exposition de contenu

"De la même façon, vous pouvez (en tant que developpeur de votre application) annoncer au système, les types de données que vous être capables de traiter, cette annonce se fait dans le fichier manifest.xml (un des sources de l'application)" (Extrait traduit de http://developer.android.com/training/sharing/send.html )

Du coup, la fameuse fonction "share android" qu'il est possible de créer dans votre application en quelques lignes seulement, va utiliser ce mécanisme pour proposer du contenu, en partage avec d'autres applications. Car si dans votre application vous proposez du texte, une image, une musique, en partage, tout se passe comme si vous disiez au système "je veux partager cette musique", Android, dans sa fonction de supervision évoquée plus haut, sait parfaitement, dans la liste des applications installées, lesquelles vont pouvoir faire quelque chose avec cette musique.
Il ne reste plus alors qu'à les afficher.
C'est le système qui gère et met en oeuvre cette capacité, on voit bien que le développeur à qui on reprochait, sur iOS de ne pas le faire, (cf. introduction) n'y est pour rien et n'y peut strictement rien.

En fait, le système Android permet d'aller bien plus loin que ces simples partages d'images ou de texte, en permettant à une application d'exposer des données bien plus complexes. Cette exposition se réalise avec la notion de Content Provider (souvenez vous ce composant d'une application que nous n'avions pas détaillé plus haut). Je ne vais pas en dire plus, les curieux pourront se rendre sur l'adresse : http://openclassrooms.com/courses/creez ... plications où tout est expliqué.

Conclusions

Cet article, nécessairement imprécis, voire faux par endroit à force de vulgarisation (et d'incompétence de ma part), a tenté de montrer comment la notion de partage était intimement imbriquée au sein d'android. C'est une capacité qui est à la base de la construction de ce système hautement modulaire, où tout est prévu pour être interchangeable, c'est un fondement de son architecture.

Donc, oui vous ne trouverez pas cette capacité sur iOS, et si on l'y trouve un jour, à ce niveau de potentialité, dites vous bien que c'est que l'ensemble aura été réécrit, et que donc, cela prendra des années, mais est-ce vraiment un objectif ?

Au final, Android est un système bien en phase avec son époque, où tout est partage et interaction. Il est même probable que cette fonctionnalité, souvent passée sous silence soit en grande partie responsable du succès qu'il connait aujourd'hui. J'ai la conviction que bien au delà de la cosmétique de l'interface utilisateur, la vraie force d'android, c'est cette capacité de partage ouverte.


Sources :
http://developer.android.com/guide/comp ... ntals.html
http://developer.android.com/training/sharing/send.html (toute la série)
http://openclassrooms.com/courses/creez ... plications
http://openclassrooms.com/courses/creez ... composants
http://fr.wikipedia.org/wiki/Type_MIME


Image
3 réponse(s) -