Développer une application mobile sous Android

#android#ide#java#mobile

Ayeba et Osaxis coopèrent pour apporter leurs expertises d’organisation et de développement d’applications web et mobile. Cette publication est la première d’une série destinée à partager nos savoir-faire dans le domaine du développement d’application mobile.

1. Origine et présentation d’Android

Android est un système d’exploitation basé sur le noyau Linux, destiné aux téléphones portables, tablettes tactiles, et autres terminaux mobiles. C’est en 2007 que Google, après le rachat de la société Android Inc., annonce l’objectif de développer des standards dits “open source” pour appareils mobiles. Parmi les constructeurs qui ont déjà opté pour le système d’exploitation Android, nous pouvons citer HTC, avec une large gamme de téléphones portables dont le Nexus One (de Google) ; Samsung avec ses gammes Galaxy Spica, Tab, Teos et S ; Sony Ericsson ; Motorola etc.

En forte progression depuis un an, Android est actuellement un des systèmes d’exploitation mobile les plus représentés en France. La course à la prise de parts de marché s’intensifie avec par exemple Nokia qui abandonne son système d’exploitation Symbian OS au profit de Windows Phone 7, développé par Microsoft. Certains constructeurs ont finalement pris le pari de sortir des équipements mobiles sous deux systèmes d’exploitation, WP7 et Android en l’occurrence pour HTC.

Au niveau du développement d’applications, Android utilise un Framework Java et propose un environnement de développement complet comprenant un émulateur, un débogueur et un analyseur de mémoire et de performance. Cet article présente et décrit les différents aspects du développement d’applications sur Android. La version actuelle d’Android est la 2.3 Gingerbread (Pain d’épice) sortie le 6 décembre 2010, même si la plus utilisée reste pour le moment la 2.2 FroYo. Chaque nouvelle version d’Android apporte son lot de nouveautés, comme de nouvelles applications préinstallées dans l’OS, des améliorations de la gestion de la batterie, des évolutions sur l’interface utilisateur, ou la prise en charge de format vidéo et protocole de communication supplémentaires.

2. Environnement de développement

Le développement d’applications pour Android nécessite au préalable trois étapes indispensables :

  • L’installation d’un JDK (version 5 minimum), nécessaire pour les développements Java ;
  • L’installation du SDK (Software Dévelopment Kit) Android, qui correspond au kit de développement de Google. Ce kit, téléchargeable gratuitement, contient l’ensemble des outils permettant le développement d’application Android, ainsi qu’un émulateur d’équipement mobile pour tester et faire fonctionner ses applications ;
  • L’installation d’un environnement de développement Java et de son plugin adapté, permettant de créer des projets Android, de développer des applications, ainsi que de compiler et lancer les applications sur l’émulateur ou directement sur un mobile connecté en USB.

L’outil de développement le plus répandu dans le domaine est Eclipse (version 3.5 minimum) proposant le plug-in ADT (Android Development Tool). Cette solution est bien documentée et semble être la plus aboutie actuellement sur le marché. Il existe néanmoins des plug-ins Android pour les autres outils de développement Java tels que Netbeans ou IntelliJ.

3. Arborescence d’un projet Android

Tout comme bon nombre de technologies actuelles, les sources d’une application Android possèdent une structure bien définie qui doit être respectée. Ces arborescences permettent non seulement de rendre les projets plus lisibles et organisés, mais aussi de simplifier le développement en supprimant les contraintes de référencement des ressources. Lors de la création d’un nouveau projet, voici l’arborescence qui est automatiquement générée :

  • src : répertoire contenant l’ensemble des sources du projet. Il contient les classes de type activité (voir ci-dessous) qui gèrent entre autre le cycle de vie d’une page, mais aussi les classes permettant de piloter les différentes fonctions de l’application.
  • gen : répertoire contenant l’ensemble des fichiers générés par le plugin correspondant à l’environnement de développement. Aucune modification ne doit être faite dans ces fichiers.
  • androidManifest.xml : fichier XML décrivant l’application et ses composants, tels que les activités, les services etc. Lors de la création d’une activité, une erreur courante pour un premier projet Android est d’oublier de la déclarer dans le fichier manifeste. C’est une étape indispensable pour le fonctionnement de l’application. Le manifeste est en quelque sorte la carte d’identité de l’application, et permet d’autoriser l’exécution des activités et autres actions de l’application (fonctionnement que l’on retrouve dans différents formats d’application J2EE).
  • res : répertoire contenant toutes les ressources telles que les images, les vues de l’interface graphique, etc. nécessaires à l’application. Ce répertoire est structuré par défaut de la manière suivante :
    • res/drawable : contient les ressources de type image ;
    • res/layout : contient les descriptions des interfaces graphiques au format XML (les vues) ;
    • res/xml : contient les fichiers XML supplémentaires (non présents par défaut) ;
    • res/menu : contient la description des menus, composants très courants d’une vue ;
    • res/values : contient diverses ressources, tels que les textes, qui sont empaquetées sans aucun traitement.

