TP Tutoriel AStudio
TP Tutoriel AStudio
TP Tutoriel AStudio
Dima Rodriguez
TP de prise en main
Dima Rodriguez
Polytech Paris Sud
Tutoriel AndroidT M
Dima Rodriguez
Dcembre 2015
TP de prise en main
Table des matires
Prambule 4
1 Installation de lIDE 5
2 Configuration de lIDE 6
Installation des paquets supplmentaires et des mises jours . . . . . . 6
Annexes 47
La classe R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Explication du code gnr par dfaut pour la classe Principale . . . . . 48
Cycle de vie dune activit . . . . . . . . . . . . . . . . . . . . . . . . 51
2
Table des figures
2.1 SDK Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3
Prambule
Le systme dexploitation Android est actuellement lOS le plus utilis dans le
monde faisant tourner des smartphones, tablettes, montres connectes, liseuses
lectroniques, tlvisions interactives, et bien dautres. Cest un systme, open
source qui utilise le noyau Linux. Il a t cre par Android, Inc. qui fut rachete
par Google en 2005. Le dveloppement dapplications pour Android seffectue
en Java en utilisant des bibliothques spcifiques.
Le but de ce tutoriel est de vous familiariser avec lesprit de dveloppement An-
droid et ses bibliothques. Nous introduirons les concepts de bases de cration
dapplication en mettant en uvre quelques fonctionnalits simples. Ce tutoriel
nest en aucun cas exhaustif, le potentiel des applications Android est beau-
coup plus ample, les exemples cits dans ce document ne devront pas brider votre
imagination ni votre curiosit.
Sur le site officiel pour les dveloppeurs Android vous trouverez la documen-
tation des classes, des tutoriels ainsi que les lignes directrices pour prparer une
distribution Google Play. Un lexique la fin de ce document dfinit quelques
mot du vocabulaire Android utilis dans ce tutoriel.
4
1 Installation de lIDE
Dans cette section nous allons dcrire la procdure dinstallation dun environne-
ment de dveloppement Android.
Attention : Il faut excuter les tapes dans lordre cit ci-dessous.
a. Tlchargez le dernier JDK (Java Development Kit) que vous pouvez trou-
ver sur le site dOracle 1 .
b. Dsinstallez des ventuelles versions antrieures du JDK
c. Installez le nouveau JDK
d. Tlchargez Android Studio. Il contient lenvironnement de dvelop-
pement, le SDK (Software Development Kit) Android avec la dernire
version de la plateforme, ainsi quun mulateur.
e. Lancez lexcutable pour dmarrer linstallation et suivez le wizard 2
5
2 Configuration de lIDE
1. Les images systmes Intel ncessitent linstallation dun acclrateur Intel (HAXM) que
trouverez sur le site Intel. Une fois loutil install il faut activer lacclration 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 : cest le nom qui va apparaitre dans la liste des appli-
cations sur lappareil et dans le Play Store.
Company domain : cest un qualifiant qui apparaitra dans le nom du pa-
ckage .
Package name : il est utilis comme identifiant de lapplication, il permet
de considrer diffrentes versions dune application comme tant une
mme application. Il doit tre unique parmi tous les packages installs
sur le systme.
Minimum required SDK : cest la version Android la plus ancienne sur
laquelle lapplication peut tourner. Il faut viter de remonter trop en
arrire, a rduirait les fonctionnalits que vous pourriez donner votre
application. 1
c. Cliquez sur Next. Nous arrivons la cration dune activit (un cran avec
une interface graphique). Slectionnez Blank Activity (fig. 3.2a) et cliquez
Next.
1. Il est possible dactiver certaines fonctionnalits (non essentielles) de votre application
uniquement quand elle tourne sur une version qui les supporte. Pour plus dinformations consulter
cette page
8
Tutoriel Android 9
d. Renseignez les champs comme dans la figure 3.2b. Vous pourriez choisir
lutilisation de fragments, mais pour faire simple nous poursuivrons sans
fragments. Chaque activit dispose dun layout qui dfinit la faon dont
les composants seront disposs sur lcran. Une activit peut tre divise
en portions (ou fragments) chacune ayant son propre layout. La notion
de fragment a t introduite pour favoriser la r-utilisabilit de morceaux
dactivit (un fragment peut tre dfinit une fois et rutilis dans plusieurs
activits).
e. Cliquez sur Finish, le projet est cre.
Excution de lapplication
Sur un mulateur
Un mulateur permet de reproduire le comportement dun appareil rel dune faon
virtuelle. Lutilisation dun mulateur nous vite davoir charger chaque fois
2. Si vous travaillez sur MAC OS, il ny a rein de plus faire. Si vous tes sous Windows
reportez vous https://developer.android.com/studio/run/oem-usb.html pour les
tapes dinstallation Si Vous travaillez sous Linux reportez vous https://developer.
android.com/studio/run/device.html.
composant selectionn
l'activit
Propritts du
Explorateur Navigation entre vue graphique et xml
Output
Une fois que votre application est compile, un fichier .apk est cr
i dans le dossier app\build\outputs\apk de votre rpertoire de travail.
Cest lexcutable de votre application. Cest ce fichier que vous de-
vez dployer pour distribuer votre application. Le contenu de ce fichier
peut tre inspect laide de nimporte quel logiciel standard de com-
pression/dcompression de fichiers.
Tout projet Android doit respecter une hirarchie bien prcise qui permettra au
compilateur de retrouver les diffrents lments et ressources lors de la gnration
de lapplication. Cette hirarchie favorise la modularit des applications Android.
A la cration du projet, Android Studio cre automatiquement des dossiers pour
contenir les fichiers de code Java, les fichiers XML, et les fichiers multimdias.
Lexplorateur 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 dfinit le comportement de lapplication (situ dans le rpertoire
de votre projet sous app\src\main) et le second comporte des sous dossiers (dans
app\src\main\res) o sont stocks les ressources qui dfinissent linterface de
lapplication (lapparence).
ldpi low-resolution dots per inch. Pour des images destines des
crans de basse rsolution (~120dpi)
mdpi pour des crans de moyenne resolution (~160dpi)
3. Vous remarquerez quun classe ApplicationTest est cre automatiquement par An-
droid Studio. Cette classe vous permet dcrire un code pour tester les diffrentes fonction-
nalits de votre application plutot que de les tester la main. Pour plus dinformations sur la
cration de scnario de test consulter cette page.
un bouton.
Une interface utilisateur est en gnral constitue de ce quon appelle des ViewGr-
oups qui contiennent des objets de type View ainsi que dautres ViewGroups.
Un View est un composant, tel un bouton ou un champ de texte, et les ViewGrou-
ps sont des conteneurs qui dfinissent une disposition des composants (Views)
qui y sont placs. ViewGroup dfinit la classe de base des diffrents layouts.
Comprendre le layout
La disposition de notre interface est dfinie dans le fichier content_principale.xml
situ dans le dossier layout de res. Ouvrez ce fichier.
plateforme:caractristique=valeur
Par exemple le premier attribut xmlns:android prcise o sont dfinis les ba-
lises Android utilises dans ce fichier.
La balise <TextView>, fille de la balise <RelativeLayout>, dfinit un com-
posant texte qui sera plac sur le layout. En effet, cest sur ce composant l quon
crit le Hello World quaffiche notre application. Cette chaine de caractre est
dfinie par lattribut 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 quon utilisera
pour rfrencer cet objet lintrieur de notre code.
Le symbol @ est ncessaire pour faire rfrence un objet ressource partir
dun fichier XML. id est le type de ressource et chp_saisie est le nom
quon donne notre ressource. Le symbole + est utilis pour dfinir un ID
pour la premire fois. Il indique aux outils du SDK quil faudrait gnrer
un ID pour rfrencer cet objet. Le symbole + ne doit tre utilis quune
seule fois au moment o on dclare la ressource pour la premire fois. Par
la suite si on veut faire rfrence cet lment, partir dun XML, il suffira
dcrire @id/chp_saisie.
android :layout_width permet de spcifier la largeur de lment.
wrap_content signifie que le View doit tre aussi large que nces-
saire pour sadapter la taille de son contenu. Si en revanche on prcise
match_parent comme on lavait fait pour le LinearLayout, dans
ce cas le EditText occuperait toute la largeur de lcran 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 prcise le texte par dfaut afficher dans le champ de saisie
quand il est vide. Nous aurions pu prciser directement la chaine de carac-
tre ici code en dur, mais on prfre utiliser plutt une ressource quon
dfinira dans strings.xml . Noter que lutilisation de + ici nest pas nces-
saire parce quon fait rfrence une ressource concrte (quon dfinira
dans le fichier xml) et non pas un identifiant que le SDK doit crer.
Privilgiez toujours lutilisation des ressources strings plutt que des chaines
i de caractres codes 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. lIDE vous affichera un avertissement en cas de non respect de
cette recommandation.
Aprs la modification du code que nous venons de faire, quand vous sauvegarderez
le fichier, un message derreur vous indiquera que lidentifiant str_chp_saisie
nest pas connu. Nous allons donc le dfinir.
. Ouvrez le fichier strings.xml qui se trouve dans res>values
. Rajoutez une nouvelle string nomme 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 caractre qui sappelle
"btn_envoyer" et qui vaut Envoi.
. Dans le fichier du layout rajoutez un lment <Button> tel que
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_envoyer" />
Lancez lapplication. 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 lcran
qui reste aprs le positionnement du bouton il faut spcifier 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 lactivit
Pour faire communiquer les deux activs (lactivit principale et celle que nous
venons de crer) il faut passer par un Intent. Ce dernier reprsente lintention de
faire quelque chose, et permet lactivit principale de lancer lactivit daffichage.
Dans la mthode envoiMessage() de la classe Principale :
. Crez une intention,
Intent intent = new Intent(this, AffichMessage.class);
Si nous souhaitons que le texte tap dans lactivit principale soit affich dans
lactivit daffichage, il faut faire communiquer les deux activits de sorte ce
que la premire envoie le texte la deuxime. Ceci seffectue en utilisant le mme
Intent qui a servi pour le lancement de lactivit. En effet une intention peut aussi
transporter un paquet de donnes.
Modifier la mthode envoiMessage() pour quelle contienne le code ci-dessous,
sans oublier dimporter les classes ncessaires.
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 linterface principale. Nous rcup-
rons ensuite la chaine de caractre que contient ce champ en appelant edit-
Text.getText().toString(). Cette chaine est ensuite stocke dans la va-
riable message qui est passe en paramtre la mthode putExtra() de lobjet
intent afin de charger lintention avec ce message. Afin que lactivit daffichage
puisse identifier et rcuprer les donnes supplmentaires transportes par linten-
tion il faut dfinir une cl pour ces donnes moyennant une constante publique.
Nous dfinissons donc la constante MESSAGE_SUPP dans la classe Principale.
public class Principale extends ActionBarActivity {
public final static String MESSAGE_SUPP = "android.
polytech.monappli.MESSAGE";
...
Arrivs ce point, nous avons fait en sorte ce que lactivit principale envoie un
message lactivit daffichage. Il nous reste maintenant rcuprer ce message
dans AffichMessage. Pour cela il suffit de rajouter le code ci-dessous dans
la mthode onCreate() de la classe AffichMessage . Cette mthode est
appele la cration de lactivit.
Intent intent = getIntent();
String message = intent.getStringExtra(Principale.MESSAGE_SUPP
);
Ensuite, pour afficher le message nous allons crer un TextView, lui affecter le
message puis le rajouter au layout.
Dans les sections prcdentes nous avons appris crer et rajouter des
composants partir du fichier xml, ici nous le faisons dans le code.
Voici le code complet de la mthode onCreate()
protected void onCreate(Bundle savedInstanceState) {
/*appeler onCreate de la classe mre*/
super.onCreate(savedInstanceState);
/*rcuprer le message transport par lintention*/
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 lments qui y sont disposs, mais on pourrait galement
le faire graphiquement.
. Ouvrez le fichier content_principale.xml
. Slectionnez longlet Design (fig.3.5). Dans larborescence des composant
droite le LinearLayout apparait (si ce nest pas le cas cliquez tout simple-
ment sur lappareil). A laide dun clic droit sur LinearLayout slectionnez
Morphing et passez en RelativeLayout(fig. 3.12 )
. Passez en mode Text. Vous verrez certains attributs surligns 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 lments comme vous le sou-
haitez sur linterface.
Excutez lapplication, lactivit devrait ressembler la figure 3.13
Remarquez que dans le mode Design vous pouvez directement glisser et dposer
des composants sur linterface. Le fichier xml sera mis jour automatiquement.
Cest la faon la plus simple et la plus rapide pour faire la conception graphique
de votre activit.
profiterons pour apprendre crer des boutons dans le code Java et grer leurs
vnements.
. Crez trois donnes membres de la classe AffichMessage tels que
protected Button playBtn;
protected Button stopBtn;
protected ImageView globe;
. Toujours dans onCreate(), crez les deux boutons et grez leurs clics
/*crer le bouton stop*/
stopBtn = new Button(this);
stopBtn.setText(R.string.btn_stop);
/*dfinir et implmenter 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 dfinir comment notre vue se dessine sur lcran il faut implmenter la
mthode onDraw()qui sera invoque automatiquement par le systme chaque
fois quil a besoin dafficher ou de rafraichir le View.
Nous dfinirons dabord 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. Largument canvas, que le systme passe la
mthode onDraw(), reprsente la zone de dessin de lcran.
La mthode
public void drawText (String text, float x, float y, Paint paint);
Notez quici nous avons juste affich un texte dfini dans strings.xml, mais il est
galement possible de crer des chaines de caractres formates pour, par exemple,
rcuprer des valeurs de variables. Modifiez le code pour dfinir le texte tel que
texte = String.format("%s %d x %d",texte,canvas.getWidth(),
canvas.getHeight());
avant lappel a drawText()en lui donnant en paramtre la taille que vous sou-
haitez. Pour rendre lapplication plus modulaire, sadaptant aux appareils, on pr-
fre dfinir la taille de texte dans le fichier de ressources ddi aux dimensions
dimens.xml
<dimen name="myFontSize">20sp</dimen>
On Click : jouer
. Le fichier content_principale.xml est mis jour avec les proprits que
nous venons de dfinir
. Dans le code de la classe Principale implmenter la mthode jouer()
qui rpondra aux appuis sur le bouton
public void jouer (View view){
Intent intent = new Intent(this, MonJeu.class);
startActivity(intent);
}
Si vous testez lapplication (fig.3.14 ), lappui sur le bouton que nous venons de
rajouter lancera lactivit MonJeu. Cependant celle ci nest pas encore associe
notre vue. Il nous reste donc rajouter un lment <MonViewPerso> sur le
layout de lactivit.
. Modifier le fichier content_mon_jeu.xml en rajoutant un lment <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 faon graphique dans le Design. En effet,
notre vue personnalise apparait maintenant dans la palette et nous pouvons la
rajouter sur lactivit avec un glisser-dposer.
6. Jusqu la version API 21, getDrawable() sutilisait avec un seul paramtre, depuis cette
mthode a t modifie et ncessite un deuxime paramtre qui dfinit le thme. Si vous lutilisez
avec un seul paramtre, lIDE vous indiquera que cette mthode est obsolte mais compilera quand
mme. Si vous utilisez deux paramtres (en passant par exemple null en deuxime argument)
et que votre minSdkVersion est infrieur 21, une erreur se produit. Dans ce cas, vous avez deux
possibilits :
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 lappel de getDrawable() par
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
si cest vrai vous faites lappel avec deux paramtres, dans le cas contraire vous lappelez
avec un seul.
hautImage=planet.getHeight();
return true;
}
Temporisation
Dans certaines applications on est parfois amen effectuer une tche aprs un
certain dlai, ou bien priodiquement toutes les x ms. Nous allons, dans la suite,
introduire la notion de temporisation que nous utiliserons pour faire dplacer notre
plante le long de lcran.
Pour ce faire nous passerons par un objet Handler qui permet de programmer
lappel dune mthode aprs un dlai dtermin.
. Dans la classe MonViewPerso, dfinir un attribut de type Handler tel
que
Handler timerHandler = new Handler();
Avec ce code nous avons dfini ce quon appelle une classe anonyme. Les classes
anonymes en Java permettent de dclarer et instancier une classe en mme temps.
Elles ressemblent aux classes locales niches mais, contrairement ces dernires,
elles ne possdent pas de nom. On les utilise quand on veut utiliser une classe locale
une seule fois. On na pas besoin de la nommer puisquon ne fera plus rfrence
elle ailleurs.
La dfinition de la classe seffectue avec une expression au moment de lappel
du constructeur. Aprs linvocation du constructeur on crit un bloc contenant la
dfinition de la classe. Il suffit de mettre
. new avec le nom de linterface que la classe doit implmenter, ici Runnable,
ou bien le nom de la classe mre si ctait le cas.
. suivi des parenthses avec les paramtres du constructeur de la classe de
base. Ici, comme il sagit dune interface, il ny a aucun paramtre. (les
interfaces nont pas de constructeurs)
. puis, entre accolades, le corps de la classe en terminant par un ;
Lancez lapplication, vous verrez la plante se dplacer en diagonale sur lcran.
Notez quil est toujours possible de la dplacer avec le toucher.
<item
android:id="@+id/action_mon_action"
android:title="@string/action_mon_action"
app:showAsAction="never"/>
7. lURI est une chaine de caractre qui identifie le nom dune ressource. LURL est une forme
dURI
Changement de langue
Rendre votre application multilingue est trs simple si vous avez dfini tous vos
textes dans strings.xml. Il suffit de dfinir un strings.xml pour chaque langue que
vous voulez supporter et les placer dans des dossiers values nomms avec le code
de la langue en prfixe. Par exemple values-fr pour le franais, values-en pour
langlais, values-es pour lespagnol, etc.
Android slectionnera les ressources appropries en fonction de la langue que luti-
lisateur a dfinie pour son appareil.
. Crez 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 langlais
. Chargez lapplication. Changez la Locale de lappareil et lancer lapplica-
tion : Lapplication passe sur la langue que vous venez de slectionner.
(La locale par dfaut est peut tre dj langlais, dans ce cas lapplication
saffichera directement en anglais)
Si jamais vous choisissez une langue que votre application ne supporte pas, ce
seront les chaines de caractres dfinies par dfaut dans values/strings.xml qui
seront utilises.
Conclusion
Nous avons introduit quelques concepts de base de la programmation Android.
Avec les exemples relativement simples dtaills dans ce document nous avons
prsent les premires tapes de la cration dapplications.
Nous venons de vous accompagner dans vos premiers pas avec Android, main-
tenant cest vous de jouer !
DVM Dalvik Virtual Machine. Cest une machine virtuelle disponible sur tout
appareil Android. Elle execute des fichiers en format .dex (format de
pseudo-code optimis)
Fragment Un fragment reprsente un comportement ou une portion de linterface
utilisateur dans une activit. On peut combiner plusieurs fragments
dans une mme activit pour crer une interface volets multiples et
rutiliser un fragment dans plusieurs activits.
Intent Cest un message qui permet dactiver un composant (une activit
par exemple). Cest un messager qui demande une action un autre
composant (de la mme application ou dune autre)
Layout Le layout dfinit la structure visuelle dune interface utilisateur. Les
lments dun layout peuvent tre dfinis soit dans un fichier XML
ou bien lexcution partir dinstructions dans le code. Lutilisation
XML permet de mieux sparer lapparence de lapplication dune part
et le code qui dfinit son comportement dautre part. Ceci permet de
sadapter plus facilement aux diffrentes cibles, il suffit de dfinir plu-
sieurs fichiers XML pour un mme code.
45
Tutoriel Android 46
Manifest Toute application Android doit possder un fichier XML nomm An-
droidManifest.xml. Ce fichier contient des informations essentielles sur
lapplication que le systme doit connaitre pour pouvoir la lancer. Ce
fichier dfinit le nom du package de lapplication, dcrit les compo-
sants de lapplication, dtermine le processus qui accueillera ces com-
posants, dclare les permissions dont lapplication a besoin et celles
que les autres doivent avoir pour interagir avec lapplication, dclare
la version Android minimale pour lapplication, et liste les bibliothques
dont lapplication a besoin.
Service Un service est un composant qui tourne en tche de fond, pour ef-
fectuer de longues oprations ou excuter des tches pour un autre
processus. Un service ne possde pas une interface utilisateur.
La classe R
La classe R est une classe gnre et mise jour automatiquement par Android
Studio. Elle se trouve dans un sous dossier de app\build\generated mais qui
napparait pas dans larborescence de lIDE. Ce fichier R.java dfinit une classe R
dans laquelle sont dfinis les identifiants des ressources de lapplication. A chaque
fois que vous rajoutez une ressource votre application un identifiant est g-
nr automatiquement dans cette classe vous permettant par la suite de pouvoir
le rfrencer pour lutiliser dans votre code. A lintrieur de classe R sont dfinies
plusieurs classes, dites niches 1 , telles que string, drawable, layout, menu,
id, etc. Dans notre cas toutes les classes niches dans R sont publiques, donc ac-
cessibles depuis lextrieur, mais comme elles sont membres de la classe R, pour
y accder, il faut passer par R. On utilisera des notations telles que R.string
puisque ces classes sont statiques. Les identifiants sont gnrs automatiquement
dans la classe R au moment o on les cre. 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 dfini automatiquement dans la
classe id et une valeur lui a t attribue. Cest un numro unique qui identifie
llment EditText que avons rajout. Cet identifiant nous permettra de mani-
puler llment partir du code avecR.id.chp_saisie. De mme, un attribut
constant nomm str_chp_saisie a t gnr dans la classe string. Il fait
rfrence la chaine de caractre et nous permettra de lutiliser dans le code avec
R.string.str_chp_saisie.
1. Une classe niche est membre de la classe qui la contient. On a recours ce genre de classe
en gnral lorsquon veut dfinir une classe qui nest utilise qu lintrieur dune autre classe.
Si on la dclare prive elle ne sera visible qua lintrieur de la classe qui la dfinie. Par ailleurs
cette dernire peut galement accder aux attributs privs de la classe niche. Cest une faon
damliorer la lisibilit du code en regroupant les fonctionnalits qui vont ensemble.
47
Tutoriel Android 48
/******************************************************************/
/*importation des classes utilises 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;
/******************************************************************/
/*Dfinition de la classe Principale qui hrite de AppCompatActivity*/
/******************************************************************/
public class Principale extends AppCompatActivity {
/*redfinition de la mthode onCreate() hrite de AppCompatActivity.
Elle prend en paramtre un objet de type Bundle. La classe Bundle
dfinit un type dobjet pouvant contenir un ensemble de donnes,
et qui est destin changer des donnes entre les activits. La
mthode onCreate() est appele une fois par le systme au premier
lancement de lactivit*/
53