Hello World détaillé avec Android

Généralement un Hello World, c’est assez simple. A moins de coder en BrainFuck, évidement. Mais il y a des Hello World plus compliqués que d’autres, par exemple la version Java :

public class Hello {
 
  public static void main(String[] args) {
 
    System.out.println("Hello, World");
  }
 
}

… est nécessairement moins évidente que son équivalent Python :

print "Hello, World"

Android utilisant une syntaxe Java, vous deviez déjà vous attendre à quelque chose de verbeux. Après avoir faire le premier tutoriel sur l’installation de l’environnement de travail, vous avez du voir la grosse machinerie arriver, et vous n’avez pas tord.

Dans ce tuto, vous allez apprendre à faire dire au robot « bonjour », mais vous allez surtout comprendre la structure interne du système : comment tout s’organise à l’intérieur pour que ça marche et ce que vous devez en faire. Programmer avec Android, c’est beaucoup plus que faire du Java.

Les pré requis sont simples :

  • Avoir fait le tuto précédent;

  • Avoir déjà ouvert un fichier XML sans tomber dans le comma.

Connaître le HTML est un plus, mais aucunement indispensable.

Temps à consacrer : 1 bonne grosse heure.

Le chemin que fait votre « Hello »

Je vous ai menti : Android n’utilise pas vraiment Java. En fait, il utilise une syntaxe Java et une grande partie de sa bibliothèque, mais ce n’est pas la machine virtuelle de Sun qui fait tourner la boîte de conserve. Google a créé un système spécialement adapté au monde du téléphone mobile, avec tout un environnement dédié, et coder Android, ça veut dire apprendre tout ça. Et comment mange-t-on un éléphant ? Un repas à la fois…

Les schémas qu’on trouve sont le Web sont généralement une publicité pour Nurofen, donc je vous ai concocté la version allégée. Voici à quoi ressemble Android, une fois les pare chocs retirés :

1 - Le matériel. Ça peut être n’importe quoi, en fait je dis un téléphone, mais on peut imaginer un Netbook, un terminal GPS, etc. Android se charge de faire abstraction de tout ça pour nous et nous n’aurons normalement jamais à accéder au matériel directement, matériel qui sera de toute manière propriétaire, et complètement fermé comme le plus souvent.

2 - Le système d’exploitation. C’est du Linux, mais ça ne veut pas dire que vous pourrez tripatouiller pour autant. Android ne laisse aucun accès au système sous-jacent pour des raisons de performances et de sécurité. Les seules fois où vous serez rappelés au bon souvenir du manchot sera lors des petites séances de shell sur le téléphone que nous ne manquerons pas de faire ensemble. GNU et Linux étant libres, tout comme Android, vous pouvez cependant avoir accès aux sources et faire ce que vous voulez avec. Ce ne sera pas l’objet des tutos ici qui se limiterons à la programmation dans le cadre du SDK. Pas d’accès au système de fichier, de pipe ou de fork, donc.

3 - La Machine Virtuelle made in Google, alias Dalvik, se charge d’isoler votre code du reste du système (et des autres applications !). En gros, rien ne peut empiéter chez le voisin. Elle fait tourner votre code, mais vous n’aurez pas accès à plus de détails. Il est prévu dans de futures versions de pouvoir coder certaines parties de votre application en code natif, mais pour le moment, vous êtes cantonnés au Java.

4 - Le kit de développement est codé en Java, c’est votre unique porte d’entrée vers le système. Il est très flexible et tout peut être étendu, surchargé, etc. Mais pas remplacé. En clair, l’ouverture du SDK est au bénéfice de votre code, et limité à celui-ci.

5 - Les applications. Enfin ! C’est là où vous vous trouvez. Et c’est aussi là ou toutes les applications de Google se trouvent : mail, lecteur de musique, affichage des contacts, même le bureau… Il n’y à aucune différence entre vos applis et celles de Google. Ca veut donc dire que vous pouvez ajouter, supprimer ou remplacer n’importe quelle partie de ce groupe.

Qu’est-ce que ça vous apporte, toute cette belle théorie ? Et bien cela permet de comprendre le cheminement suivant du fameux « Hello, World » :

1 - On code comme en Java : même syntaxe, mêmes paradigmes.

2 - On exporte le code en package APK spécialement faits pour Android. Le code « Java » est alors transformé en bytecode puis en quelque chose de plus facile à interpréter pour la machine virtuelle Dalvik. Vos classes se retrouvent toutes dans un gros fichier .DEX (Dalvik EXecutable).

3 - On upload tout sur le téléphone ou l’émulateur. Android fait automatiquement le processus d’installation, vérification de version, checks de sécurité, etc. Pas besoin de se préoccuper de faire un installeur ou de vérifier les permissions, etc.

4 - Au lancement de l’application, le code est interprété par Dalvik qui à accès aux classes du SDK déjà installées d’origine sur le système et permet donc de faire tourner votre joli code en donnant les ordres appropriés au système Linux sous-jacent qui lui-même commande au matériel sans que vous ayez à vous en soucier.

C’est bon vous avez suivi ? Parce qu’on va rajouter une couche supplémentaire : les XML.

Arborescence d’un projet Android et utilisation des vues XML

Quand vous avez créé le projet lors du tuto précédent, vous avez du voir le nombre de dossiers assez impressionnant qu’un projet vide contenait. C’est parce qu’Android donne une place à chaque chose, et s’attend à retrouver chaque chose à sa place. Nous allons parcourir rapidement l’arborescence standard d’un projet, on rentrera dans le détail au fur et à mesure des tuto.

1 - SRC : C’est là que l’on met le code Java sous forme classique de packages et de fichiers de classes. Pourtant ce n’est pas ici que vous mettez « Hello, World ! », nous verrons par la suite pourquoi.

