Vous êtes sur la page 1sur 31

Programmation des applications mobiles avec Android

Inspir du cours de Olivier Le Goaer

OS mobile : outils de dveloppement

Daprs le cours de Olivier Le Goaer

Plate orme de dveloppement


"obileApp vs# $ebApp

Android
Startup rac&ete par Google en 2''( Open Alliance )andset *O)A+

,egroupement de - de (' entreprises : abricants de matriel. oprateurs mobiles. dveloppeurs dapplications. / dont Google# Ob0ecti : dvelopper des normes ouvertes pour des applications de tlp&onie mobile

"atriel supportant Android

1ablette. smartp&one. netboo2. tlvision. embar3u * rigo4+

Android
Points orts

S5stme linu6 - 0ava Pro0et open source S5stme onctionnel. intuiti et voluti S78 complet ourni

9ersions dAndroid
cupcake donut eclair froyo gingerbread honeycomb Icecream sandwich

Arc&itecture Android

Arc&itecture Android
Linu6 8ernel

Le no5au linu6 ournit le pilotes matriels. la gestion de processus. la mmoire. le rseau et la gestion de lalimentation <2S= *subset+ : 0ava#io#>. 0ava#lang#>. ### Android : android#vie?#>. android#telep&on5#>. ### Google : com#google#android#maps#> O re les bases du rame?or2 applicati @tilise la mac&ine virtuelle 0ava Dalvi2 7ournit les classes utiles et des abstractions matrielles A)" *inter ace grap&i3ues+ dcrites en B"L "odle de donnes et controleurs applicati s crits en 0ava

Les bibliot&3ues

Le moteur de6cution Android


Le rame?or2 applicati

La couc&e applicative

"ac&ine virtuelle CDDalvi2DE


O re lGavantage de toute mac&ine virtuelle
Houc&e dGabstraction entre le dveloppeur dGapplications et des implmentations matrielles particulires

La 9" Dalvi2 nGest pas une 9" *9irtual "ac&ine+ <ava


1ient compte des contraintes de HP@ et mmoire =6cute des ic&iers .dex *Dalvik Executable) optimiss

La 9" cr une instance Dalvi2 pour c&a3ue processus *lourd+


Les applications sont totalement indpendantes *Isandbox") =spaces protgs *mmoire. dis3ue+ =vite un plantage gnralis J

Le petit univers 0ava


Honcepts

Pa3uetage. classe. annotation. &ritage. inter ace### Hlasses anon5mes. classes internes. PO<O###

Adiomes

Libliot&3ues*APA+

<2S= *subset+ : 0ava#io#>. 0ava#lang#>### Android : android#vie?#>. android#telep&on5#>### Google : com#google#android#maps#>###

Design Patterns

Singleton. Luilder. Observer *Listener+. DAO##

1'

Outil de dveloppement
Plugin =clipse AD1 *Android Development 1ools+

Assistant M la cration de pro0ets Hrateur dGinter ace grap&i3ue *$NSA$NG+ 9ues et perspectives ddies

11

Outil de dveloppement
Plugin =clipse AD1 *Android Development 1ools+

Arborescence des pro0ets

Dossier du projet

Fichiers source !java"

Fichier source R.java automati#uement gnr $ partir du rpertoire /res 'essources non organises !pdf( !*ip( !html(!!!" Fichier +anifest!)ml

%ersion &ndroid 'essources organises layout( icones( te)te(!!!"

12

Dveloppement dGune application


Hode source

=crit en <ava et compil en Dalvi2 b5tecode .dex" Arc&ive .apk Les applications doivent Otre signes pour Otre dplo5es *pas ncessaire en dveloppement+ Sur un support mobile *smartp&one par e6+ Dans un mulateur

Pac2aging

Signing

=6cution

1!

LGmulateur
A9D *Android 9irtual Device+

A9D "anager =mulation *i#e# couc&e dGindirection+ vs# simulation Po5au Linu6 - services composants android

Lent au dmarrage et M lGusage


7onctionnalits nonQdisponibles

