mardi 15 mars 2011

Introduction à Android

Présentation

C'est en Novembre 2007 que Google annonce la sortie de Android, sa plateforme dédiée au début aux smartphones et maintenant étendus à d'autres terminaux tels que les tablettes, les voitures et même les télévisions. La première version stable date de 2009 alors que le premier smartphone sous Android, TG-Mobile G1, apparaît sur le marché en 2008. Dans le langage courant on parle de Android comme un système d'exploitation pour plateformes mobiles. Mais sur le site officiel il est présenté comme une pile de logiciels (software stack) dont un OS, le noyau de Linux pour tout ce qui est relatif à la gestion de la mémoire, des processus et des périphériques.




La plateforme Android se distingue de ses principaux concurrents (iOS, Symbian, Windows Mobile) par sa gratuité, son caractère Open Source et son SDK qui supporte une bonne partie de Java SE, ce qui facilite et accélère son adoption par la très grande et dynamique communauté de développeurs Java. Pour des contraintes de performance certaines librairies comme RMI et JDBC ne sont pas implémentées par le SDK, et pour ce qui est de la gestion de l'interface graphique Android propose sa propre plateforme, à la place de Swing et de AWT.

Android dispose aussi de sa propre machine virtuelle nommée Dalvik VM (basée sur une architecture de registres par opposition à la JVM standard qui est basée sur les piles) suffisamment optimisée pour les terminaux mobiles de sorte que chaque application puisse s'exécuter dans son propre processus et utiliser sa propre instance de machine virtuelle. Le code Java est compilé en .class et exécuté dans le format .dex (Dalvik Executable) qui, pour une même classe donnée, peut être jusqu'à deux fois plus légers qu'un .jar.

Le principal défaut de Android, très mis en avant par ses concurrents, est sa fragmentation (la forte fréquence de sortie des versions) qui – parce que la compatibilité ascendante n'est pas toujours assurée- rend la portabilité des applications complexe. Entre 2009 et 2011 il y a eu pas moins de six versions.

Les composants

Android dispose d'une palette de composants qui constituent la brique de base des applications de la plateforme. Leur compréhension est nécessaire pour faire ses premiers pas dans le développement.

View
La vue est le composant graphique de base qui permet d'interagir avec le système. Les vues les plus utilisées sont les boutons (Button), les zones de texte (TextEdit), les labels (TextView),

Activity
Une activité peut-être considérée comme l'équivalent d'une fenêtre dans les applications Desktop ou d'une page web dans les applications web. Elle est généralement composée de vues. Avec Swing un composant graphique est intégralement écrit avec du code java, on peut procéder de la même manière pour créer des activités mais la nouveauté avec Android est la prise en charge de l'externalisation des ressources qui permet l'intégration de fichiers XML en plus du code java. Google reprend à ce niveau la même logique que celle que l'on trouve dans les pages web où est faite une séparation nette entre la partie statique (HTML), la partie dynamique (Javascript) qui gère l'interaction avec l'utilisateur et la partie qui traite la mise en forme des éléments graphiques (les feuille de style CSS).

Service
Un service est un composant sans interface graphique - qui consomme moins en énergie et en mémoire qu'une activité - conçu pour exécuter des traitements qui ne requièrent aucune interaction directe avec l'utilisateur. Contrairement aux idées reçues son rôle n'est pas d'executer des tâches de fond, puisqu'il s'exécute dans le thread principal. Il faut plutôt penser à utiliser des threads pour effectuer des traitements longs sans porter atteinte au bon fonctionnement des autres composants de l'application.
Deux types de service existent :
- LocalService (service local) : il est attaché à une application qui est la seule à pouvoir l'invoquer.
- RemoteService (service distant) : c'est un type de service qui peut être utilisé par plusieurs applications différentes. Il tourne dans son propre processus et est utilisé généralement pour faire communiquer deux applications par le biais des IPC (Inter Process Communication) . 
 
Intent
L'Intent (intention) peut être défini comme une description abstraite d'une opération à effectuer ou comme un message que l'application envoie au système pour notifier une ou plusieurs autres applications. Pour démarrer une activité, ou un service on passe obligatoirement par les Intents. Il peut être explicite (en définissant clairement le composant qui doit effectuer la tâche demandée) ou implicite (en laissant le système choisir un composant candidat à l'exécution de la tâche demandée). On peut pour une application définir des intentions ou choisir les intentions auxquelles ont est susceptible de réagir.

Content Provider
Le Content Provider (Fournisseur de Contenu) est un mécanisme qui permet à plusieurs applications de pouvoir partager des données. La liste des contacts est un exemple de donnée exposée via le Content Provider pour être accessibles par toute application ayant les droits nécessaires aux différentes opérations possibles (lecture/écriture).