2 - Gen : un dossier spécial qui contient les fichiers générés automatiquement par Eclipse. Un fichier particulièrement important s’y trouve, le fichier R.java, qui est une classe Java normale si ce n’est que vous ne devez jamais y toucher. Elle est mise à jour en permanence par Eclipse, sans aucune action de votre part.

3 - Cette partie contient les dépendances du projet, en l’occurence le SDK. On pourra aussi rajouter par la suite des bibliothèques externes, par exemple sous forme de JAR. Pour le moment, nul besoin d’y toucher.

4 - RES : un dossier sur lequel vous allez passer beaucoup de temps ! Il contient toutes les ressources de votre projet, et notamment les images, mais surtout les XML. Or pour bénéficier de toute la puissance d’Android, nous allons utiliser massivement ces fichiers pour stocker, entre autres, la mise en page et les chaines de caractère.

5 - Les propriétés du projet. Le fichier manifest.xml contient en l’occurence toute la configuration de base du projet. Pour commencer, nul besoin de comprendre tout son fonctionnement, on y reviendra plus tard.

Mais alors, où est le « Hello, World » ? Il est dans le fichier res/layout/main.xml !

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
 
   <!-- ICI -->
   <TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
 
</LinearLayout>

En effet, ce sont les fichiers du dossier layout qui définissent la mise en page, ce qui inclus :

  • Les éléments qui apparaissent à l’écran (ici du text, là une checkbox, là une image…).

  • Leur position.

  • Leur taille.

  • Etc.

Si ça vous rappelle le HTML, c’est normal…

Et pourtant dans main.xml, il n’y a marqué nul part « Hello, World ». C’est parce que main.xml fait référence (en utilisant android:text=”@string/hello”) à une chaine de caractère contenu dans /res/values/strings.xml :

	<?xml version="1.0" encoding="utf-8"?>
	<resources>
	     <!-- ICI -->
	    <string name="hello">Hello World, HelloWorld!</string>
	    <string name="app_name">HelloWorld</string>
	</resources>

En apparence, on à l’impression de prendre beaucoup de détours pour faire un simple affichage. Mais dès que les choses deviendrons compliquées, cette séparation va devenir très pratique pour :

  • Changer l’apparence de l’application sans changer la logique.

  • Traduire les chaines en plusieurs langues.

  • Faire des mises à jours à un seul endroit plutôt qu’un peut partout dans le code.

Pour vous en convaincre, changez :

Hello World, HelloWord!

En :

Ceci est mon nouveau Hello, World

Relancez le programme pour voir votre modification.

Le Java sert en fait à la partie « mécanique » : rendre le contenu dynamique, rafraichir, faire les transitions, gérer les événements, l’accès à la base de données, etc. Pour le « Hello, World », ça ressemble à ça :

package word.hello;
import android.app.Activity;
import android.os.Bundle;
 
public class HelloWord extends Activity {
 
  /** Called when the activity is first created. */
 
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }
 
}

Dans le prochain article, nous détaillerons ce qu’est une Activity. Pour le moment, sachez juste que le passage clé est setContentView(R.layout.main); qui appelle la vue contenue dans main.xml qui récupère les chaînes dans strings.xml.

Aller, on finit ce tuto avec un dernier schéma. A l’éxécution, voilà ce que fait votre « Hello, World »

Si vous avez bien suivi, vous devriez avoir un léger sentiment de flou. C’est normal. Pour le moment avec ce que vous savez vous ne pouvez pas encore coder votre propre application. Ce sera l’objet du prochain chapitre, un petit programme simple qui demande votre nom et qui vous dit bonjour. Ce sera l’occasion de voir en détail comment on se sert de la palette d’outils que l’on a survolé aujourd’hui.

9 Réponses à “Hello World détaillé avec Android”

  1. Arrnaud Dit:

    Teès bonne intro.
    Pour en avoir lu plusieurs, celui-ci est très clair.
    J’attends impatiemment la suite ;)

  2. E-vidence » Blog Archive » Votre première application Android Dit:

    [...] du dernier tutoriel nous avons vu quel chemin faisait un « Hello World » avec Android. Aujourd’hui; nous allons faire un pas de plus en détaillant les bases de la construction [...]

  3. Yann Dit:

    Super je viens de découvrir ce site, franchement, les tutos sont excellents. Un grand merci pour tout ce boulot. Je voulais me lancer dans le développement Android, mais je savais pas très bien par où commencer, et surtout, je ne savais pas trop à quoi correspondait toute cette machinerie ^^
    Thank you so much !!

  4. Cedric Dit:

    C’est une évidence ! Quand on maîtrise son sujet on peut l’expliquer à n’importe qui.
    Félicitation, j’ai envie de développer ma première app pour Android :)

  5. Chris Dit:

    Vraiment EXCELLENT ce tuto :D
    MERCI beaucoup ! j’ai hâte de lire la suite :p

  6. Dominux Dit:

    Clair, simple, précis … aucun flou dans ce tuto, plutôt une limpidité qui apparaît sur la structure du dev Android!

  7. nouvelesprit Dit:

    merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii bien
    c très util!

  8. elwanis Dit:

    merci

  9. XzZy Dit:

    Salut, J’avais du mal à comprendre ce que le XML venait faire dans une application (je ne connais que le C/C++ et le java (un peu d’assembleur aussi :p)) et javais peur de devoir me taper l’apprentissage d’un nouveau langage .Mais après m’être renseigné sur le XML et lu ce premier tuto , je commence à comprendre. Je vais lire la suite :p

    Merci en tout cas !

Ça se comprend tout seul