Appareil p&oto *HameraR$ebcam support+ 9ibreur Appels tlp&oni3ues rels Hapteurs en gnral Honne6ions @SL Svolution de la c&arge de la batterie

1%

Dveloppement dGapplications
=nvironnement dGe6cution contraint Pour vos dveloppements. gardeT M lGesprit 3ue les appareils mobiles ont :

@ne puissance processeur plus aible @ne ,A" limite Des capacits de stoc2age permanent limites De petits crans avec de aibles rsolutions Des coUts levs de trans ert de donnes Des tau6 de trans ert plus lents avec une latence leve Des conne6ions rseau moins iables Des batteries M autonomie limite

1(

Applications Android
Applications de premier plan

@tilisable 3uand elle est visible et mis en pause lors3uelle ne lest pas <eu6. mas&up de cartes gograp&i3ues Anteraction limite en de&ors de sa con iguration 7iltrage dappels. rponse automati3ue au6 S"S Anteractiv par moment. lessentiel de sa tVc&e est en arrireQplan Lecteur de musi3ue Homposant visuel interacti 3ue les utilisateurs peuvent a0outer M leur cran daccueil A ic&age de l&eure. prvisions mto

Applications darrireQplan

Applications intermittente

$idget

1:

H5cle de vie dune application Android


Hontrairement au6 applications classi3ues. les applications Android nont pas un contrWle complet sur leur c5cle de vie Les composants doivent Otre M lcoute des c&angements dtats de lapplication pour Otre prs M une in intempestive La mmoire et la gestion des processus est prise en c&arge e6clusivement par le moteur de6cution

1;

Les ressources
c&aXnes de caracteres. images. audio. presentation visuelle. # # # dossier res/

Images Interfaces graphi#ues %aleurs constantes

1F

Principe ,#0ava
H&a3ue lment d ini dans le rpertoire /res impacte le ic&ier R.java *M ne pas touc&er+ Gnration automati3ue de classes internes M la classe ,. ainsi 3ue des constantes de t5pe entier sur !2bits H&emin dGaccs au6 ressources via R.java

userQde ined s5stemQde ined =6empleD

: fr.polytech.tp1.R.color.rose_bonbon : android.R.color.darker_gray : obj.setColor(R.color.rose_bonbon)

Ob0et 0ava reprsentant les ressources


Anstance de la classe : android.content.res.Resources ,essources du pro0et en cours : context.getResources()

1K

Android"ani est#6ml
Dcrit les composants de lapplication

@n point dentre potentiel dans lapplication @ne application peut lancer un composant di rent *pas de main+

Yuatre t5pes de composants


activits *activities+ services *services+ fournisseurs de contenu *content providers+ rcepteurs de diffusion *broadcast receivers+

Dcrit les permissions re3uises par lapplication

accs a lAnternet. lectureQcriture dans la liste de contacts. goQlocalisation. # # #

Dcrit les besoins matriels et logiciels de lapplication

appareil p&oto. bluetoot&. ecran multitouc&. # # #

2'

Android"ani est#6ml
<manifest> <application> <activity android:name=".MyFirstActivity" android:label="@string/app_name"> <intent-filter> <action android:name="fr.polytech.resmob.MyFirstActivity"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>

7ic&ier B"L obligatoire. M la racine du pro0et Seuls les lments <manifest> et <application> sont obligatoires catgorie LAUNCHER Z point dentre possible pour e6cuter lGapplication
http,--developer!android!com-guide-topics-manifest-manifest.intro!html

21

Activit
@ne activit Z un cran grap&i3ue

Ancarne souvent un cas dGutilisation *use case @"L+

A)"

structure par une &irarc&ie de vues et de contrWles des lments d inis par du code <ava Hertains lments *te6te. dimension. couleur+ d inis dans des ic&iers B"L */res+

@ne application est orme de n activits SousQclasse de android.app.Activity

22

Activit
; mt&odesDde callbac2: void void void void void void void

onCreate(...) onStart() onRestart() onResume() onPause() onStop() onDestroy()

2!