Au moment de la compilation du projet, l’application finale est générée au format APK, dans le répertoire « bin » de l’arborescence. C’est ce fichier qu’il faut ensuite déployer sur les équipements afin de pouvoir faire tourner l’application.

4. Principe de programmation

La programmation sous Android est composée de plusieurs éléments fondamentaux : les activités, les vues, les ressources et le manifeste.

Les activités

Une activité correspond à une page de l’application et se place dans le dossier “src” de l’arborescence. Concrètement, il s’agit d’une classe héritant de la classe Activity, et qui comprend un ensemble de méthodes correspondant au cycle de vie de cette page. Le développeur surcharge ces méthodes en fonction des besoins, tels que le démarrage d’une activité, l’initialisation de la page ou la destruction de l’activité. Cette classe comprend également le code des évènements et des actions que peut effectuer l’utilisateur, comme l’enregistrement des données, la navigation vers d’autres pages, le démarrage d’un service etc.

Voici un exemple de la structure d’une activité :

L’enchaînement des activités est similaire à une pile. Au démarrage d’une nouvelle activité, celle-ci est positionnée en haut de la pile. Il s’agit de l’activité courante de l’utilisateur. Lorsque ce dernier décide de revenir en arrière, cette activité est supprimée du haut de la pile, et l’utilisateur revient donc à l’activité précédente.

Les vues

Généralement, après quelques phases d’initialisation, la première action d’une activité est de lancer une vue. La vue représente l’interface graphique. Il s’agit de fichiers XML situés dans le répertoire “Layout” de l’arborescence. Pour créer une vue, le développeur a la possibilité de manipuler directement le fichier XML, qui décrit les éléments présents sur la page, tels que les champs de saisies, les boutons, les cases à cocher.

Voici un exemple du code d’un bouton et d’une case à cocher :

La première balise (LinearLayout) correspond à une zone de l’écran dans laquelle les éléments sont positionnés. Les deux balises suivantes (CheckBox et Button) représentent la vue d’une case à cocher et d’un bouton. Chaque balise est paramétrable à travers un ensemble de paramètres tels que la largeur (android:layout_width) ou l’image de fond (android:background).

Mais il existe également des outils “WYSIWYG” permettant de créer une vue de façon graphique, à savoir de “glisser/déposer” les composants souhaités sur la vue et de visualiser directement le résultat. Chaque élément mis en place est bien sûr paramétrable via la modification de ses propriétés. Il est également possible de créer et d’ajouter des éléments à une vue directement à partir de l’activité. Cette dernière solution, bien que non recommandée, peut parfois s’imposer aux développeurs en fonction de contraintes, telles que le chargement dynamique de contrôles. Dans tous les cas, chaque élément de la page est ensuite accessible et manipulable par l’activité qui a lancé la vue.

Les ressources

On appelle “ressource” tous les éléments tels que les images, les textes et autres fichiers qui sont utilisés par la vue. C’est entre autre grâce à ces ressources qu’il est possible de gérer le multilinguisme, les différentes tailles d’images, etc.

Le manifeste

Le dernier élément fondamental d’une application Android est le manifeste, qui contient la description de son application Android. Par exemple, le nom de l’application, le numéro de version mais également la liste de toutes les activités.

Avant de conclure cette partie, voici la présentation d’un autre élément incontournable du développement Android : les Intents. Les Intents représentent un mécanisme de programmation permettant de déclencher une activité ou une action au sein de l’application. Une des premières utilisations des Intents consiste par exemple à démarrer une seconde activité (ou page) de son application. Mais cette utilisation constitue une infime partie des possibilités de ce mécanisme, qui permet également d’envoyer des données, des messages ou de déclencher des activités d’une autre application. Par exemple, pour démarrer une activité d’appel téléphonique :

Intent intent = new Intent(Intent.CALL_ACTION);
intent.setData(Uri.parse(“tel:+33123456789”));
startActivity(intent);

