TP_Tutoriel_AStudio
TP_Tutoriel_AStudio
TP_Tutoriel_AStudio
TP de prise en main
Dima Rodriguez
Polytech’ Paris Sud
Tutoriel AndroidT M
Dima Rodriguez
Décembre 2015
TP de prise en main
Table des matières
Préambule 4
1 Installation de l’IDE 5
2 Configuration de l’IDE 6
Installation des paquets supplémentaires et des mises à jours . . . . . . 6
Annexes 47
La classe R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Explication du code généré par défaut pour la classe Principale . . . . . 48
Cycle de vie d’une activité . . . . . . . . . . . . . . . . . . . . . . . . 51
2
Table des figures
2.1 SDK Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3
Préambule
Le système d’exploitation Android est actuellement l’OS le plus utilisé dans le
monde faisant tourner des smartphones, tablettes, montres connectées, liseuses
électroniques, télévisions interactives, et bien d’autres. C’est un système, open
source qui utilise le noyau Linux. Il a été créée par Android, Inc. qui fut rachetée
par Google en 2005. Le développement d’applications pour Android s’effectue
en Java en utilisant des bibliothèques spécifiques.
Le but de ce tutoriel est de vous familiariser avec l’esprit de développement An-
droid et ses bibliothèques. Nous introduirons les concepts de bases de création
d’application en mettant en œuvre quelques fonctionnalités simples. Ce tutoriel
n’est en aucun cas exhaustif, le potentiel des applications Android est beau-
coup plus ample, les exemples cités dans ce document ne devront pas brider votre
imagination ni votre curiosité.
Sur le site officiel pour les développeurs Android vous trouverez la documen-
tation des classes, des tutoriels ainsi que les lignes directrices pour préparer une
distribution Google Play. Un lexique à la fin de ce document définit quelques
mot du vocabulaire Android utilisé dans ce tutoriel.
4
1 Installation de l’IDE
Dans cette section nous allons décrire la procédure d’installation d’un environne-
ment de développement Android.
Attention : Il faut exécuter les étapes dans l’ordre cité ci-dessous.
a. Téléchargez le dernier JDK (Java Development Kit) que vous pouvez trou-
ver sur le site d’Oracle 1 .
b. Désinstallez des éventuelles versions antérieures du JDK
c. Installez le nouveau JDK
d. Téléchargez ’Android Studio. Il contient l’environnement de dévelop-
pement, le SDK (Software Development Kit) Android avec la dernière
version de la plateforme, ainsi qu’un émulateur.
e. Lancez l’exécutable pour démarrer l’installation et suivez le wizard 2
5
2 Configuration de l’IDE
1. Les images systèmes Intel nécessitent l’installation d’un accélérateur Intel (HAXM) que
trouverez sur le site Intel. Une fois l’outil installé il faut activer l’accélération dans votre BIOS
(activer Vt-x ). Si vous ne souhaitez pas installer un tel outil, prenez une image avec un processeur
ARM.
6
Tutoriel Android 7
Application name : c’est le nom qui va apparaitre dans la liste des appli-
cations sur l’appareil et dans le Play Store.
Company domain : c’est un qualifiant qui apparaitra dans le nom du pa-
ckage .
Package name : il est utilisé comme identifiant de l’application, il permet
de considérer différentes versions d’une application comme étant une
même application. Il doit être unique parmi tous les packages installés
sur le système.
Minimum required SDK : c’est la version Android la plus ancienne sur
laquelle l’application peut tourner. Il faut éviter de remonter trop en
arrière, ça réduirait les fonctionnalités que vous pourriez donner à votre
application. 1
c. Cliquez sur Next. Nous arrivons à la création d’une activité (un écran avec
une interface graphique). Sélectionnez Blank Activity (fig. 3.2a) et cliquez
Next.
1. Il est possible d’activer certaines fonctionnalités (non essentielles) de votre application
uniquement quand elle tourne sur une version qui les supporte. Pour plus d’informations consulter
cette page
8
Tutoriel Android 9
d. Renseignez les champs comme dans la figure 3.2b. Vous pourriez choisir
l’utilisation de fragments, mais pour faire simple nous poursuivrons sans
fragments. Chaque activité dispose d’un layout qui définit la façon dont
les composants seront disposés sur l’écran. Une activité peut être divisée
en portions (ou fragments) chacune ayant son propre layout. La notion
de fragment a été introduite pour favoriser la ré-utilisabilité de morceaux
d’activité (un fragment peut être définit une fois et réutilisé dans plusieurs
activités).
e. Cliquez sur Finish, le projet est crée.
Exécution de l’application
Sur un émulateur
Un émulateur permet de reproduire le comportement d’un appareil réel d’une façon
virtuelle. L’utilisation d’un émulateur nous évite d’avoir à charger à chaque fois
2. Si vous travaillez sur MAC OS, il n’y a rein de plus à faire. Si vous êtes sous Windows
reportez vous à https://developer.android.com/studio/run/oem-usb.html pour les
étapes d’installation Si Vous travaillez sous Linux reportez vous à https://developer.
android.com/studio/run/device.html.
composant selectionné
l'activité
Propritétés du
Explorateur Navigation entre vue graphique et xml
Output
Une fois que votre application est compilée, un fichier .apk est créé
i dans le dossier app\build\outputs\apk de votre répertoire de travail.
C’est l’exécutable de votre application. C’est ce fichier que vous de-
vez déployer pour distribuer votre application. Le contenu de ce fichier
peut être inspecté à l’aide de n’importe quel logiciel standard de com-
pression/décompression de fichiers.
Tout projet Android doit respecter une hiérarchie bien précise qui permettra au
compilateur de retrouver les différents éléments et ressources lors de la génération
de l’application. Cette hiérarchie favorise la modularité des applications Android.
A la création du projet, Android Studio crée automatiquement des dossiers pour
contenir les fichiers de code Java, les fichiers XML, et les fichiers multimédias.
L’explorateur de projet vous permettra de naviguer dans ces dossiers.
Les dossiers que nous utiliserons le plus sont java et res. Le premier contient le
code Java qui définit le comportement de l’application (situé dans le répertoire
de votre projet sous app\src\main) et le second comporte des sous dossiers (dans
app\src\main\res) où sont stockés les ressources qui définissent l’interface de
l’application (l’apparence).
ldpi low-resolution dots per inch. Pour des images destinées à des
écrans de basse résolution (~120dpi)
mdpi pour des écrans de moyenne resolution (~160dpi)
3. Vous remarquerez qu’un classe ApplicationTest est crée automatiquement par An-
droid Studio. Cette classe vous permet d’écrire un code pour tester les différentes fonction-
nalités de votre application plutot que de les tester “à la main”. Pour plus d’informations sur la
création de scénario de test consulter cette page.
un bouton.
Une interface utilisateur est en général constituée de ce qu’on appelle des ViewGr-
oups qui contiennent des objets de type View ainsi que d’autres ViewGroups.
Un View est un composant, tel un bouton ou un champ de texte, et les ViewGrou-
ps sont des conteneurs qui définissent une disposition des composants (Views)
qui y sont placés. ViewGroup définit la classe de base des différents layouts.
Comprendre le layout
La disposition de notre interface est définie dans le fichier content_principale.xml
situé dans le dossier layout de res. Ouvrez ce fichier.
plateforme:caractéristique=”valeur”
Par exemple le premier attribut xmlns:android précise où sont définis les ba-
lises Android utilisées dans ce fichier.
La balise <TextView>, fille de la balise <RelativeLayout>, définit un com-
posant texte qui sera placé sur le layout. En effet, c’est sur ce composant là qu’on
écrit le “Hello World” qu’affiche notre application. Cette chaine de caractère est
définie par l’attribut android:text.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/
res/android"
xmlns:app="http://schemas.android.com/apk/res-
auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
...
android:orientation="horizontal"
app:layout_behavior="@string/
appbar_scrolling_view_behavior"
tools:context="android.polytech.monappli.
Principale"
tools:showIn="@layout/activite_principale">
</LinearLayout>
<EditText
android:id="@+id/chp_saisie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/str_chp_saisie" />
Nous avons ainsi placé un champ de saisie avec les attributs suivants :
android :id permet de donner un identifiant unique à ce View qu’on utilisera
pour référencer cet objet à l’intérieur de notre code.
Le symbol @ est nécessaire pour faire référence à un objet ressource à partir
d’un fichier XML. id est le type de ressource et chp_saisie est le nom
qu’on donne à notre ressource. Le symbole + est utilisé pour définir un ID
pour la première fois. Il indique aux outils du SDK qu’il faudrait générer
un ID pour référencer cet objet. Le symbole + ne doit être utilisé qu’une
seule fois au moment où on déclare la ressource pour la première fois. Par
la suite si on veut faire référence à cet élément, à partir d’un XML, il suffira
d’écrire @id/chp_saisie.
android :layout_width permet de spécifier la largeur de élément.
“wrap_content” signifie que le View doit être aussi large que néces-
saire pour s’adapter à la taille de son contenu. Si en revanche on précise
“match_parent” comme on l’avait fait pour le LinearLayout, dans
ce cas le EditText occuperait toute la largeur de l’écran puisque sa lar-
geur sera celle de son parent c-à-d le LinearLayout
android :layout_height idem que pour le layout_width mais pour la hau-
teur
android :hint précise le texte par défaut à afficher dans le champ de saisie
quand il est vide. Nous aurions pu préciser directement la chaine de carac-
tère ici codée en dur, mais on préfère utiliser plutôt une ressource qu’on
définira dans strings.xml . Noter que l’utilisation de + ici n’est pas néces-
saire parce qu’on fait référence à une ressource concrète (qu’on définira
dans le fichier xml) et non pas à un identifiant que le SDK doit créer.
Privilégiez toujours l’utilisation des ressources strings plutôt que des chaines
i de caractères codées en dur. Cela permet de regrouper tout le texte de votre
interface dans un seul endroit pour simplifier la recherche et la mise à jour
du texte, de plus ceci est indispensable pour que votre application puisse être
multilingue. l’IDE vous affichera un avertissement en cas de non respect de
cette recommandation.
Après la modification du code que nous venons de faire, quand vous sauvegarderez
le fichier, un message d’erreur vous indiquera que l’identifiant str_chp_saisie
n’est pas connu. Nous allons donc le définir.
. Ouvrez le fichier strings.xml qui se trouve dans res>values
. Rajoutez une nouvelle string nommée str_chp_saisie et dont la valeur
est “Entrer un texte”
Votre fichier strings.xml ressemblera donc à ceci
<resources>
<string name="app_name">MonAppli</string>
<string name="str_chp_saisie">Entrer un texte</
string>
<string name="action_settings">Settings</string>
</resources>
Rajouter un bouton
. Dans le fichier strings.xml rajoutez une chaine de caractère qui s’appelle
"btn_envoyer" et qui vaut Envoi.
. Dans le fichier du layout rajoutez un élément <Button> tel que
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_envoyer" />
Lancez l’application. Vous devez voir un bouton à coté du champ de saisie (fig.3.8a).
Si vous souhaitez que votre champ de saisie occupe toute la largeur de l’écran
qui reste après le positionnement du bouton il faut spécifier un poids de 1 au
EditText et une largeur de 0.
<EditText ...
android:layout_weight="1"
android:layout_width="0dp"
... />
<activity
android:name=".AffichMessage"
android:label="@string/
title_activity_affich_message"
android:parentActivityName=".Principale"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="android.polytech.monappli.
Principale" />
</activity>
<resources>
...
<string name="title_activity_affich_message">
MonMessage</string>
...
</resources>
Lancement de l’activité
Pour faire communiquer les deux activés (l’activité principale et celle que nous
venons de créer) il faut passer par un Intent. Ce dernier représente l’intention de
faire quelque chose, et permet à l’activité principale de lancer l’activité d’affichage.
Dans la méthode envoiMessage() de la classe Principale :
. Créez une intention,
Intent intent = new Intent(this, AffichMessage.class);
Si nous souhaitons que le texte tapé dans l’activité principale soit affiché dans
l’activité d’affichage, il faut faire communiquer les deux activités de sorte à ce
que la première envoie le texte à la deuxième. Ceci s’effectue en utilisant le même
Intent qui a servi pour le lancement de l’activité. En effet une intention peut aussi
transporter un paquet de données.
Modifier la méthode envoiMessage() pour qu’elle contienne le code ci-dessous,
sans oublier d’importer les classes nécessaires.
public void envoiMessage (View view){
Intent intent = new Intent(this, AffichMessage.class);
EditText editText = (EditText) findViewById(R.id.
chp_saisie);
String message = editText.getText().toString();
intent.putExtra(MESSAGE_SUPP, message);
startActivity(intent);
}
champ de saisie que nous avions posé sur l’interface principale. Nous récupé-
rons ensuite la chaine de caractère que contient ce champ en appelant edit-
Text.getText().toString(). Cette chaine est ensuite stockée dans la va-
riable message qui est passée en paramètre à la méthode putExtra() de l’objet
intent afin de charger l’intention avec ce message. Afin que l’activité d’affichage
puisse identifier et récupérer les données supplémentaires transportées par l’inten-
tion il faut définir une clé pour ces données moyennant une constante publique.
Nous définissons donc la constante MESSAGE_SUPP dans la classe Principale.
public class Principale extends ActionBarActivity {
public final static String MESSAGE_SUPP = "android.
polytech.monappli.MESSAGE";
...
Arrivés à ce point, nous avons fait en sorte à ce que l’activité principale envoie un
message à l’activité d’affichage. Il nous reste maintenant à récupérer ce message
dans AffichMessage. Pour cela il suffit de rajouter le code ci-dessous dans
la méthode onCreate() de la classe AffichMessage . Cette méthode est
appelée à la création de l’activité.
Intent intent = getIntent();
String message = intent.getStringExtra(Principale.MESSAGE_SUPP
);
Ensuite, pour afficher le message nous allons créer un TextView, lui affecter le
message puis le rajouter au layout.
Dans les sections précédentes nous avons appris à créer et rajouter des
composants à partir du fichier xml, ici nous le faisons dans le code.
Voici le code complet de la méthode onCreate()
protected void onCreate(Bundle savedInstanceState) {
/*appeler onCreate de la classe mère*/
super.onCreate(savedInstanceState);
/*récupérer le message transporté par l’intention*/
android:id="@+id/affich_message_layout"
<item android:drawable="@drawable/image4"
android:duration="250" />
<item android:drawable="@drawable/image5"
android:duration="250" />
<item android:drawable="@drawable/image6"
android:duration="250" />
<item android:drawable="@drawable/image7"
android:duration="250" />
<item android:drawable="@drawable/image8"
android:duration="250" />
<item android:drawable="@drawable/image9"
android:duration="250" />
<item android:drawable="@drawable/image10"
android:duration="250" />
<item android:drawable="@drawable/image11"
android:duration="250" />
<item android:drawable="@drawable/image12"
android:duration="250" />
</animation-list>
<ImageView
android:id="@+id/animTerre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/
anim_terre_descript"/>
layout, ainsi que ceux des éléments qui y sont disposés, mais on pourrait également
le faire graphiquement.
. Ouvrez le fichier content_principale.xml
. Sélectionnez l’onglet Design (fig.3.5). Dans l’arborescence des composant
à droite le LinearLayout apparait (si ce n’est pas le cas cliquez tout simple-
ment sur l’appareil). A l’aide d’un clic droit sur LinearLayout sélectionnez
Morphing et passez en RelativeLayout(fig. 3.12 )
. Passez en mode Text. Vous verrez certains attributs surlignés car ne sont
pas compatible avec le nouveau layout. Comme par exemple android:layout_a
android:layout_marginLeft, android:layout_weight. Supprimez-
les.
. Repasse en mode Design et positionnez les éléments comme vous le sou-
haitez sur l’interface.
Exécutez l’application, l’activité devrait ressembler à la figure 3.13
Remarquez que dans le mode Design vous pouvez directement glisser et déposer
des composants sur l’interface. Le fichier xml sera mis à jour automatiquement.
C’est la façon la plus simple et la plus rapide pour faire la conception graphique
de votre activité.
profiterons pour apprendre à créer des boutons dans le code Java et à gérer leurs
évènements.
. Créez trois données membres de la classe AffichMessage tels que
protected Button playBtn;
protected Button stopBtn;
protected ImageView globe;
. Toujours dans onCreate(), créez les deux boutons et gérez leurs clics
/*créer le bouton stop*/
stopBtn = new Button(this);
stopBtn.setText(R.string.btn_stop);
/*définir et implémenter le callback du Click*/
stopBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AnimationDrawable monAnimation =(
AnimationDrawable)globe.getDrawable();
monAnimation.stop();
}
});
monLayout.addView(playBtn,2);
monLayout.addView(stopBtn,3);
Afin de définir comment notre vue se dessine sur l’écran il faut implémenter la
méthode onDraw()qui sera invoquée automatiquement par le système à chaque
fois qu’il a besoin d’afficher ou de rafraichir le View.
Nous définirons d’abord un objet de dessin (une sorte de pinceau) comme attribut
de la classe MonViewPerso
Paint p = new Paint();
Avec le code ci-dessus notre vue consistera en un écran noir au centre duquel on
affiche Hello World ! en blanc. L’argument canvas, que le système passe à la
méthode onDraw(), représente la zone de dessin de l’écran.
La méthode
public void drawText (String text, float x, float y, Paint paint);
Notez qu’ici nous avons juste affiché un texte défini dans strings.xml, mais il est
également possible de créer des chaines de caractères formatées pour, par exemple,
récupérer des valeurs de variables. Modifiez le code pour définir le texte tel que
texte = String.format("%s %d x %d",texte,canvas.getWidth(),
canvas.getHeight());
avant l’appel a drawText()en lui donnant en paramètre la taille que vous sou-
haitez. Pour rendre l’application plus modulaire, s’adaptant aux appareils, on pré-
fère définir la taille de texte dans le fichier de ressources dédié aux dimensions
dimens.xml
<dimen name="myFontSize">20sp</dimen>
• On Click : jouer
. Le fichier content_principale.xml est mis à jour avec les propriétés que
nous venons de définir
. Dans le code de la classe Principale implémenter la méthode jouer()
qui répondra aux appuis sur le bouton
public void jouer (View view){
Intent intent = new Intent(this, MonJeu.class);
startActivity(intent);
}
Si vous testez l’application (fig.3.14 ), l’appui sur le bouton que nous venons de
rajouter lancera l’activité MonJeu. Cependant celle ci n’est pas encore associée
à notre vue. Il nous reste donc à rajouter un élément <MonViewPerso> sur le
layout de l’activité.
. Modifier le fichier content_mon_jeu.xml en rajoutant un élément <Mon-
ViewPerso> tel que
<android.polytech.monappli.MonViewPerso
android:id="@+id/maVue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" />
Vous pouvez également faire cela de façon graphique dans le Design. En effet,
notre vue personnalisée apparait maintenant dans la palette et nous pouvons la
rajouter sur l’activité avec un glisser-déposer.
6. Jusqu’à la version API 21, getDrawable() s’utilisait avec un seul paramètre, depuis cette
méthode a été modifiée et nécessite un deuxième paramètre qui définit le thème. Si vous l’utilisez
avec un seul paramètre, l’IDE vous indiquera que cette méthode est obsolète mais compilera quand
même. Si vous utilisez deux paramètres (en passant par exemple null en deuxième argument)
et que votre minSdkVersion est inférieur à 21, une erreur se produit. Dans ce cas, vous avez deux
possibilités :
• soit vous changez le minSdkVersion (dans le gradle.build) pour le mettre à 21 mais dans ce
cas vous perdez la compatibilité avec les versions plus anciennes.
• ou bien, vous conditionnez l’appel de getDrawable() par
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
si c’est vrai vous faites l’appel avec deux paramètres, dans le cas contraire vous l’appelez
avec un seul.
hautImage=planet.getHeight();
return true;
}
Temporisation
Dans certaines applications on est parfois amené à effectuer une tâche après un
certain délai, ou bien périodiquement toutes les x ms. Nous allons, dans la suite,
introduire la notion de temporisation que nous utiliserons pour faire déplacer notre
planète le long de l’écran.
Pour ce faire nous passerons par un objet Handler qui permet de programmer
l’appel d’une méthode après un délai déterminé.
. Dans la classe MonViewPerso, définir un attribut de type Handler tel
que
Handler timerHandler = new Handler();
Avec ce code nous avons défini ce qu’on appelle une classe anonyme. Les classes
anonymes en Java permettent de déclarer et instancier une classe en même temps.
Elles ressemblent aux classes locales nichées mais, contrairement à ces dernières,
elles ne possèdent pas de nom. On les utilise quand on veut utiliser une classe locale
une seule fois. On n’a pas besoin de la nommer puisqu’on ne fera plus référence à
elle ailleurs.
La définition de la classe s’effectue avec une expression au moment de l’appel
du constructeur. Après l’invocation du constructeur on écrit un bloc contenant la
définition de la classe. Il suffit de mettre
. new avec le nom de l’interface que la classe doit implémenter, ici Runnable,
ou bien le nom de la classe mère si c’était le cas.
. suivi des parenthèses avec les paramètres du constructeur de la classe de
base. Ici, comme il s’agit d’une interface, il n’y a aucun paramètre. (les
interfaces n’ont pas de constructeurs)
. puis, entre accolades, le corps de la classe en terminant par un ;
Lancez l’application, vous verrez la planète se déplacer en diagonale sur l’écran.
Notez qu’il est toujours possible de la déplacer avec le toucher.
Vous remarquerez que l’activité principale présente déjà un menu sur sa barre
d’action contenant l’action Settings (dont le code de réponse par défaut ne fait
rien). Vous pouvez le faire apparaitre en cliquant sur le symbole en haut à droite
de l’écran (fig.3.16 ) .
En effet la classe Principale redéfinit la méthode onCreateOptionsMenu()
dans la quelle elle crée un menu à partir d’une ressource xml menu_principale.
Nous allons, dans la suite, apprendre à rajouter notre propre item du menu et lui
définir une action. C’est très simple !
Les boutons de la barre d’action sont définis dans un fichier xml du dossier res/-
menu. Pour ajouter un bouton d’action à l’activité principale nous allons modifier
le fichier menu_principale.xml pour y insérer un item
<item
android:id="@+id/action_mon_action"
android:title="@string/action_mon_action"
app:showAsAction="never"/>
7. l’URI est une chaine de caractère qui identifie le nom d’une ressource. L’URL est une forme
d’URI
Changement de langue
Rendre votre application multilingue est très simple si vous avez défini tous vos
textes dans strings.xml. Il suffit de définir un strings.xml pour chaque langue que
vous voulez supporter et les placer dans des dossiers values nommés avec le code
de la langue en préfixe. Par exemple values-fr pour le français, values-en pour
l’anglais, values-es pour l’espagnol, etc.
Android sélectionnera les ressources appropriées en fonction de la langue que l’uti-
lisateur a définie pour son appareil.
. Créez un dossier values-en dans le dossier res
. Copier le fichier strings.xml se trouvant dans le dossier values et placer la
copie dans values-en.
. Dans ce nouveau fichier traduisez le texte vers l’anglais
. Chargez l’application. Changez la Locale de l’appareil et lancer l’applica-
tion : L’application passe sur la langue que vous venez de sélectionner.
(La locale par défaut est peut être déjà l’anglais, dans ce cas l’application
s’affichera directement en anglais)
Si jamais vous choisissez une langue que votre application ne supporte pas, ce
seront les chaines de caractères définies par défaut dans values/strings.xml qui
seront utilisées.
Conclusion
Nous avons introduit quelques concepts de base de la programmation Android.
Avec les exemples relativement simples détaillés dans ce document nous avons
présenté les premières étapes de la création d’applications.
Nous venons de vous accompagner dans vos premiers pas avec Android, main-
tenant c’est à vous de jouer !
DVM Dalvik Virtual Machine. C’est une machine virtuelle disponible sur tout
appareil Android. Elle execute des fichiers en format .dex (format de
pseudo-code optimisé)
Fragment Un fragment représente un comportement ou une portion de l’interface
utilisateur dans une activité. On peut combiner plusieurs fragments
dans une même activité pour créer une interface à volets multiples et
réutiliser un fragment dans plusieurs activités.
Intent C’est un message qui permet d’activer un composant (une activité
par exemple). C’est un messager qui demande une action à un autre
composant (de la même application ou d’une autre)
Layout Le layout définit la structure visuelle d’une interface utilisateur. Les
éléments d’un layout peuvent être définis soit dans un fichier XML
ou bien à l’exécution à partir d’instructions dans le code. L’utilisation
XML permet de mieux séparer l’apparence de l’application d’une part
et le code qui définit son comportement d’autre part. Ceci permet de
s’adapter plus facilement aux différentes cibles, il suffit de définir plu-
sieurs fichiers XML pour un même code.
45
Tutoriel Android 46
Manifest Toute application Android doit posséder un fichier XML nommé An-
droidManifest.xml. Ce fichier contient des informations essentielles sur
l’application que le système doit connaitre pour pouvoir la lancer. Ce
fichier définit le nom du package de l’application, décrit les compo-
sants de l’application, détermine le processus qui accueillera ces com-
posants, déclare les permissions dont l’application a besoin et celles
que les autres doivent avoir pour interagir avec l’application, déclare
la version Android minimale pour l’application, et liste les bibliothèques
dont l’application a besoin.
Service Un service est un composant qui tourne en tâche de fond, pour ef-
fectuer de longues opérations ou exécuter des tâches pour un autre
processus. Un service ne possède pas une interface utilisateur.
La classe R
La classe R est une classe générée et mise à jour automatiquement par Android
Studio. Elle se trouve dans un sous dossier de app\build\generated mais qui
n’apparait pas dans l’arborescence de l’IDE. Ce fichier R.java définit une classe R
dans laquelle sont définis les identifiants des ressources de l’application. A chaque
fois que vous rajoutez une ressource à votre application un identifiant est gé-
néré automatiquement dans cette classe vous permettant par la suite de pouvoir
le référencer pour l’utiliser dans votre code. A l’intérieur de classe R sont définies
plusieurs classes, dites nichées 1 , telles que string, drawable, layout, menu,
id, etc. Dans notre cas toutes les classes nichées dans R sont publiques, donc ac-
cessibles depuis l’extérieur, mais comme elles sont membres de la classe R, pour
y accéder, il faut passer par R. On utilisera des notations telles que R.string
puisque ces classes sont statiques. Les identifiants sont générés automatiquement
dans la classe R au moment où on les crée. Quand, par exemple nous avons
créé un champ de saisie avec comme identifiant chp_saisie, un attribut constant
public static final chp_saisie a été défini automatiquement dans la
classe id et une valeur lui a été attribuée. C’est un numéro unique qui identifie
l’élément EditText que avons rajouté. Cet identifiant nous permettra de mani-
puler l’élément à partir du code avecR.id.chp_saisie. De même, un attribut
constant nommé str_chp_saisie a été généré dans la classe string. Il fait
référence à la chaine de caractère et nous permettra de l’utiliser dans le code avec
R.string.str_chp_saisie.
1. Une classe nichée est membre de la classe qui la contient. On a recours à ce genre de classe
en général lorsqu’on veut définir une classe qui n’est utilisée qu’à l’intérieur d’une autre classe.
Si on la déclare privée elle ne sera visible qu’a l’intérieur de la classe qui l’a définie. Par ailleurs
cette dernière peut également accéder aux attributs privés de la classe nichée. C’est une façon
d’améliorer la lisibilité du code en regroupant les fonctionnalités qui vont ensemble.
47
Tutoriel Android 48
/******************************************************************/
/*importation des classes utilisées dans le code*/
/******************************************************************/
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
/******************************************************************/
/*Définition de la classe Principale qui hérite de AppCompatActivity*/
/******************************************************************/
public class Principale extends AppCompatActivity {
/*redéfinition de la méthode onCreate() héritée de AppCompatActivity.
Elle prend en paramètre un objet de type Bundle. La classe Bundle
définit un type d’objet pouvant contenir un ensemble de données,
et qui est destiné à échanger des données entre les activités. La
méthode onCreate() est appelée une fois par le système au premier
lancement de l’activité*/
53