Activit
package fr.polytech.resmob; import android.app.Activity; public class MyFirstActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Le bundle mmorise /* MAIN Allocation des ressources ici */ action Z un point dentre principal *pasl/tat de l/0I } din ormation particulire M ournir+ lors#u/elle passe en arri1re.plan @Override

catgorie protected void onDestroy() { LAUNCHER Z point dentre possible pour super.onDestroy(); e6cuter lGapplication
/* Dsallocation des ressources ici */ } }

2%

Description des inter aces grap&i3ues


Description

Dclarative *7ic&iers B"L dans le rpertoire /res/layout/+ Ou directement dans le code 0ava

9ues *View+

Homposant lmentaire des inter aces grap&i3ues sous Android Anstance de la classe View Sensible au6 vnements tous les composants grap&i3ues *?idgets+ dAndroid sont des vues : Button, EditText, TextView, Spinner, CheckBox Le 9ie?Group permet de regrouper des vues Les la5outs disponibles sontD: LinearLayout, TableLayout, RelativeLayout, FrameLayout, ScrollView, ... http,--developer!android!com-guide-topics-ui-declaring.layout!html

,egroupement de vues *ViewGroup+


2(

Description des inter aces grap&i3ues


Description

Dclarative *7ic&iers B"L dans le rpertoire /res/layout/+ Ou directement dans le code 0ava

9ues *View+

Homposant lmentaire des inter aces grap&i3ues sous Android Anstance de la classe View Sensible au6 vnements tous les composants grap&i3ues *?idgets+ dAndroid sont des vues : Button, EditText, TextView, Spinner, CheckBox Le 9ie?Group permet de regrouper des vues Les la5outs disponibles sontD: LinearLayout, TableLayout, RelativeLayout, FrameLayout, ScrollView, ...

,egroupement de vues *ViewGroup+


2:

La5out communs

Linear La5outD: organisation &oriTontale avec barre de d ilement si ncessaire ,elative La5outD: organisation des lments relativement les uns au6 autres *M gauc&e de. auQdessus de. ###+ $eb vie?D: a ic&e le contenu dGune page ?eb
http,--developer!android!com-guide-topics-ui-declaring.layout!html

2;

Description des inter aces grap&i3ues


Orientation

Sens de placement des vues dans un conteneur android:orientation = vertical | horizontal

1aille

Sur ace prise par la vue android:layout_width = ??px | fill_parent | wrap_content android:layout_height = ??px | fill_parent | wrap_content

Gravit

Alignement dGune vue dans son conteneur android:layout_gravity = left | center_horizontal | top | bottom | right

2F

Description des inter aces grap&i3ues


<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" action MAIN Z un point dentre principal *pas android:layout_height="wrap_content" identi iant uni3ue android:text="@string/hello"/> din ormation particulire M ournir+ le signe - dans <TextView [-id signi ie 3uil android:layout_width="match_parent" catgorie sagit pour dun nouveau LAUNCHER Z point dentre possible android:layout_height="wrap_content" nom de ressource. M e6cuter lGapplication android:text="@string/coucou" crr et a a0outer a la android:id="@+id/msgText"/> classe , </LinearLayout>

2K

Association des inter aces grap&i3ues


import android.app.Activity; import android.os.Bundle; import android.widget.TextView; &ssocie une hirarchie de vues 2 a une activit

public class MyFirstActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView message = (TextView) findViewById(R.id.msgText); message.setText("Hello, World!"); } 'envoie la vue $ partir } de son identifiant gnr dans '!java

!'

Gestion des vnements


Dans le fichier main.xml de /res/layout on peut associer une mthode $ un vnement via les attributs vnementiels

<Button ... android:onClick="sayHello" .../>

public class MyFirstActivity extends Activity { private TextView helloLabel; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); helloLabel = (TextView) findViewById(R.id.hello_label); } public void sayHello(View v) { helloLabel.setText(R.string.hello); } }

!1

, rences pour la programmation android


http,--developer!android!com-training-inde)!html 3 4rogrammation des syst1mes mobiles 5 sans fils 6( cours de Olivier Le Goaer! 3 4rogrammation &ndroid 6( cours de 7tienne 4ayet wikibook sur programmation android