Cet article présente les principes de base de la programmation sous Android, mais la plateforme comprend également un panel important d’API permettant de gérer la géolocalisation, l’appareil photo, l’accéléromètre (capteur permettant de mesurer l’accélération de l’appareil, secousses etc.) et autres fonctionnalités des smartphones actuels. Android gère de plus les graphismes en 3D via la librairie OpenGL.

5. Persistance des données

La persistance des données est un point essentiel de l’utilisation d’une application, et cela pour n’importe quel support ou plateforme. Le développement sous Android offre plusieurs possibilités concernant ce point. Voici un aperçu des différentes solutions, de la plus simple à mettre en place à la plus complexe. Il existe quatre moyens de faire persister des données, chacun ayant une utilité pour un cas défini :

– la première approche concerne la sauvegarde de l’état de son application, lorsque celle-ci est déchargée de la mémoire. Cet enregistrement, qui se fait dans la mémoire de l’équipement, est utile, par exemple lorsque l’utilisateur retourne sur une activité qu’il avait préalablement mise de côté, afin de retrouver l’état d’un formulaire au moment de la saisie.

– la seconde solution revient à enregistrer les paramètres ou préférences utilisateur. Il s’agit d’un ensemble de couples clé/valeur, stockées dans un fichier XML, permettant à l’utilisateur d’enregistrer le paramétrage de son application, ou même de son système (la langue, le type de menu, un fond d’écran…).

– le troisième cas concerne la sauvegarde de données propres à l’application. Il s’agit d’une sauvegarde par fichier plat. Android fournit un ensemble de fonctionnalités permettant de lire et écrire simplement dans un fichier.

– enfin, la dernière solution, plus familière au développeur, est l’utilisation d’une base de données SQLite. Pour ce cas, il s’agit d’un ensemble de tables accessibles via des requêtes SQL classiques. Il faut faire cependant attention à ne pas conserver les habitudes classiques d’utilisation d’un SGBDR, car les performances peuvent rapidement se dégrader dans un contexte embarqué. Ainsi, il est préférable d’éviter de créer des tables contenant une grande quantité de champs, ou des requêtes complexes comprenant moultes jointures.

6. Conclusion

Début 2011, Android fait partie des plus grands concurrents de l’iOS d’Apple, et le nombre de téléphones portables adoptant ce système d’exploitation ne cesse de croître. A la différence des systèmes propriétaires, Android permet de toucher une plus grande gamme de téléphones, et les constructeurs disposent même de la possibilité d’ajouter au système d’exploitation une couche d’interface personnalisée, comme l’interface Sense de HTC. De plus, un des grands atouts d’Android vient de son socle Java, facile à prendre en main et disposant déjà d’une importante communauté.

Android possède également un des plus grands référentiels d’applications (Android Market). Généralement, chaque application payante trouve son équivalent dans au moins une version gratuite. A noter qu’il existe d’autres référentiels d’applications Android tels que Getjar, Androlib, Amazon Appstore etc.

Concernant la publication d’applications sur l’Android Market, il est obligatoire de payer un droit d’entrée de 25 dollars US (environ 20 euros). En revanche, aucun contrôle n’est effectué pour garantir le contenu des applications, même si Google se réserve le droit de supprimer du Market une application au contenu illicite. Lorsqu’une application est payante, 70% de la vente revient à l’équipe de développement, 30% du montant étant reversé au constructeur du mobile et/ou à l’opérateur.

Pour conclure, Android présente un gros point fort vis à vis de ses concurrents grâce à l’adoption de Java. En revanche, les interfaces graphiques XML peuvent parfois être contraignantes et déroutantes, surtout pour les habitués du HTML. Un autre inconvénient réside dans les mises à jour du système d’exploitation, qui ne peuvent pas s’effectuer sur tous les téléphones. Ces mises à jour se révèlent en effet difficiles à suivre pour les non initiés. Enfin, Android ne dispose pas de la force de frappe marketing de ses deux grands rivaux que sont iOS (Apple) et Windows Phone (Microsoft) et doit pour s’imposer nouer des partenariats avec des constructeurs. Heureusement, en plus d’une base installée déjà très importante, Android offre l’intégration d’Adobe Flash, les services Google, la liberté aux utilisateurs d’installer simplement ce qu’ils souhaitent sans passer par un outil tel qu’iTunes, une mémoire extensible, et surtout un système d’exploitation ouvert et basé sur Java.