Vous êtes sur la page 1sur 72

5 2 rF 6 5 0 R o

son Concevoir application et penser architecture son

ztN

il
FRANGE
-r
I

ilr
- =

HORS.SERIE
sur UNIX Administration dveloppement systmes et

I I

=F

les et Android, architecture, IPC sonSDK son I ecouvrez

et de Dcouverte tude I'APl contacts des

:rprenez dvelopper application en entirement une de Manipulation de de I'application gestion contacts

d'une Cration gestion et listedecontacts

Manipulation comptes des et svnchronisation

publication Optimisation, de et diffusion I'application

S O MM A I R Er l . s z
A INTRODUCT]ONANDROID

DU ANDROID LARCHITECTURE LOCICIELLE SYSTEME ]NTER PROCESS CALL

Android I annonce Cest en nai 2007 que Google sur son blog officiel :. we think what we arc announcing - the Oper HandsetAlliance and Andnld - is norc signicant and ambitlous than a singlephane,. En invier2010.il y Nexus a tout juste un an, cest le tlphone Plusqrlun proOnequi fait son apparition. duit, cest une leon et une dmonstration ax const.ucteurs de de Googledestines sna.Pnores dmontrantlesfonctionnalits desa plateforme mobile. NexusOnenest Le pas une russirccommerciale. ntait de il toutefaonpas destin cela.Android.par contre.cest une touteautrehistoire. Aujourdhui, alorc que les lmartphons de dtrnnt reposant lesystme Google su. touslspays. l iPhone dApplednspresque Googlen hsitepas exprimerclairement que l?chat de la siaft'up Andfoid Inc. est afialresqoeIentreprise I unedesmeilleres Andfoid est partot, naitjamais ralise. des vousnavezqu feuilleterle catalogue prstataires tlphonie de mobilepourvous en rendre compteou chercherles chifires de par Motofolaou ventes annoncs Samsung, encore Sony/Erjcsson. Comment ClMFpovajd ignorercelalors quAndroidestun systme bassur Linxet disponible,en grandepartie, enopensource? un Nous ne volionspas falre slmplement et tour d horizonde la platefo.me prsenter quelques. HelloWorldl ", nousavonssouhait du ( pratique,, du . concret,, un contenu qui vousapporterellement qulquechose de slngulier d unique. Le nitre d ceuvre de lensemble des articlesqui vontsivreest PhilippeP.ados, pasinconnudes dontlenomnestsansdoute lecteurs longuedatede GIMJetiensici de d saluerle trvail exceptionnel Philippe, " quirelvedu ( purjus de cerveau et ie remercierde partagerainsitot son labeuret Android. son exprience dveloppement en Je luilisse prsentIabarre pourvous emlnener dansun voyage confins l 0S aux de Coogle vousservjf de guidedansle cycle et complet dveloppementuneapplication du d Android, l tudedesAPI ladifusion sur de Encofenerci Philippe,peu nombreuxsont ainsi un tel retour ceux quj partageratent

12 't4 16 19 31 38 40 44 48 53 60 64 67 70 72

D INTGRATION I LES STRATEGIES 2 LADCoUVERTE LAPIDEsCoNTACTS DE LAPPL]CATION CONTACTS 3 MANIPULER D'UNE LISTE CONTACTS DE 4 CESTION IO]', 5 CISTION COMPTES 5Y\CHRO\I5A'I DTS ET ET 6 WIZARD CLUF

LDAP PHOTOS INTGRATIONLANNUAIRE ETDES DE OUVERTURE LES VERS AUTRES SUR LES QUAL]FICAT]ON TOUS ENVIRONNEMENTS
OPTIMISATION ANDRO]D SOUS LEMARKETINC LAPPL]CATION DE PUBL]CATION LAPPLICATION DE S]'CURITE SYNTHSE LINTGRATION DE CONCLUSION

74

CRITiQUES LIVRES

/6

LA DFS H]M15 POUR PIUPAR APPLICATIONS

29,5Il5'

BON DABONNLVF\T DTCO,'MANDE T'I

borrr/JNs ffl|ELrttr

*;liJ,*i#,ili';ir'"9ill,it3?i' I tl"*t dlro8r. /Aoritt


i;;.;;;;;;;eF."",&*o -d4

lMPilM Allem?sm m Dtporrsar: @ruioo.N NN 0133 0361

5.-i

B.J.*

G t l u / L l n u x M . g . z i n . F r n c oN ' 5 2

-qry*lF'

[3

A INTRODUCTION ANDROID
par Nousallonscommencer introduireles diffrents prsents Android.Quels concepts dans le systme ? sont les principesfondateursde l'architecture Pourquoiceschoix ? Quelssont les avantages les et inconvnients ?
rdrcidstuJr slsrme exploitatnn' d et un t"rrex,or"lipefmtant dr porll da!.loppcrdcsapplicarions
d e sl e n n j n a u rd e l o u s t y p e s I r a i s p r i n . i p a l n r e np o u f d s t l p h o n p o f t a b l e s . t s L e s . h o i r i p f p o n d f a n trs e l a f . h i i e c t L r f e l s o n Lb a s s s u f l a l o l o n t d e m a i t f i s e f . o n t f a i n t p a . l a ! i t r . s s ed u p r o ( r . s s . u rl . p e ud e m n r o i f e j s p o f i b l c l a f o n s o r I | r d . tion lect.ique ei les lalbles perfofmances proposs Di!ers conrposntssont auli u n l i b a n , d . d o n n a . sS Q L i l .:r unenaviga|euf desouche $eb \'\bKit L ' r m o l e L ' f a v a s . . r ! r: l d e sb l b l i o t h q L r d e n r a n i p ! l i r t i . n s d e f e c o n n a i s s a n c e sr i s a g e s de :

'l'r ''ot ""j,lii',rill;illjii,ie^nd E r", activits


un. vit( ssc 11.prx$sftr limiLe!ec d urc lir:(tucn{u. 250iv1hz: p u n e I n m o i r e A N Ia v a r t 6 , 1 N l b i r u r R I { ' n s { ' m b l d u s l s r m es o i t 2 0 1 bl n e e . l l b i sl ( s s r . ! i { t s h a u tn n e a ue n c l i \ i l i r sr.fn nl' i1.\ploiratim bs ir .Li lx. i a , , s i s p . . d . . s l , . r pi u n e s o l u r i o n e 2 1 0 r 3 2 0 . d p B i e ne n r n d ul e s c o n n r u c t e u f s r o p o slnr d!s .x!]al(,s phrs ri.hmenr dots et c e s l e n t r ea u t f e ss u f c e p o r n rq L r .s . J r n x ' l a . o n c ! f r e r c e ( e rl e sd i f f i. l r ( i s ) . S u f . . l l . b a s . C o . g ] . | . o n uu n t s v s t n ep f o . h c d r s r f . h n o L o : j j . s x l d c . n e sd h r c | n e t E n e f e r . 1 c f a nd u p t f m i n a l n e e u ta m c h e fq r ' u n ep a g c l a f o i s .c o J n n r s i l s a g s s a i ld L r n .p a g f e \ ! . b C . r 1 cd r r i a f c o l l i e d e s c o m p o f t e r n e n t s \ ' n a m i r l L r .p o . . d i l i c r l d s pagecoufanteou d. enchefI afll.hagc de nou!elles pages. lsu.:rssion Crrn.x p( unnvigarr,uf d.s pag.s est rnrorise dans une pile pefmertant lIilisateufde lajre nra..h(' arrl.r rdc fri\rjf la pagep.ecednie.

( la Celajuslie presence bouton retour, du prsent touslestermlnaux Android sur (contrairement d'autresordiphones les sous la pomme, maiscomme modles Phone 7). Windows pardesActi Lespages sontportes levocabulairedAndroid. Une vitsdans activitest uneclasse Javadont le cycle Une de vie est grpar le framework. activitdevientnon activelorsquelle nest plus prsenteau premierplan. peut le Dans cette situation, framework dcider dutoritde tuer le processus en chargede l activit pour librer des ressources, d un appeltlphonlque lors entrantpar e,Ymple. sans Lctivitpeut tre considre de Par tat,tantsadure vieestfragile. exemple, du basculement terminal loas du Androld de la verticale l horizontaie, propose toutes ressources les dhdapter par Cela utilises Iappiication. va de la dispositjon w/dgets l cran,des des textesutiliss qui peuventtre plus ou moinslongs, couleurs autres des et subtilits.fimpact d un changement le de modetant trs important, plus pourlegrer facile consistesupprimer I activitcourante la reconstrulre et permettent de zro.Quelques astuces de garder quelqepafi les tats de la fentre, afin de restituerl crandans 1e un ttprochede celuid'avant baspossible. le culement. plus rapjdement peut Unsimple basculement faireperdre 1ctivit courante.

EContentProvide,E Lesservices
Un autre conceptpropospar le framework Android le . gestionnaire est de ). ressources Il sgit d un ensemble de dans publication de codes spcialiss 1a verslesaukes donnes uneapplication d Lapproche similaire est applicatlons. REST. Chaque donne auxtechnologies publique avoirune URIqui lui est doit propre. exemple, contact particu Par un lier est identifi par conte ntJ/contacls/ peuvent peopl/ Ainsi, pplications L les facilernent mmoriserdes liens ve.s domes, simplement une[JRl avec d autres LeBestionnaire contenudoit grer de : cration. lesquatreordresclassiques Ilest modifi cation, rec]rche etsuppression. donc facile delguer trartemmts rrs de ces

pr- la machine virtuellemanipulent unjeu vers une basede donnes SQLite Un Mais sente danslenvironnement. il est importantde registres. couplede la registres utilis pour les donnes est galement envisageable dlguer de persistance donnessurunserveur trop grandes, commeies doublesou des plus de ffchiersplats,XML, les longs.Si le codencessite distant,d utillser des que disponibles, REST, SOAP touteautretechnologle. donnes de registres ou une permutation effectue est avecla Laseule limitationcetleappfoche est pile en mmoire.Pour amliorerles qun nestpaspossible fairedesrequtes performances, compilation code de la du jointuresentreplusieurs avec sources minimise maximum cettesituation. all Les rglent de donnes. fournisseurs Dalvikpropose %d instructionsen 30 plusieurs gmralement enproposant cela qu rnoins uneJVM classique maisavec URIdiffrentes, suivantlescombinaisons Des 35 entres tables, proposant rpeatoires desinst.nctions %plusgrandes. en des supont pour avoirle tudes montrqe la charge sur lesURLParexemple, par engendre la tailledes tl l dtaild un contact, fautsumxer URlde plmentaire d instruclions avaitun impact nviron1% de /data. ll estalorspossible demander prsente parinstruction.Au Dalvjk frnal, les via toutes donnes contenl//contacts/ quasiment d deuxibis un temps excution people/l/dta. que plus des rapide celui JVMclassiques. de LAPId un gestionnaire ressources de tant Lesinstructions basniveau consiste dcrire les formatsd URI virtuelle d d'implmenta- rrsdiffrentes unemachine accepts une class et d'effectuer il un Ja!?classique,estncessaire tion. Les URI peuventreprsenter les de ( rpertoire, (un ensemble objets) uneconversion bytecodeComme d programmes sexcutent dansun enviou un objet particuiier Par exenple, contraint- peude mmoire reprsente ronnement la conrent//contacts/people ' le convertisseur bytecode d et deCPU listedescontacts. en profite pour effectuerI ditionde Lesservices djoutoudemodification lien entre toutesles classes connues, retournentI'URI lbbjetmanipul. de Le Il ny a plus de chargenent paresseux retourne Cursor comme un service requte de dans JVMclassique. ce une Tout permettant naviguer le de dans rsultat qui peuttre mutualis anticip est. et I les des en consultant valeurs colonnes. cela pe.metd'avoirun codebeaucoup Lecurseurpeutvoyagerd processus plusefficace plusrapide injtialiser un et un autresanspertede donnes. Une est Lensemble classes alorsprsent des paginatlon utilisepour viterdetrop est qui dansun fichier classes.dex, est frquents alleryretoursentre proces$s. les ll directement mpp mmoire- est, en pluspetitqueles enmoyenne, deuxfois C fichiersclasses uneJVMstandard. est d lefruit del limination la redondance de Le dernierconceptpropospar le framework permet de grer destraited LorsdeI installation uneapplication, peut une phasemodifie le bytecodepour ments tche fond.Unservice en de ou trelocal uneapplication accessible lbptimiseret l adapter aux caractrispar les autresapplications.Le cyclede tiquesdu rlphone (utilitaire DEXOPT). vie des servicesest moins ftagile que Les octetssont ordonnset aligns, pour les activits, nais le framework certaines Le instructions rcrites. sont peutdcider interrompre service codeest galement d un vrifivjs'-vis de s'il lejuge ncessaire. la scurit. fichierclsses,dexest Le pourne plusavoir extraitde l'archive puis ll ledcompresser, il estmanipul, avec bibliothque baseet le rsultat la de estgarddansun cache. Poure#cutertoutcela, Andrord shppuie sur un noyauLinux modi[i] et sur une Siun fichierDEXa desdpendances machine virtuelleparticulire Dalvik. sur d utres : fichiers, estmmoris cela que confirmer lescalculs Cettedernire base desregistres pour pouvoir est sur Seules les nonsur unepile.Lesinstructions de d ofsersonttoujoursvalides. et

Enutnit

desAPI permettent injecterdes ob d jets Javadansle codeJavascript, etc. Le composanr indispensable est por la raljsation applications d web por tables entrcdifrentso.diphones. Les fonctionnalirs HTML5 permettnt Pou. conomiser galement Ia de des de mmoir,laJVM tconue a pourrre dxploiter feuilles stylelgrs etvisueliement .iches, foncrionner de en emcacepourgrerplusieursprocssuset modedconnect ou la partager bibllothque la principale entre golocalisarion. de bnficierde processus. la scurit ces Ainsi, sefFectue par processus. isolantles applicarions rsunessautfes Poufamliorer Iutilisation cach du de premierniveaudu processea les informationsLechniqes ncessairs aux objetsallous mmoi.e en sont stockes unzone dans diffrenre. Ainsi. la densit inlormarionutile dans le d cach processeur amliore. du est Les diffrents objers sontallous uns les ct desautres. donnes sans paras[es.

classes rfrences sans externes autrs qulesciasses framework opti du sont mises aurres Ls restent tatpour enl eFecruer /inkaudernier Ie mornent. lo.s du chargement lapplication. de

commen Javaclassique, exploitant I introspection, vcdesc.iption la d hirarchie, attributs, la version. des de etc. Cela ncessiterait consommation une derssources imporante. t.op Unetchesoccupe vnmenrs des utilisateu.s de Iamchage. triteer Les rnnts cettetche de doivnt effecruer s en mojns djxsecondes, lesysrme de sinon pour la consjd.eenchec etpeutlatuer. dpasser limitarion. traitements certe des peuvent sexcutef facilement rche en de fond.dansle mme processus.

EL" c..,, d,.,


framework

Desprocesseurs multicceurs son! pou Chaqu appliction possde fichier annoncs I la prochalne gnrarion un dans racine, la dcrivant applicarions, detlphones tabletres.Il erde les fautdonc les services les activits et proposes en tenir comptepo. cfire un code Le cceufdu tiameworkest en charg compatible avcce type d excurion, dagrgr toutes lnformations ces pou. avecun cachemmoirpa. cceuf.Il resexposer aur.esapplications aux hypoths Ia et ne faut faire acune suf pouf dclencher acrivitslorsqe visibllitde l nmoiredansle mme les Lorsquun Lestypes donnes processus plusieu.s message etatparplusieurs de ou manipulespar celaestncessaire. de serviceest nvoy(un Intno, Ie a,rre.ds. lesapplications Lattribut volatiLe garanril rantconnus, pr ne un les t.aitement effectu correcte la nmoireentr st pour amliorer lrameworkrechrche applications exploitarion de y ls performances Ia consommatjon pouvam repondre. plusieufs et c(Eurs. mmoi.. exemple fichiers Par ls XML Siplusieurs solutions Finalement, les tous ne sontpasmmoriss comme flux sePresentent, bote des une lments ncessaires de caractfes, nais compacrs. Cela de dialogu demande une pplictlon (te 8, Contacts amlior grandement .apportsignat/ l'utilisateur fair un Ie de fichirclasses.dex. ls bruitdeXML.Lesdescriptionsdescmns, (ct Illustration choix 1). difrentes rssoufcs en des chaines caractrs autres Puis,le cur cherche *t conrcts tigne de et compiles, comme fi, les images sontgalement opiimlses. Lh dclencher activt I chie$XML lesimags, les fpertoire utilispou. chaque st typ correspondante. le Si texts, ainsiquele fichier oeressources. unfepertoireparticulief processus associ n'est AndroidMnifest.xnl) permt joutefdesressources d brutes, pasprsent, estlanc il sont rnis dans fichir Lrn etinitilis Puis n messag u demandant zip d'extension reprsentant AP(, un tedclenchemenr delciivlt nvoy package est Tout est fa dans Ie package appiicatil Lo.sdI insrallaijon, pour processus une couche l package analys, via gagnerchaque est octetqu il est possible a nouveau disrribu te sur de communication type IpC (htet disque tlphon, de d conomiser chaque du r nregistrdans cyclehorloge i Plocess Calr.Le mssage rcupr iramewo.k, clsses optjmises est les sont parle procssus Iactivit, de intefpft et alimentntn cache. activirs.les Ls Enfin. ve.sion dAndroid vient localementetlhcrivircorrespondantees! la 2.3 quj servrces tesgesuonnaif decontnus . et es oe softlf p.opose ramass-mjetts alorsinstancie xcute. aftes un et Les sontalorsprt fonctionner capable lonctionner mukitch. messges ljvrs lacrjvitqui se de en sont pou.viter inteffompr applications. cnarge lesinterprtef. Cetarticle dcrt lsgrandes d a les de llgnes . du system propos par Android. ll entre que . Lacommunication lesprocssus appa.aitclairement lesapproches sliclue un priphrique vla noyau slectionnes tmotjves une ont par (/dv/binder), permettanr optimisation outrance. setraduit spcifique Cela Enplusde toutl infrstructur na departager lammoire (Voirl arricle souvenr unecomptexit de paf supptmen_ tive,Andfoidinrgre moreurWbKit . hle. Prdcess un C1l,plusloin dansce tairelo.s desdveloppemenis. r pourla navigafron (le inrernt mmequ nnlroJ. Pourdesraisonsd conomie, la so!! Phone Blackbrry)run Fr mot;ur couchdecommunicationne gfequedes Javascript. deux Ces composants peuvenr typsprimitits. Dsroutines criture d treutiliss lesapplictions tout etdelecture par n doivent rdiges tre pour lii http//elinux.orglAndroid Kemel oupartie. Desvnments permertentde chaqu objet(Pa rcerable). n'ya pasde Il Features contflerla navigarion lutilisateuf, mcanisms de desrialisation automarique

E w"uxit

LOGICIELTE L'ARCHITECTURE AhIDROID DUSYSTEME


\

dans l'architecturelogicielle du systmeAndroid. Nous allons descendre ? communiquent-i1s en Quelssont les processus jeu, que font-ils? Comment
f.amewo.k u nlveau systme,le autour Androidest organis de de plusieurs instances la virtuelleDalvik,dansdiffrents machlne Toutescommuniquententre elles lide d un mcanlsme d'invocation in(ci ter procssus rticle ( Inte Prccess Callt par envoide messages. est Le framewo.k portpar unelns virtuelle Dalyik,qui tancedel machlne exposedescomposants desservlces et Cest le processus aux applications. Systenserverqui doit tre actif pour que les applicatlonspuissentinteragir avec le systme.Les bibliothquesdu permettent communiquer f ramework de aveccette lnstance(en IPC).Si cette machinevirtuelle tombe,le tlphone est gn&alementaedmarr, peuvmt trelances Lesapplications Si suivant deux approches. le terminal pas, nccepte ou nedsirepasI excutlon procssls unparmtr (via de depludeuB chaque ppllcation isolee est compilation), dns un chargeurde classespcifique, Tousles traitementspartaBentalors la mmelnstancede la rnachinevirtuelle. Zygote,aprs avoir effectu forko un Ce du processus. mcanismepermet d instanclerrapldement de nouvelles machines vlrtuelles Dalvik. Afin dbptimlser le chargement des applications, Zygote dandnirl architecture logicille par commence prchar8eruneliste de parlescriptinit. rc Zygote estlance classes mmolre, ler lesDLLJNI et en Ce d'initiallsatlondutlphone. scrlpt ranass-miettes fairelemnageatdedu I utilise unesyntaxpropritire.per aprsle Ainsi,lesappllcations drnarres mettantdedcrirediffffentesactions fo sont djprochesd tre excutes et les comportements adopteren et Ia mmoire optimise. Chaquefork Fautd casdeplantage un processus. pr-charpossde copiedesclasses une il relancer le tlphonesi le mme geset du lien JNI vers le code C/C++. processus chouetrop souvent? Zygote chargedemodifierle UIDet le se ? Relancer simplementle processus de CIDdu processus avantle lancement Ne rlen falre ? Tout cel est dcrlt main( ) deactivtyTh read, la mthode dansle ffchierinit. rc prsentdans le boot d une application. Ia racine du systme fichters. de Un utre dmon est prsent, permettantI installatlon de nou(instltd). Ce vellesapplications dernier rcupre le fichier P(, utilisateur un et assocle compte un goupe chaque application. invoque DEX0PIpour initialiser le cache de Dalvik, proposeun rpertoire pour I appllcation (ou accessible possdant mme le lesappllcatlons Il signataire). est invoqu par le PackgellnagerService, Cetarticleadoltplusnprofardeur lrchitecturclogiclelldAndroid,les procssls intectlons m4eu6 etleurs de Il estimportantdvoir conscimce ceslnteractions,pour limlter autant q possible communicatlon entre la I uneappllcation etSystemserver.

LemdedeActivitYlhrad commence par instancier Loope.pout couter un Les une pile de messages. messages arrivent I aide du protocole IPC,via sendllessage( I'invocation lamthode de ) A de I interface IDLllessenger. peuventcoha Slplusieu.sprocessus messages interprtspar sont le biter. ce qui est gnralement cas,]e Certalns activityThread pour lnstancieret frameworkdoit instancierdesmachlnes les dclencher activitsde I appltcadon. De virtuellespourchaclrne. plus,il utilise raclne des identifiants utlllsateurs diffrents systenservei le processus pour chacune. Celapermetde lesisoler du ftamework, possdegalementun de les unesdesautresau nlveaude Llnux. Looper poor recevoirdesmessages la part desapplications. des Pour optimiserI instanclatlon machinesvirtuelles, Andrcld utillse un Pour signaler Zygotede lancer un por- nou!au processlrs,faututiliserla dasse processus appel Zygote, il spcifique tant unepremlrclnstancedeDalviken ndroid.os.Process, Cettedernire via modle, dernlercoutes un socket communlque un socketavecZygote, Ce un local.Surla.ceptiond unellgnedecom- po demander fork et le lancement par d'une classeJava(cflIllustration 1). cette est mandes, dernire interprte

CALL INTERPROCESS
par peu nousintresserunetechnologie exploite lesdveloppeurs allons Nous : frameworkla communicadon de matresse tout1e et d'applications,pourtant entrelesprocessus.
la our permeltre communlcaprocessus tionentreplusieurs et ou entreuneapplication le (svstem5rver) -arrewo..i( ccur du est de un mcanisme communication pourBeOS) (initiaiment conu Dropos de il p;rmet de dcrireune interface deuxprocessus. entre communication dansun Cetteinterfaceest exprime IntefaceDescriptian NDL(Andmid flr\jnier ires une avec syntaxe pfoche largae), d Java de l aeclarationuneintrf.e partir de ce fichiealutilitaire aidl permetde gnferune inteflaceJava L'une t deuximplmentations. dlles cles les permet propa8er invocations de avec versun autrepfocessus, mthodes Lautre de snalisation touslesparamtres Elle l rle implmentationjoue inverse. d reoitlesinvocations un autrprocessus sur en etlestransforme invocations une d implmentation classe Java pri les et Linterface toutes classes dansun seul phriques sontgnres en flchiersource ]ava, utilisantdesclasses doit Ce internes. codegnr trepresnt permettre processuspour lesdeux dans unecommunlcallon ADT d Eclipse(Android Lextension o veIopment To Is) saitlraiter utomaDe La tiquementlesfichiersAIDLprsence des de d'unfichier cetype ct sources de Javapermetla gnration tout le code toute AIDL d Voiciun exemple jnterface aidl danslefichierllonservice sinple, utilisantdestypesPrimitifs l[onService,aidl // f ichjer
/ / f l c h i e lri o i s e r r l c e . i t v a exteids pblic linil cliss110nser|Ji Servlce i, iit I ofsadd(int b)i { 00rerride ) inteflt) public nder lBi ongind(ltent code Pourgnrerle Javacorrespon_ {

ww
I P-r,. I
| FsBr..0

E II
| rdsr.-. ,

d Gdnerction codePour|P

comme Lecodeproduitestschmatise Proxv dansI illustrationl. Lesclasses de internes I in etstub sontdesclasses IllonService.Proxysecharge terface. distanceetstub le d invoquer sefvice des les de recevoir sollicitations autres l pour processus invoquer implmenta

public f sttlc iiil lil{tsedic.'tta = birder er ImoiSsfvice.5t!(l { 0rerrid publlc idd{int iit b) rx i, lois { ]
]i

par sefiectue la decri Ljnvocation Pour publierune API d invocations vrte du serviceet par I inlocalion ds de ii distantes, estncessaire proposer mthods. un sefviceAndroid,srvantde point com&ti01'rSdic.(Gttdl d entfe.Ce dernier doit surcharger kfi icd0m{cti0n {odlk ' onBindO pour retournr la mthode i c!tumlttlil![tlglttolrse mid distnt 5orie) du clissliire,lSiidof l'implmentation service {
__> <l-- fi clri ndr0idfanlfe!t.r[j] er <service lonseryi'> iidmid:rane=" <ciion 0r9.nonpic(i!e indmid:iane=

{ '

I||oisrire ri - lni:n_-..5d$fk

mnSrtrice.dd(Ll,Ill l !l r chllerotlq!9tio* { J I $id iu]ii ois.ilnl::tecer(rtl-

ou dani,il faututiliserEclipse invoquer : suivant la command

)r

{ )

Irtert(llonsrflice.cliss. bidselc(ir gi|lane0), [orien.Slt-Ul0-trtlt) i

puiljc r hlohrtl(hrcel tut ilils) desi, roid

i
)

dert.rfihstrg(noish'ig)i dert.idhlii{mminJi

des E Ad.lectifs paramtres


interface AIDL Lesparamtresd'une pzurent enrichis d'unadjectif indiquant tre si ce dernierva servirdentre(in),de (inout). (out) Celaun sortie oudesdeux Cesadjecttfs impact le codegnr. sur que nont n ontdesens suf lesobjets.Ils impact lestypesprimitifsqui sur aucun que ne fonctionnent par valeur l.ildl // ficlri$ I onse { i lypeljn input, ouhut, t Type0eux iiori lypdmis inputouhrt); ] Lcode ct clientestalorssimilaire celui-ci:
tehrcslible(1r) cel ; Dif Request.rfi jipltouN) cel i Drf Requesi.rdtehmlle( Response:inloq!sRriots( ); Drcel Re!ponse.rgidhrcelbleO 0rird=pircel i in!ut0utputaimdksp0nse.readkrcelabld) i

mthode distante inest Lorsquune par processus,la mme voque lemme Par file dexcution utilise. contre, est par est si la mthode invoque un autre processus, desfils dexcution n d'un poolestutilis.Il fautdoncrdigerles comservices tellesortequ ils soient de patibles uneutilisation multltche. en

bliciit dr rlhhtot!(J { reiunli

i
j0! 0rillcr!i!ic flnrl hrclal!.Crsit0t<l|o

= ctimr
{

iii hlcdih.Cf dol<l|on0lD( )

Et"stypes
Parcelables
Leschoses compliquent se lorsqu'on plus souhaite utlliser desparamtres que complexes lestypesprimitifs.

ffrfids tu) rrelieftuntrftl(hftel !lic loiotl!t { reium fo bjst(ir.rodstrii90, m ir.rcdl 0)i

00nrride Tous les paramtreset les objets irirr(jt rl:e) Nliilodjottl par renvoys une instructionreturn 1 Prcetabt.Ctst unein tre doivent nti ier|lon0Jthlreli terface quivalenteserilizablde ) misexploitantuneAPIspcifiqueJava, )r Ilestncessaire rdigerpourchaque de Parclbtele codedesrialisaclasse Un Ltnterface notreseraice modifiee de est tionetdedsrialisation. paramtre Prcel est disponible, proposant des pouraccepter parmtre cetype. un de API de bas niveaupermettantI'ajout de types primitifs au flux. En ralit, // flchief IliorSsfr$.a1dl le flux est une zonemmoirepartage pi*igeorq.nontrkgei Lorsque fluxest le entrelesprocessus. ory,rmnFcka9.ilon0bjei; la mmoire l|rpo entirement constitu, zone pour que estenvoye I autfe process'rs I et cedernlrpuisse analyser construire unecopiedetouslesparamtres. Ensutte, { l o i ! i d d li t , 1 f tb ) i ( peutinvoquer traitementJava [oi0bj-at (1nfon0bJet le code Ie obJ)i 9i djstant.Lobjetretournpar le traitement J pour retourner suitun chemininverse Les Mais pour pouvoircompilef inter I au processus appelant. appels sont synchrones, Linvocatlon un service face.il faut indiquerce quil faut faire d distant bloquant quecedernier de la classe est tant llonobjt.Un autrefichier n'est trait. AIDL per.netde dcrirecela.Il nest Pas et de au Voiciun exemple d'objetParcela ble quedclaratif permet signaler conpilateurAIDL que tlon0bjt est lours1mp]e. parcekble.
public Pircdable diss ltoi0bjet inple|rerh { gi 5tdi! _rloiStrl iit jnontniir; prbli 110lloblei(Stdn9 c iStr1n9,1ni iEntier) { _norSirin9TStrin9 rnontnilerrEntieri 00wffide

Le codectserveur similaire est celui-ci :


dhrcelableO in0ut=pmelReqrsst.f i TyFDguO; louvel]e // istaice outputre[ Rqesi.readPircdible( inpuiouhuFparc-l ); jnp!i,0uipui,input0uhut) -iipl.mi[itlrode( i jlehrcd abldouhut) 0ircelksDoise.r i pircelReipoise.NrJthrcelabldiiput0rhrt) ; corrii{)i

est Le codeproposci-dessus une grandesimplification codegnr. du I maisil permet prsenterimpactde de sans complexit excessive. cesadjectifs sur Uneinstance construite le serveur est pourles avantl'invocationdela mthode paramtres type out. Lesparamtres de par detypesoutet inout sontrenvoys valeur I appelant.

E Invocation dans
les deux sens

, fichler lior0bjet.iidl prcelable ilonobJst,

possible recevoir ilest galement de une dun objet en paramtre intefface gnrer Maintennt, nous pouvons le dlstant,Dans cettesituation, paramtre le codencessaire. ne seraBnr Rien par valeurmais par nest ps envoy l'{onobjet. pourla classe rfrence. permetiamiseen place Cela sens d unecommunication lesdeux dans entredeuxprocessus.

lors I appelant.iautalo.slesconvertir Il permet invoquer service nvoyertellesquelles d un Voicideuxint.fac-"s:l'une et pfocessus ap' de I jnvoction lesreconstruire la maindanslppelant. invoquer le comment distanr lui indjquant en pelanten.etourilutre dcrltl appeld retouf. Pair<?,?> Plusieursappfochsson!possibles:utiliserune ou Parclble. pour le retour de la mthode. ajoutrun i i / / F r he r I m 5 e N i c . i i i l pourpropager paramlre type TransPortException, d p!Fn(up ey, \ l epuon ia -n nlitPdrexenpl
iDport q,n0r1pii!e,lNCllSacki 0f

fcilement. une avec s'eflectue assez approche Lapremire gnrique. classe


hr eS P erf c l a s s i i r P i f t e l i l < h d s P a r c d i b l e , x i e n d sc l b l

c l r 0 l d i r e q i s i{fi l l k d ( l | 1 a l a l l S a dl h d ) i e e l // ficii$ INitillsick.ldl

{
D ! b l l cP i f P r c d b l e 0

{ ] p!lic f , 5s ) tuirPdrcelable(f { d ou Ie comme habitude Nousgnrons codencessaire du iaife ]e boulot.PourI invocallon Eclipse nouslaissons par il n distant I pplication, fautprocder plusie.s sefvice de un Lapremi.e consiste proposer instanciation tapes. Ir,4CtlBack, hritant IfiaCal.lBack.5tub. en de l lnterfac
// ficfierlihllSicklntl.l,a Ilalalihck.lh BblirdNsliihllSictld erlelrds { q0!rrii! pblicr0ii cillhii0 i|lmN! lemieh(pti0n I h S r s t e i . i i.tp f( " c i l l h c t " ) i l

00reffide

(l p r b l i .w i d r t i t e l o h r c eh r c e ld s i , ' ) p u bci i n t d e s c r i b ee ios { ) i tct { ) d * t . N r i t h r c e l i b l e ( f i l lo tq s ) ; r, lns d e s t .if!fe h r c e l i b l e ( s e cio !d ,) ;

nous.levons et Pourgrerla persistance l objelcREAToR uriliserunesousclasse.

via la d Il nestpasncessaireexposer cl.ibacl un servic. public [yh]r erhnds PirPitcdible<llyobjeci,ilytuepti0n> cliss llcallBacklnpt avantde la Il suffitde crerune instance { paramtrelorsde_l invocationd unemthodedistante. livreren { I dissiin,1!iidef rid Flic 0iSeflicli0rcted(hryomfirm trnite) r, ytrprion s) Hrhlr(liy0iject iubric { { ' ice)l 1forleflirevr. Ini S ice.Stub.i!1itrht(s n i Sr i 0 0e rillhdrlN lliCill0icilryll)l IflcdllBarI r0r!rice.eire9isif Cil lSidkillhd)i l = litli0R hrcelible.hedt0xlilPir> mi siatic Dublic finl hrclble.hetodiyhir>0 I
p ! b l i cy h l f c fe i i e f o n P i r c d l P a t c)e l ii l c "1 f r ) ' 1 " s 5 - o i o e 'o e= q e L L ! r ) , ! l ( -!i c d ' _ ) f y 0 b j e i = ( r i y o b j & t ) l n . r e d t u r c e l i b:l e ( l c d e f ct N y [ x c e p ts o i y t r c e p i j 0 i ) i n . r e d t u r c e l i b l) ,{ l 0 i 0 e f ill e n r e i u m e i[ ! h i f ( i , s ) i ] r i ! ! b l i cl y Pia [] n e r A f f i y ( isti z e ) { r e ! u rm l l y P i i f h i l i n ] li

{ l l Ainsi,lesduxprocessus interconnects. sont


I

Il

Ixceptrons

? sont Ies Comment gres exceptionsIl nest paspossible AIDL. Cela complexi dans inte.face une d'indiquer exception d doit fiesouvent code, l retourdunemthode indiquer le car : la etlou simultanment valeurretourne duxinlormations les Comme capturepar traitement. le l'ventuelle exception Parcelbre, ilnstpaspossible les de sontpas excptionsne

Elle est approche plus lganre. consiste La deuxime de srvant t.ansportaux exceptions de crerune classe e une est r Cette classe Pa cet abL lile mmo.ise l application. par de entieret en capabl la propager exception un simple et de Ls sur l clientl demande. rotins srialistion de

AIDL est modifie soccupent constf de uire Ainsi,I interface ds.ialisation instances suivantI hritage pourajoutr paramtre typeout lesbonnes un de desexceptions Iapplication. de publi. clss riml ftir0odtxceptl0lr irnpleftnh {
publir r) 10id ilttrtti10u*yhcepijdi

c s t t _ l u LP 0 l l T t R l e L i h r mr e i r i r l l l 0 i i t e r t x c e p t i 0 n ( n s s ) ! 5TTtl ris Er ILLl0At i h f0 r r e i I l l E l 5 t ! e t r p i i 0 i ( d s q ) ! ) (' Unlnoi]r thf0rmr [rti mdxcpti0n

inpodhiispottuceptiorli

I
{ ) ihrds roid lulic leifxcepiioil) 0utfrfuc0lior { ) ini rublic de(ribeftitsts0 ) iritelohrrl(hfcrl ifi rlqsl deli 0!bll(r0id { if Ie iishiclf iutl'0reryticetti )irpe{i iNhrclor lyF=ll if 1_! 0uerytmof) )

(0!t e)! oiobi9et Trrsp0ritxcepiim

r (ode nsq + nsq)l +

d Lc mcanism lPC est souvenL en urjlissansque le d"veloppur ait xtgids disrf0nlilsfielmpl lloilntedice.S!!b Iors Par loujoursconscienc. exemple, d delutilisationun contentProvider. q.t(Ilinspodtxceptioi rirn0bi d est ntf1e unecommunication tblie { p.ooucreur re pfocssus processus er { Un la consommateur curseuffetounre pfemire pagedesdonnes. Lofsque un requte cela ncessire, nouvelle st ) pour obtenifla distantest invoque page slvnte. { l l )

Limplmentation devient :

E fa ctedevote

l
publvoid ic fidfforturdltdrd in) { { qcr4 lrll'oftryt eptioilIi rc.rcN orl)i oeryt
nc=iei0!.dr)lirnin!( )i

tchnologi la clde vole est Certe Et I utiiisationdevintrelativement En de tout le ffaneworkAnd.oid. efft, srmpre. lquenl Iaidede lesprocssus commun pouf le messages demander lancement I l o n l n t e r f ee r f = . . . irt dune activit. signaler clicsur n un bouton. pertedu rseau, Ces la elc. sont envoys laide d une H o r 0 ! j e i! j = i n t r r a c e . q e t ( e ) i messages o s e . 9 e i t r p i i 0 n / ; i i c e u i ee x p t j mj / 0l intfface AIDL. sule
,e / / f i c h i e rI $ e s s e i g a if d l e r t r 1 t

l l sttic 0!bllc fiiil hfcrlilo. Cft at0r<Iri$0rttrc!pti0r) C{llT0l.


neihrcdibk.if ihxhiN0miheptim( )

{ prblic lrmsryttxe0iior rreihff!frl(Pircel ir) { lf inspof ttrclltior |t:l]el irinslofttrcEtjo|]0i )


p'ril Tf ic iNlmih.!piioill

ceqe Cette approche similai.e est le codAndroidutllisepou. ce.taines propages automatiquement i n p o r td r d m i d , o ! , l i e s ! g e i exceptions, lors d I invocation. Cesi le casds iiterfce Iliesser9er onewy Se e x c p t i o n s c u r i t y Ex e p t i o n . { B a d P a r c e l a b l e E x c e p t i o n , y o i ds e r d ( i i[ s e q e n s 9 ) ; I l l . e g a 1 Ar g u m e t E x c e p t i o n , n ) N u l l P o i n t e r E x c e p t i o ne t Cetteinte.facepermetde dpose. s I l l . e g a l S t a t e E x c e p t i o nC e l a e . dans la lile d un autre des messages Prcel. retrouve dansla mthode processus. dernier alors est mmofis Ce .eadException( ). dansunepiLe message dlsposition de de lapplication. Sans cetteintrfaceil p u b l i lc i l v 0 i d e i d t u p i i 0 i (c i0 d e , i r i t ny a pasde distribution messages, des 5 l f i i 9n ! ! )
{ {

Cetarticle aexpliqu technologje une fondamentale ffameworkAndroid, du cas tX-StCURiTl qui estpourtanr gnfalement ignore tlr0NIei Securitylxpti0i(ns9) i case B0,PR{ttABttl tX invitons dsdveloppeurs. Nousvous ihr0, mr BidPif cdibletrceptj0n(|lss); vous attarder quelqus y heresafin d i)( cse ItlEttR6|]llr: le biencomprendre rnaitriser curs et tlrM rer Ill-a9alhq!nnttxpiioi(i]s!)i du ffamework. r

{ l
)i

nei ruhM hisp0tcrftioildrli

Ift I TT

irl

LES STRATEGIES D'INTEGRATION


d'une au nous Nous allons maintenant intresser dveloppement justifipar unefortevolont d'intgration. native, application
dans tgrecomplerement le systme d exploitation Androidet dansses applications standads. fobjectif est de proposerune applicationqui pratipsnnt du tlphone. dlsparait Lutilisateurnesrendpratiquement pascompte quil utiliseune appli Le fmewo* Andrcidproposeplusieurs catton spcifiqe.Il a l impfession approches pourpermettreI integration appli des nattve cations d utiliserune fonctionnalit avant Nous allonslesbaucher entreelles. du tlphone. pournotreappllcation. deproposer stratgies des En principe.cla devrait nous forte : Il ne faut pasoublierune contrainte car chaque amener codermoinsde code, est dans application excute un processus nousallonsexploiter maximum diffrent. estmme at possible davoirplusieurs ll Mais partiesde Ia mme toutes fonctiomlit deI OS. les dans excutes application plus celaserabeaucoup compliqu dtffrents pas processusCelane contribue I quederaliseruneapplicationclas la I car faciliter intgration. il faututiliser couche de d invocation objets distance sique, il va falloir consulter car pour dAndroid d nombreuses lignesde codede IOS permettre communication lesprocessus la entre pour comprendre qui nest pas {Cf.l'article( hte.PmcessCalT danscenumro). ce ) document, trouverdesstratgjes joue le rle de chef Le cceurdu framework respectant autres les d intgration vefs les dbrchestre. aiguillant messages ls en nement pplicationsetcomprendrefi applications engfantle cycledevie et dans une dlFrentes le fonctionnement cela, de processus. de Lbbjectifp.incipal lrchi dechaque chorgraphie lgante. lancer un de tecture d viteraumaximum devoir est les Nous allonslousraconter pistes processus pourrien.Toutestfait pour vitercelaexplor leserreurs. lestentatives es, ne Les applications bien programmes decomprhension, integration,de d pas netchepourexcuter doivent maintenir permettant matrisedu systme, Il la d:rvoiruneapplication plusdiscrte un traitemenrrgulirement. faut utiliser I Atarmllanagerpour relancer application. possibleetlaplusintg.ee.Celasera de il est les I occasion d'voquer diffrentes Entredeuxvnements, alofspossible processusafind conomiserl'nergie logjcielles documentes. sacrierle non couches mmoire, Lapplication et rdujrelaconsommation Nousallonsparcourir tous ls peutelle-mme son demander arrt lorsquelle sujets traiteravantla publication n'ariendutfe lir. Android le choix : d uneapplication d uneplace demarch.laralisation de du plan marketing, stratgie la prix, etc. entrelesapplica Un busde communication La rgle princjpale toute la pourdclencher parlenoyau des tionsesttrait conceptionest la suivante: en traitements fonctiondediffrentsparmtfes Leslntentssont messages des . Il fautaccepter tredirigpar d unenintention,. d '. vers les des lagestion conome ressources pou\,mttredistribus totes applications.

'cosystme Android ne pas propose d application pour s interfaceravecun annuaireLDAPDansles grandes entreprlses, coles ingnieurs les d cela oulesuniversits, permetdvoir de un accs I intgralit l'annualre des des dscollaborateurs, lvs, professeurs desciients, sanspour ou autantdevoirlesimporterintgra lement dansle tlphone. peuvent annuaires tre D'autres lespages consultsen ligne. comme de des blanches, CRM(Cestionnaire reltion clieno, rseaux Ies soclaux Linkedln, etc. Facebook, Twitter, cornme permettent de Plusieurs approches proposer service. plussimple ce La consiste proposer etla plusrapjde Androidclassique. une application offrantun formulaireavecun champ rsultat derecherche amchantle et plus de dans liste, une avec oumoins application ne dtails. Comme cette qu putfonctionner enmode connect, pas Bn ide. cen'est unetrsbonne effet, celaconsomme lammoire de sur et desressources le tlphone, sansrellevalurajoute. consiste Une autre approche proposerun site web servant d in et termdiaire entrelhnnuairLDAP Une HTML5 le tlphone- interface pour cela. suffisante est largement dansle tlphone est Lapplication pulsq consiste un elle en minimale (c[ . simple favori, du navigateur. ( HTMLs pour la plupart Article , desapplicationsdanscenumro). une se de JQuery charge proposer e.gonomie sympathiquepius amusant Il est beaucoup qui d crire une application s in-

Il r*, stratgies
du d'intgration framework

E f", intentions

quellessoientencoursd'excution non.Lesinformations ou peuventCtretechniques : prsentes dans cesmessages ". invoquettpllcd(tivitc de telledpplication o! s|'l.an ner tjques: (je dsireslection uneinnge et enavoirI URL,.

Il Lesappucatrons

des Certainesapplicationsproposentgalement mcanismes par gnralemmt qul Cela d'integration leurssontpropres. seffectue un ques Intent possde action, data(une des une paramtresspclfi daff le fichierAndroidllnifest. xml. Un message puis dutresparamtres Lesactivits,lesfournisseursde contenuou lesservices indiquent URIindiquantl'objet manipuler), categories ou un intentions, certaines commeune catgorie, type mimq le nom qulls peuvent rpondre crtaines optlonnels, pointantgnralement desfichiersXML vers et d desmta'informations d un composant un bundie extras. permttre intgration srvice. prclssrHt comrnmt I du decrivantpius dclares sur Le noyau, la basedesfflt.esd'intentions potentielles. Soit par lesapplicatlons, calculer clbles les 11 faut pasoublierun principeimportantdAndroid: nejamais ne va est lancer une applicationsi ce nest pas strictement indispensable est auquel l'application cas un seulcandidat posslble, dif_ et dma.re lctivit esl prsente lutillsateur i soit Nbubllez pas que chaqueapplicationest dns un processus plusieurscandidatssont possibles. Une bote de dialogue frent. Il est donct.s difrcile d integrer les applicatlonsen pro_ propose I uttlisateur choisirune des cibles.Il peut fondeursansexposerles obje.6.viannlDL (lnterfaceDescription de de galement figer ce choix pour ne plus tre tmportun par Languag et la Enration code pour le cllent et le serveut une activltcapable rpondre des de En proposant ll intentionssmntiques, est possiblede s lnsrer lors du Desinitiatives seproposentde normaliserdesintentionsentre passage une activit vers une autre, au prix d'une boite d les applicationset proposentdes bibliothquespour faclllter la de dialoguepropose I utilisateur. (http://wwwopenintents.org). applications cration nouvelles de facile de lancer une actlvlt spcifique Il est galement pour integrer Nousavonsparcouru les difrentes approches une intentionconstruite en dune application, envoyant son systme, ainsi amliorer et Androiddans pour cela.Cettedernirepeut tre technique,avecle nom une application application, utilisateurAndroidnimposantaucune packagepour tre certain de la cible, ou smantique Ie-{prience du le de il est alorspossible personnaliser terminalprofondment. pour permettre l'ouverture avecdescritres gnriques pourla ralisation une d nousutilisons stratgies ces dsigner URL Parla suite, une C d{rtresappiications. estun peucomme appllcationfortementintgre. r d un site pour amcherla pagecorrespotdante. Lintgratton desapplicationspar ce canaldpendde la Si bonnevolontdesdveloppeurs. lesactivitssontdclen' (type de message, type ches descritres smantiques sur possiblede les utiliser Slnon,les effets MIME, etc). il est de bord peuventnuire la stabilit. API permettentde gnrerautomatlquement Quelques pour invoquerdhutres applicationsrponclant desmenus certatnscritres.Celapermet I applicationde sdapter suivant les autresapplicationsprsentes.
Inhn!iniit= ier ]iiem(null,uneu ); inini.add0ihq0ry(lhni.^lltRllTIllL[lTt0[Y) i r .addlnhii0Dti0i(|ltu.ltTERlllTIYt,l, n0|ft iponriilam(tlis,[on^djyjte.c]a5t, r u l l ,i r t e n i , 0 , r u l l ) ;

initiatives E f", autres

ore F.D.
Vousproposedes formations le sur dveloppement d'applications
sur Android!

par rpondant la Lemenuestaliment lesapplications pour ALTER ATM_TEGoRY notreURL. catgorle I

El Leswidgets
graphiquesslmples, Les wjdgetssont des composants avecpeu d'interactions.Ils sont construits par des appli_ I cations,puis l'arbre reprsentant interfaceestenvoypar par Ce dccuil bureau e,\emple). valeur lpplication 0e dernier intgre alors l'arbre de widgetsdansson interface sjmplesde I'utilisateur, tel et rgit aux dclenchements Les un clic sur un composant. widgetsne peuventavolr de car comportements complexes les appllcationssont dans desprocessus diffrents.

www.pythagore-fd.fr
T l: 0 1 5 53 35 2 1 0

IT

tA DECOUVERTE DE L'APIDES CONTACTS


Nousvoulons proposer listede contacts, une avecuneinterfacela plusproche possible la listedescontacts de intgrs
dansle tlphone. particularitde notre implmentation La rsidedansle fait que les donnes contacts des sont en ligne et non dansle tlphone.

cesclasses etcesattributscachsysont accessibles. doncpotentiellement 11 est possible d'crireun codequi utilisece qui est interdit. El cest prcisment ce que font les appllcations standards Comme existedsaccesseurs il de livresavecI OS.Un petit malin peut remplacement.modifonsmanipula les celapour utiliserdesclasses La premire ide, pour proposer tions desattributs par desgetx( et des exploiter ) etdesmthodes confidentielles. quand cetteinterfce, estdercuprerle code setx0. Cenest passufrsant. code Le ? permettant dfficher de modifierun utilise galementdes classesinternes un livre sur lAndroidcach Nous et allonsy contribuer partie danscet en contact.Les sourcesdAndroid tant inconnues SD( ! du ouverts.il nesr pas trs difficile de Comment est il possible Enfait, cela ? Iocaliser code. le pourpouvoir Dailleurs, compller les l'archive ndroid.jr propose le projets par standards. uneastuc consiste Lrborescence sources p.ojet SDKn'est quune coquille vide. Elle est des du archive paftirdesvritables Android assez est simple. rpertoire construite parri. du codedu noyaudu crerune Un packagepropose diffrentes les appli liamewor.ket pmposquelesclasses, ne cationsproposes dfautpour le les interfaces.lesanriburs finaux et les par tlphone. le sous-rpertoire Dans pps. nomsdesmthodes. vousdcompilez Si on rtrouve toutesles applications de une desclasses android.jai vous de base le bro!(se4la gestiondescontacts, constaterez les[thodes sontvides, : que du calendrier,la galerie, gestion la Elles la de gnrent toutes exceprion. une Les Ainsi,il est plus facilede naviguer musique. etc. vraies implmentations sonr prsentes danslesclasses applications des stan Lrchivenest pas Lpplication Contacts un projet dans le tlphone. est dardsdepuisEclipse. il ny a plus car qui prsente mmestructurequun prsentedansle chier . apk du projet, lescentaines la par d'erreurs signales Ie projetEclipse classlque Android,avec ellene sert qu l edidonde lien dans Eclipse dela compilation. lors les rpertoires src, gen et res. Donc, Cestbienjoli.maiscela nouspermet ne en deuxminutes, peutdemander on Pour contrlerprcisment que ce En rienne Eclipse crerun projet Androidet GooglesouhaitepubliercolnmeAPI. pasderutiliserlecode. effet, de que sera coopatible d importertous fichlers. sera les Il alors desannotationssontpsenresdans Sarantit noecode les ptchde I OS.Il faut faciled'intervenir pour supprimer tout sources noyapoursignaler du certaines avecle moindre rcrireintgralemem inrerfaceou jntressent l ceux qui ne nous pas, de mthodes nedolnt pastreprsentes qui utiliseruneauesratgie. modtfierquelques lignes. ci,de-l, de ain dansle fichierandroid.jai carcoogle de s interfacer avecun annuaireLDAP serserve droit delessupprimerLAPI le Nos prposer ctivit souhanons une pourrons Nous alorsproposerune fiche nest pas publique, doncnon prenne. similaire la consuharionun contact, d de contacts ldentique ce quepropose Seules certaines mthodes, classes misnousneprrons pasutiliser le code Ies Android nativement. et les attributs finaux sont prsents. ouvertdlndroid \laulais nouvelle. Et l, premire surprise: le codene Mats, comme code le lorsde l excuPeuttre esril possible dexploiter ps compile I Eneffet,les projets standards tion utiliselesvralesimplmentations, l'activir tellequelle ?

E sftatgie : 1
utilisateur

Rcuprer l'interface

dAndroid nitilisenr pasle SDXI lls utilisent directemenrle codedu noyau.Ils ont accs desattriburs nonaccessibles depllisle SDK

par ? de LaclasseContacts(ontract.Contats I interface Essayons voif cela reprsnte ficheprincipale Ia dhgrgation. en crantun contactplein raz-bord quen lectureseule. da!t.iburs. ElLe nst pfopose par Elleprmetd identjfier contact un de i Voicilesconcluslons cetessai le Les de un display name. instances ce ne nom (structuredNane) peuttre automatiquement typesontconstruites prsent uneseule Lesdiffrentes qu fois. lorsdela modification la cration ou de Il estdoncimportant seplonger d dans (Phon). vrsions numros tlphone de de propose IAPIde gestion contacts des de d e mails (Email),d'identits tchat la 2 (In). d vnements (Evnt), depuis version pourvoir comment c ddresses L c l a s s e o n t ac t s c o n t r a t , elle fonctionne voir sil est possible Ralrco ct s reprsente contact et nta vu istructuredPostal). de notes(tlote) un (contact e! d organisation (0rganization) sont de lexploiterpour notre projet.LAPI par un fournisseur spcifrque (<2.0) t interne, de la versionprcdente Twjtter, etc.). prsentes dansdeschamps diffren Cmail,Facebook, pas Une compltemnt revueet ne semble permet fairele lienvers cis.Toutes versions sitesweb les de colonne de pour (vibsite)et les surnoms(Nicknme) ncssajre le moment. via la fichede synthse sonID. dans des champsavec la documntation la classe de Dt sonr indiqus La classe ContactsCotltrct. le mmelabel,ne permttantpas de ContctsContrctest trs complexe estuneclasse reprsentant ensembl un corrctemnt. Est-ce un ls En cette d informationssurleRawcontact.Cst identifier etdimcile apprhender ffet, ? Les surnom Untrigramme? felations 13sous-classes/interfaces, classe classepropose une fourretout, permettant de lesgroupes sontpasprsents. ne proposant autres 13 sous- regrouper jnformations toustypes et ellesmmes des de I peuvent utiliss sous-classes/interfaces dans quinzaine colonnes. attri une de Un Tous attributs les tre butpermet indiquer d IetypeMIMEdes par desapplications tierces, mne s il IlsagitenfaitduncontentProvidei (des donnes numrosdetlphone. ne sontpasexposs des dansl'interface. avec d xposantdiffrentes lies, tables informationssur ladresse, le nomde sur nomDreuses colonnes. permet l'utilisateur, Une etc.). colonne de Rl,vcontacts associ Essayons prendrede la hauteur fairele lienversle de de de t de nousfocaljser lesexplications via son ID, Linterflace prsentation l implmentation la sur dscontacts prsenter sait comme ilse gestiondesc()ntacts dansla documentation. fournies doitdiffrents typesMIMEdesDatas. Il y a en fait trois tablespubliques. Toutcelaestbiencomplexe.Comment Ainsi,unelichest un arbredontla intgrerun autre annuaire? Aucune via exposes un ContentProvider. des documentationestalorsdisponible. via Chacne tantmanipulable unURI rcineest un Contact,agrgeant n agrgeant eux-mmes spcifique. fait.Iaversion dela ges- RawContacts, En 2 que dufournisseur Peu!tre le code dclinesentreize catgories propose lagrgation desDts, tion descontacts de contenu pls clair,La classe est de dansune seuleet mme diffrentes base. descontacts ContactsContractpropose fait 28 en viennent de liste.mmesi lescontacts Nossommes assezioigns un sorls-classes/interface, l5 de plus d soji se recordLDAP, sources diff.entes. algorithme Un maisa priori, nousdevrions et 20 sous-sous classs/inteffaces, soit les les pouvoir charge trouvr ffches de dcrivant pourpro laire uneconversion 7 de pls I Cesclasses/interfacs com pour nen prsenter posefun modle personnes. mmes quivalent. plmentaires utilises interne sont en quuneseule IutilisateurLlgodthme pourgrerles diffrentes tables vues et va trajter les nomsdesfichespour in et dela base donnes leursjointures. de les 2.1 tudions versef noms/prnoms, les supprimer I'interface Laclasse 5078llgneslEt il nesagit fait prfixes sumxes autressubtilits. et et quede I interface d'accs donnes. aux d'affichaged'un contact pouvant tre et trouverainsilesfiches Ainsi,il est contartsProvide12 de agrges. La classe Un contactpeut pos possible voirun and le enre- 5098 lignesimplmente servjceet sderde nombrex de et nuaireinteme,un atre gistrements Data,chacun utilise encorebeaucoup classes aiimentparCmail, un possdant type MIMB d interfacesIl y a 21autressous-classes/ I Lrn par pour identifier son type autre Facebook. un dernierpar Twitter. et desvaleufsdansdiffce Glups lDjfrcile deseplongerdans Plusieurs Lunion ces de annuaircs rentes colonnes. classes. code. 10000lignesdecodes,7l sraprsentecomrnerm enregistrements mme du Deplus,enregardant peule schma un seuletuniquennuaire type peuvent presents. etre qu de la base donnes, constate il de on permet dansle tlphone. Les Cela dvoirplusieurs yade desvues, des nombreuses tables, paramtresvenantds ou adresses. tlphones (ftse, autressubtilitsdclencheurs et pour e-mails lemme contacL diffrentessources se proposer APIsimilaire Parmilesdiffrents types une rontagrgs dansune Comment (cf proposs IAPI, par lesquels pournotreinterface LDAP Nvons-nous ? ffche seule etmme 1 : Modle des @nlcls sonr rellementaffichs pasttrop mbitieux?r Illustrtion l).

2 El Stratgie :
aux contacts

Etudier I'APId'accs

z.ztudier

fHf *.*::r9"fl :,9,.r,s$T


inattendus. des lui faire excuter traitements
le ne depis Ces d Facebook. dernires sontpasmodifiables (ci 3). rlphone lllustration nous amne alors sur une sur Unerecherche le rseau de pageIII bauchant I intSration un mcanisme synchro' d Facebook omcielle alor5 est l'applicatton cettepoque, de crire un fournisseur nisarion. Elle expliquecomment par de et propose ]a place march coogle, proposee de sur gymnastiques, Moyennantquelques synchronises. ressoorces une modles. propose fonctionnli Elle dfautdans certains pouvant mettre un de presen il estpossible proposer fournisseur gaiement les Si trange dans contacts. cedernierest jor Iesdonnes prsentes du dansles contacts tlphone. pe.un dansFacebook, nouvelitem apparatdansle contacL pour rafrachirles contacts si directement le pmfil Nouspourronsutilisercela dans l'utilisateur serendre de mettant ? (c[ esfcepossible deFacebook Illustratlonl). Comment il certaines conventions, est pos En gros,en respectant En fouillant I interface des contacts, on remarque deux un d et un sibledeproposer fournisseur jdentit, d y associer installpour rfrencer 11 compte choses. y a un nouveau qui de foumisseur contenu sem mis jour par le systeme. possibilit d'indiquer faut sil Il la Facebook. y a galement y ceuxpfsents uniquemeni Nous reviendrons. dansla listedescontacts afficher (ci 2). sur lacebook Illustration de un \lais nous ne voulonspas proposer fournisseur distantsI importanttous les contacts possibie, ajoutant compte synchroni comacEclassiques, de en un Il estdonc prsents d'importerles 6000 contacts de Cela Il nest pasquestjon de d sation, proposer autresfournisseurs contacts. dans lhnnuaireLDAPde lentrepriseI Nousvoulonspro_ Rav,Contcts. de expltque prseme la classe la d'tre poserun accs volatil descontacts. nbnt besoin Ils particulier. que et dansle tlphone le tempsd tre consults une prsenrs d un Endemandantlamodification contact portantlesvaleursvenant xploits. est section spcifique propose,

iTI MANIPULER

E Lu ryn.h.onisationdes
contacts

1 : Une fche avec Faebook

2: Intgon de Fab<nk

El Stratgie prsentation de descontacts


pouvons que va Nous imaginer notreapplication alimenter Nous rcuprs la demande. une liste avecdescontacts pourronsalors rutiliserl interfacede consultation de et des du Le de modification contact. servjce synchronisation de lorsquecelasera contacts chargera faire le mnage se seront effacs chaque ncessaire, contacts Les temporairs

importerun contactvolatil ? dans son tlphone Ce n'estpsune fonctionnalit proposepar l application standard. Contacts Nous nous rappelons alors qu un contactvenantdeFace propose nouvel book un attri but,permettant consulter de la fiche Facebook.

Si nous utilisions cette approchepour permettre I importationdu contact? il un Pourcela, fautproposer nouveau MIMEinconnu type de dansunrecord typeDt. ne Commel'intedace saitpas avecun modle donnes de le Noussouhaitons travailler les dansnotre Drsenter informations Drsentes plusprochepossible modle du standarddAndroid.Unesimple comment sur elle tant mmorisation mmoireestsuffisante, quele contactn a enregistrement, va sappuyer le fichiercontacts. en le tvDeMIME. Nous xmt dcrivant nouveau oasbesoin d'treamcb danslesdtails l utilisateur. pas la ;e souhaitons polluerinutilement basedescontacts f r requte LDAP, descontacts < 1 . - i c h i ec o i t i . t s , M l. > avec lorsdechque du tlphone pas dune donne dns volatils. oubliez queIa persistance N f .prd0s.c0mch. inport' droid:|jlieiype=.lnd.indf oid.cus0r.item/vd.f flash.Ces consiste criredansune mmoire Ie tlphone iible/i._[]en!_syt' ndr0ld:icori='oadroidrdf limit | mmoircs un nombre critures ont d y0olmirdihl'

E crutio,ldu modlede
donnees

iidroidisunif

andmid:detiilcol undih2' volat ilecontact, le pendant crerla clsse Nousallons > alse rdmld.detil50ciilSumiii='f pourvotatiteRa$contact contact,et demme delaclasse les nousutilisons etvlatilData. Pourmmorisef attributs, Hashllap. contentvalus 1aplace d'unclassique la classe detaitcolumn sont Lesattributsicon, sumnarycollmn. I de dansle tlphone, Celafacilitera importation ia classe del Contactsstandardpour utilissparI interface appiication lorsque celaserancessaire. gnrr1ligne complmentaire contactet permettre du 4). lffchagedu dtail(cf.Illustratlon

Il )tralegre o rmportatron des contacts

du dansune mtadonne Ce ffchierdoit tr rfrenc dans service synchronisation Android anifest,xml. de

-r f dans LDAP doivent < l - - t i c h i e A i d0 i d [ a i ] f s t , m l> Certins contactsrcuprs I annuaire < s e h i r d 0 a r 0 : r i e . l l 0 ! ' C o T i i l s S d d p [ r5( e 'e i / permanente, pouvoirtre de intgrs dansle tlphone fon idroid:rportedJtr' permettant misejourautomatique suivant une discrtion, fonctionner l volutlon lannuaireLDAPNoussouhaitons de synchronis. Lutilisateur com,.ne deI intgration lors drmuaire <ti0iindr0i Dnerandroid. coteit. SyncAdipier /> d: pour ou interroge lnnuaire I entreprise desonuniversit de puis de dans <ijt.dt trouverla fiched un collgue, dcide la garder .C0lrACn,S UCTURE' aidr0id:nnerandroid.pmvidef pourpouvoir coitici!" /> lutiliser horsligne.Siplustard, indmid:res0ufgxnl/inpi r sontlphone ou de le collgue bnficte dune promotion change bureau, LDAPdoncrapidement celaseramis jour dansl'annuaire va un Lorsdun clic sur cetattribut,ipplicatlon 8nrer dansie tlphone. Le rntent avec typeMIMEcorrespondant. codeinvoqu le d Nousvoulonsoffrir la possibilit importerun contact lorsdu clic surlhtribut ressemble celui-ci: diftcult rsoudre. LDAPNousavonsalorsune nouvelle demander Iappliction standard gestion Inioiti eirae rti!(lftm.lclI0l_llEll); de Nouspouvons nF i i i i t . s e t l y t e {d f i d fi d . . n 5 0 r . i h n / i i d . ia.d o s . ca cf ti s . i q 0 r i ' ) i eflac non,misnous ou desconr"rls d "m.hr un conrdct 0 \. 0 i pf directement dessus, efet,Android En Douvons intervenir Das diffrents. Notre isotelespplications dansdesprocessus une virtuelleDalvikdiffrente aDolication estdans mchine de data doitcorrespondreI del enregistrement type URI commentajouter boutonou un d;l applicationde Contacts. item/vnd.f prados.cofl r. tacts,inport. pourpermettre I utilisateurdesignalerqu il dsire vnd.android.cursor. unmenu

djprsent dans Il faut doncproposer une activitporir rpondre cette Pourviterle mlange entreun contact par rcupr LDAPnosdsactisollicltation. le tlphone, Ie contact et pour vonsle mode d'grgation Iescontactsvolatils. Ainsi.les < t - - f l c h i e ^ n d m l d [ i i f - a s i..> ] r m par contacts temporaires sontpasagrgs dfut ne avec ies prsents dansle tlphone. Celapermet galecontactsdj Iri!ortActi vity" indmid:nme=", plusieurs volalils mme nom, mais mn( davoir conracrs de LDAP venant dnnualre dlffrent. sanscolllsior,.
!ndmid:tlr|.A="ostltThene.T1n!pireit' ri|cotaci.!etAttr(Rniach.GGREGII0lt_H00t, Rirconticts.lGBtTI0 _f00LDISAtttll) i

<icti0r ndr0idrni[]erindmid.inieni.c>0n.|JlEl' a /ii <cat90ry andfoidrna[re=\ndruid.intnt.ciiegory.0tf^Ult /> <dia android:lrlmeiyp\nd.ardr0ld.cuNof .item/rid.fr.prad0s.

Nousajoutons galement lnformations des dans le RawContact LDAP la rfrence contact : du dansIannuaire LDAP(le dn, ,Jst,grslr ffar?e)| un drapeauindiquant si le contact doit trc suppdm lors d'une synch.onisation.Les syncI. sync4sontl pourcela. colonnes Pour optimisertous ces traitements, est prfrable il Il d utiliserun batchAndroid- sgit dune liste de modifications appliquer un fournisseur contenu. liste des de La d traitements envoye un seultenantet tous les ordres est sontalorsexcuts. Lorsquetout est termin, nous pouvonsdemander noude maisen demandant veaul amchage la ffchedu contact, lactivit courante celled importation- par de remplacer cette dernire.En effet, il faut falre attention la gestlondu * Retour, pourne pasperturber utilisateur I

Cela lancernotreactivit. soucidu dtail, va Par nousne pas I'etracement voulons quun clicsuf cetattributentrane l crandelafichedu contact,le temps I importation. de Nous allonsalorsutiliserune astuce une activittransparente. : Notreactivitva safficher la prcdente va pouvoir sur et prsenter une ProgressDialog au-dessus la fiche du de contact,le temps l importation. de

Celafonctionneavecles sources standards dAndroid. parHTC. maispasavecla couche HTCSense, dveloppe Le boutonn estpasajoutdansI interfacede HTCcar I interface propritajre respecte intgralement spcifications pas ne les Android.Il seraalors possible lmporterquandmmele d litit iitnt=nx Intni{ldent.^CTI()il_l/It[,rcsr]t)r contact un appuilong dansla liste desrsultats via via ou l i t t . s e t f l 9 s ( I n i e n i .CtT IL I T I _ [r 0 P ) ; t ^ Y Lt un appuisur la photo. Il fautmaintenant rflchir ce qu'il faut faire lors de I importation.Lutilisateur peut dcider,via l interface (cf utilisateur Illustration 5) s'ildsire nonamcher ou les contactsvenantdun four nisseur spcifique.Notre fournisseur LDAPne doit pastrecoch I utilisateur si ne souhaitepas tre pollu par lescontacts volatlls, Paa contre. un contact mixte. tant le frult de plusleurs fournisseurs, amch sera I utilisateur. 5 Anicnag contacls des poulonsalorsdfinir Nous la stratgie suivante I'importation : dun contactse traduit par technlquement la cratlon dun Raucontactssanspro vlder,allment uniquement Ie nomdu contact par Ia avec et venantde notreprovider cratlon dun autreRav,Contacts LDAP, avectoutes les donnesrcupres depuis le rseau. Ainsi, llgorithme de conciliatjon descontactssera capable pour nen prsenter quun de marierlesdeuxRa$Contacts seul.Il ne faudrapasoublier supprimer de notreenregistre' par mentDt reprsent l icned importation, i1n'est car plusncessaire.

Concrtement, lorsque Iutilisateurcljquepourdemander puis il I importation, voit unebarrede progression, le mme contactsansle bouton d importation,confirmantque le Il traitement sestbientermin. fautfaireun ( Retour, pour LDAPRlenquedu comportement retrouverIalistedescontacts normal, lorsquenous venons papillonner de entreplusieurs prsentes processus. applications, dansplusieurs Attention,lors la prsentation contact, de du lpplicatjon Il actlvenest plusla notre.Ellepeuttre tuepar Android. fautfaireattention ractiver caches del'imDortatlon les lors vientd'trerelance. si notreapplication pour nousavons trouvunebelleastuce Grce cescnario, rebondir dune application autre, une sansqueIutilisateur en ait conscience. Notreapplication invoque activitde une lpplicaiion Contacts stndard. Cettedernire invoque une pourdemanderl importation, et activit notreapplication de cette dernire retourne lpplication Contacts standard avant de retourner cheznous lors de I appui sur le bouton R.aou. Lctivit importatlon on ne peutplusdiscrte, elle d est car ne fait qu'amcherune boite de progressiontemporalrc. I

lll http://www.c99.orgl20i0l01/23lwriting-an'android / sync-provider-part-l

lll

4
*

f,

LISTE D'UNE GESTION DECONTACTS


pour afficherun contact, faut maintenant il Nousavons unestratgie de s'occuper l'affichage la liste de rsultatsd'unerecherche. de
Ies fichie.sXML dcrivantI'interface qui algorithmes utilisateur quelques et noussemblent intressants. une activithritant Nouscfivons de listActivity. Il faut aiors crire la un adptatur pour interfacer liste avec les vues de chaqueligne. Androidoptimise normment code. le la est Comme crationd une instance la coteuse, gestionde liste cherche rutiliserles objersreprsentant les vuesdune I'gnequi n'estplus vjsible. insi,par rotation, objets vues les des du dessus rtrouvent dessous se en et getviewO de l'activit La mthode doitretournerourecyclerlrbre devues ncessaire laprsentationd ligne. une

aintenantque nous avons un modlede donneset pourexposer unestrategie rcupr dansun annuaire un contact externecommeLDAP, nous pouvons utilisateur. imaginer interface une L premirechose iire est de propose une trouveruneicne. Coogle pouraider leurscrations application lll (ct lllustration1).

Avec liensymbolique, utiljsons un nous contcts,list_itn_p hoto , le fichier 2: lcone xnt dessources dAndroidpoul rutid lisr la prsentation une ligne de la Cequenoussouhaitonsestdepouvoir listede contacts. y trouvedesvues On qu interro8erI annuaire. il nousretourne pas dont on ne comprend plusieurs rponses la lormedefiches tonnantes, sous En Iutilit pour le moment. plus de la Android. contacts standards donne, la photo,d un boutonpour de En analysant 1pplicatjon Contacts lancer unappI, trouve nheader,, on un standard,nous trouvonsla class un ( labe],, un ( data, t un ( name,. ces ContactsListActivity en charge de Ignorons donnes. Et I affichage la liste des contacts. de partif d untableau voltilcontacts de 1: Android Ast Sludio hop I Encore3000 lignes analysef. construit main, pouvons la nous alimenter Comme nol.rs souhaltons le plus Cette tfe que activit pluscomplexe I on lalistepourmimerIinterface est classique. possible l application contacts peutl imaginer effet, proche de de En ilsembleyavoir que de nombreuses qu rapidement il manque existante, nousrutilisons icne son 0n constate faons la dmarrer. de chaque changnent nousenrichissons d'unemappemonde Suivantlescas, Ia lignedlimitant certains attributs seront pou. signifier que les contactssont amchs,dbutres Certainesdonnesde lettre de lalphabet.Celapermt non. de cettesymIutilisateur trouverplusrapidment oufbord Nousrutiliserons du d pourIesdiffrents un contact. Lanalyse code Andfoid bolique fournisseurs pas Nous nvons besoin toutcela. montre l vue. header estutilise de n que Le est de contacts. nomdelapplication qui la intresse demimer liste pourcela, est vue ou Cette estaffiche non, similire lpplication standard, afin Ce nous possdant pour standards afficher notre si lalignestla pfemire cette que les lcnessoientproches dansle descontacts un on listedersultats. Nous allons rcuprer leitre.Encreusant peuplus, constate menu(cf.lllustration 2).

que les alphabets sont pspartout ne fcuprer la lesmmes. Nouspouvons proprit fst_scroll alphabet des sources dAndroidpour les diffrents pays.Cettedernirenest pas publie par globalement le SDK. Le codede gestion lalphabet de est par parfaitement C optimis Coogle. est un exemple suivrepour notreimplEt et mentation. hop | [Jncopier/coller c estparti. Nos voyonsapparaitreune ,'esi praccedansle codedAndroid.Il est plus prlrable d\oir desvues complexes et de cacher certains lments srivant que de lescas, deconstruire arbres des pourchaque ligne, qui ce vusdiffrents Il trois empche lesrecycler. existe de pourune IVieW.VISIBLE, View. tats vue I INVISIBLEpour consommerespace pourfaire et sansaffichag vieu.GollE comme Ivuentait pasprsente. si les Encherchant quoiservent autres qu'elles sont vuestranges, constate on pour afficher, suivantles cas, utilises avecle type lesnumros tlphone de (fixe,mobile,..) ou ldresse un contact. d arrive? Impos' est Quand cequecela via sibledetrouverun exemple I lnterface par propose de gestiondes contacts Il le tlphone. senble que l'interface tre invoque ContactsList puisse pour cela.Nousnous spcifiquement arrtonsun momentPour dcouvrir

Tbleu : lntentlonsdla llste dscontct6 1

startAttivrty( nN Irtent{aidroid,provider.Coita.ts.Intents.uLLIST-DEFAUIl))i strtldiYity{ ner Irtertl'(o..adroid.corta!ts.ction.lIsT-CoilTAcT5")l; n|llntanthfdroid.prcvider.(onta(is.Irtents, ULLIST (0lii(lsACTIoI))i ALL

nerlntntlrdmii.proyide..(ontarts.Iitel5,lJI.lIsI_sllRREo_AcTI0ll) REqUE T_ACTIo[) neu Intnthrdroid.providr.Contts.Interts,UI,LI5T_f nerIntart{.dr.id.pr.vider.(otcts,Intnts.uLLIST-C0lilAcl5_llTll-Pll0llE5,lcTl0li) Inient irient:ieyIntent(Intsnt,AfiIoil_PICK) i j intent.setlypdcontacts.oilTElT_TYPE) startActivityForlesutt(intent, TACT); IEGA(Y_Co Iert htert=nd IrteIt{l ent,lfin _PI[K)i intent.setTy9(Plopl!.OIlll_TYPEl i j startAdivityh ..dtliited, u0lCY_C0ilTACT) j Iitent(Irteit.ACII0tl_PICX) Irteii interner TYPE) intent,setType(Pio..CoilTE[T i DATA)i strtActivityFoflsrtt(iitent,

Intntintennd ltitllotrt.lclloli_Plcfili II_TYPEI i|ltert.stlype(lts.Ofi i j tert, DITA) strtlctirityForn6dtlfu PICK) Intnt intent=|ler Inteit(liteit.(Il0[ i T_TYPE), intent.setlype(5t.u(uredtu!t1.(0ITE j startActivityForRe!uLt(intnt, 0ATJ Intenti ent:nd I.ttlrt{lrtnt.AfiI0l_PlcK) i (diods.mfi T_P0SIAL_TYPE] int[t,seuyp((oit i I)aTAl startActivityForn.5rlt{irtert, j (BEATE-sll08-(UIl Irrentirtent=1er Irrenlhrent.aC-10'l i (0r,aadrord.contach.!l:::-::_:_:(t )l . htent.!etCorponeltrr corpor'rhnel nartA(tivityFolNsllt{1|ltent,DTA)l Irtentintent=ner rtthtent.lcTl() Irt i _IREAIE-Sil0RTC|JT) (o|rontllarne{'tot,ndroid,coDtactt",'ali6.Bt i ge5lmrtcut")) i[tent,setcorpon.tlt{.d ) startA.tivitytorResutt(iitet,Uf i tntrtintrt.ni I1t.I,rIen.ACII0[_CREATE_Sfl0RTCUT) | siaftActivitytorRsrlt(iitit,0A )i Intntintt=ner t{Irtrt.lc 0li_GET_(0lfitilT) lrt i inte[t.seu]pd(oltads,(0tlllll_ITEI!-TYPI) i (0tfilcT)j startlctivityForResttlted,

E r", invocations
possibles
Il existeprsd unet.entalnedefaons d utiliserl activitcontactsList. Elle peuttreutilisepourafficherla listedes formes pour : contacts sousdiffrentes afficher contacts les avec sansleurs ou prfrs,la des photos,les liste contacts numros tlphone les adresses de ou (un peut descontacts mme contact tre pfsentplusieurs fois),pour slectionner un numro, adresse un contact, une ou Le Tableau1 indique les difirentes que peuventexploitel combinaisons toutes appljcations Android.

non effacsar,ec photo la Amchele nomde tousles contacts sielle est disponible. ffiche le nom de tous les contacts non effacsavec la pboto sl lle est disponible. Affichele nom de tousles contacts, sansla photo.

pour Il n estpasfacile trouver appiications tester de des possible. estdoncncessaire Il d'crire chaque situation un testunitairepourvrifierle comportement la liste de pour toutesles combinaisons, descontacts standards plusprspossibte. Cela servira pouvoir simulerau la que travaille ll estintressant constater cette de acuvit auniveau smantique. intentions Les traites expriment internes dssouhaitsfonctionnelset destraitements non Nouspouvons alorsimaginer proposer impl de une Ainsi, mentation lternativela plupartdecesrequtes. si dressed contact. un uneapplicationdsireslectionnerl parexemple, proposera consulter de l interlace utilisateur en lescontacts tlphone lescontacts ligne. du o Comme notreapproche capble crerdevrales est de (via nous instances contacts ncessaire I importation), de si solnmes capables treparfaitement d compatibles avec Lapplication consommatrice I intention de cesinterfaces. pas du nesaura si Iecontact vientdirectement tlphone oudun annuai.e externe. exemple, Par lppllcation Qik qu; permr pdfldgede vidoen tve ou en ditreresera h LDAP capable utiliserun contactvenantd annualre d un Merci a1t ftanewa Andtoidde permettre cela I ( ombinai\on\ gererde nornbreuse\ Nou< souhaitons parfaites Trsvite, ensimulations avecla listestandard. grerdes drapeaux pour savoirsil faut nous devons le de afficher nontellevue,adapter comportement la ou Itstelorsd'nclic sur un contact, etc. Invitablement, notreactivitdoit grerun modede por, .e |lonnFmenrun (hdmp bir5 r \ignale' qui fon, er de garder lsprjt quele I1 doit tre amch. fauttoujours possible mmoire en code trele plusconome doit en et Utiliserdesentiers Iaplace chaines de cration dbbjets. est decaractres d numratjons unebonnestratgie. ou
priviiestitic iiml int 0lSlLlY lUfBtl-0f-Co - I < TACTS = 1<< privite tatic iial iit 0l5tt^Y-PN0T02! f s p r i y i t e i i t i c f i n a li r i 0 l S ? t A YA 0 E I < <3 i NI R: s p r i r a t e t i t i c i i i l i r i 0 l S f t A Y _ C A t l = l J< <1 iI E1 Tlo s p r i r i t es t i t j c f j f l i n i 0 l S P t v _ 0 I < :i T 5 =I pririts siaijc fiml ini ustoulcK C()llICr < 6; = -li pdrih stiiic fiml int ilo0t-UI{N0til = 0i pdlatestaticfirl ini l00E_[0RN| p d r i e i a i i cr i m l i n t 0 0 tP I CC o l r =l I < <l i ( i s =t p f i l a t e i i i i c f i n i l i t l 0 0 tP I C { , P l 0 l I < <? i s = p f j v h i a i i cf i n l i i t [ 0 0 [P l ( {? 0 s r l1 < <3 i s =1 prillhsiiiic finil iit li00,SlRcl<<4i = pril'ie siiiic finil int li0Dt_l,ASLtlCKtR 1100E mTCT PIC( [00t-PICLPN0II f00t-t]C(-P0SI|! = pri\Jite staiicfinil int SU0ll_LIST L]Sr mIlAClI 0t5PtAI_rullBtR_0F_C0rrACrS oLllcK 0lSPtAY HtDtI 0lSl|AY-0^T^l I = priyate !titic finil int Sllol_tl5T_l0|TCI5 0lsPtt t!mtR_0f_!0lTA0T5 0t5PtY_PH0r0 | olSPlAt Nt0tR0l5ttY-0T | USE-0UICLC0IIACI i = pririte stticfinl int s[0] I0Rll P|]0i0 DISPTAI_I|]tl8tR_0f_mITACTS I | 0l5Pli DISPtlY_|]U0n DrSPrY CAttSUTT0ll I

Amche le nom de tos les contacts pffs, avec la photo. Affichele nom descontacts frquents, avecla photoet un boutonpour un appelraplde. Amche les contacts avec un numro de tlpho, sans la photo. AfficheIa liste descontacts avecla photo. parIutilisateur Retourne URI d un contactaprsslction I Afficheialistedescontacts sansla photo. API,prsslecRetourne IURIdun contactavecl'ancienne tion par l'tilisateur Amchelaliste descontacts avecle type et le numrode
rilPnhnF .,nq L nh^t

peut plusieurs sil possde plu IJncontact treprsent fois le de slectjonn. Retourne numro tlphone avecle type et le nurnrode Amchela liste descontacts tlphone, la photo. sans Retourne numrode tlphone le slectionn I'ancienne via API. la avec sans Amche listedescontacts ]etypeet ladresse. Ia Retourne Iadresse un contact. d sansla Afrche la liste dscontais avecle type et ldresse, Retourne ldfessed un contact, ancienne APL A. l-" l hlrede(numro( des.onra.rq leur sans phoro un Retoufne .accou dclenchant un rci directement appel sansiur photo. Amchela liste desmros descontacts, Cration un raccourci d dclenchant directementenvoid'un I nessageSMS. photo propose et den Affiche Iiste contacts la des avecleur Crationdn raccourci l flche contact. vers du Demande IURIdun objet rpondant typeMIME. au avecleur photo. Afrche la liste dscontacts I Propose galenent en crerun noweau.Retourne URIdu d

t0rracl ; l)Istt4l 0{TA USt_oltC( I = pri!i!e nitic Iinii iii 5r0l|C( loliTCT DISl|l Pllolo0tsPtr_rr0lR | 0ls?ll_oTi prilile slilic fiml iii srolllc{ Pllo . t 0lslll lt011 0lSttlI-0rIl = pfirh sliiic fiil ini 5l0|l-tlC( P0STt lt011 0lSPtlY-ol USPil !

suiteTableu : lntentionsde l llsldcontacts I

T!u) hteni(Irtert.AcTI0li-GET_!0 Intertirtent=rev TE ITE T iitent.setTypelPeopte.C0-TYPE) , C0llTA(T)i staf iA(tivityF0rResult(iitent, EilT) Ienti tentier Intrt(Irtent,ACTI0[_GET,C0 j intnt.setype{Phoie,C0|iIEilT,ITtll-llPE) j DATA) startAdivityForRes{lt(intent, TE i I) Intent irtent=rev lnteit(Iriert.CTI0fl-GtT-!o intent.setType(Plois.C0ITEIT-ITEI,-IYPE) i TEGACY E); startctivitylorreslltli0tent, PN0 TE I) Intertintit=ner lltent{Intent.AfiIo _GET_[0 i intent.setTypelstructuredPoslal.I0IIIT_ITEil_TYPE) i 0aTA)i strtlctivityForiesutt(intit, GET Iitent(Intent,A(II0 (0[TtT) i Intertinteit=n* P0STAt-ITEll-TYPE) irteit.setType{C0ntactethods.t0llTEllT TEGACY_P05T L)i staktivityf 0tResutt(inteit, htent{Intent.A[Il0SERI-0R-E0II) Intrti|ltent:nfl iitent.retTyplPople,tollTtllI_ITEil_TYPE) i strtAltivity(irtentl; 0RE0Irl Inteft intert=ner Iitent(Intnt.A(TI0ll-Ill5ERI iitent,setlyp(contcts.c0lllEllT_ITEli_IYPE) i stadAttivity(intent)j Intet itent46rlntent{Intnt,A!II0 _liSEnI_0R-E0fT) j IEilr_Ir irtent,setTyp0arcoltcts.c0 _TYPI) strtActivity(intentl' Irtit intet.neN Intent(Intent.A(TI0 i -SEARCli) PRA0S") PlriLiPF irtent.prtExtra(Sea.cifiaqer.0UERY, Intent{Intrt.acno I entirtent=neu i _S[ARC[) j i[tent,puttxtra(Sarchlanger.ACTI0 _ sC,"clt"l itent,putlItra(Srchilanagr.oUERY,'0670000000"1' j strtActivity(intrt) Intent irtent=nev htnt(Intnt.aclI0 i _sEARcll) "articLe"6prdos.lr intent,prtExtn(Insert.EllAIt, )i j starta(tivity(intent) Iitent i ient=lleu Intert(Intit.CTl0 i _SEARCilI "0570000000") intent,putlxtra(Insert,Pll0liE, i j startActivity(intit)
J0I[_A06REoalE android.c0ntts.action. ) Irtent tnt+e lntent c0|]. {' j.ntnt,p!tExtml'torn.android,r0itacts.(tIoT.AGGREGATE_ID",ld) i startActivitylinte|lt)i o|ltitre")' intet.puttxtra(UI.IITLE-IXIRI-KEY,"lf

Voiliapplication uneautrebonne d par pratiquedcouvert I analysedu codesource dAndroid.

E Utilisationde
cul'seufs
nous une Comme soulaitons intgmtion de parfaite, nousdevons tre capables toutes intentions. les repondre quasiment s de II devlentalors compliqu manipuler d un tableau Volatitcontacts pour situations exigent cela. effet, En certains lignespour le mme d avoif plusieurs C'estle caslors de l'affichage contact. ou detlphone de lalistedesnumros Nous devons des desadrsses contacts. de changer braquetet travailleravec avant Uncurseurestdplaableversl pour des ou l arrire, etpropose valeurs Comme noustravaillons descolonnes. nousinstanuniquement mmoire, en cionsun llatrixcursor Ce dernler sera alimentavec les informations des suivant projections les demandes, les .equtes. Pourle moment. donnes class dansune LDPsontbouchonnes globale. sont Lescritresde slectionne pas pris en compte. Nousnavonspas ligneconcernant crituneseule encor le protocole LDAP r)

la E Implrnenter liste descontacts


ce Lorsd un clicsur un contact, der danslalistede contacts njerestirnport si djfait,et un Intent rels, ce n'est pour estenvoy demanderlpplication Le de de standard sbccupr sonamchage. d'importation alorsprsent, est bouton permettantde figer le contactvolatil du dnsla listepermanente tlphone. : Deux traitements pluscomplexes sont

geref es!.r.lre! g(icrlfQrj. D . m a n d . l t J R l d n o t j c f f p o n d a n l u l t p e M l N I E . a A J t i . h e. l i s l ed e s . o n r c (s a n sl e u rp h o t o . l s l r p o s e g a l e n r d e n . r e nr R e r o u mIel , R l d . o n t a . rs l e . t i o n n ! e . l n . i e n n e | l A Dcmandc numafodc tlphonc paftir dc son type n Mt\'tE. ^fliche l lisle desnLrjrrcs contacLs des snsleu. phoro. Rtoufne nurrrode tlphone contacrslectronnc. 1 du D e m a n d n n d r . o e r l p h . . e p . i f d e s o nr \ ' p e e d \ l l M [ . a n c i c n r .A P I mchela list!'dcs rrcosdcs conracls. sanslcuf phoLo Iteroumele n!nrr! de llphone conta.L du slcctionn l ) n r a dIe d f e s s e n . o r r a . t a p a r t l fd e s o nt y p eN J I \ ' l E . a d Atnchela lisrdesadrcsses con|acts. des sansleur phoLo R e t o u r nle d . e s s e . o n t a c t s l e c t i o n n . d Dunandcladf.ssc d un.ontact paftif dc son tlpc \'llNlll llicheLi LisLe atlresses conLacls les des sa.s le!r phor!. R r . i u rled r c s s e ! . o n r a c s l e c t l o r . r d t D e n a n d e d i t i o no u l j o u ld u n c o n l a c r . n c i e n nA P l . l A e . - - = : ' E . . l q . ( l { . l n s u rl a p l i ) 1 . )

I l f a u tg f c f l a i s t f . l . \ i r n . g c s . r l , s . h r g c r c n l a . l x d e l o n d U n c o p i r , r l ; d u . . r d ed A r n l . o n c s t s u m s a n t c f l pof liliser I iJnag. ,rf datnrlt ll sera iouioufs renips d e m o d i l i e rl c o d el . r ; d e l i n r g r a t i o n e l l e a v e cu n a n r u a i f el D r \ P Lcd{ruxnrrrarr. m ! . n t g f e fe s ll e . i l c suf Quackcont.t ( B a d q e . f l l l u s l f jrl r l 3) C(tap(rrns,,,,rn, list. d ..rions l.s s i l r l c s p a r r i . d u n c o n t a c ts l p e f l \ e . notreappfoche ous n s o n m c sc a p a b l ! !d c l u i d o n n e lfl - R I d u r c o n t a c t ! o L n i l, \ \ a r r d e l a i s s e ra ' h r s . s t l p t o ! s l e ss e r \j . . s o s p s i b l ! s o u f! n . o n r . . t . nous delonsI iJrpoer l j l ] c p o l i l c n n r sl r s s c . T.ars !lre l .odc gftrssit. ({ finak nx.nr dcvir! aussr c o r p k r x f . r i . r t r i r L n lq u . l c l a s s ci r ] i t j a k r A n d r o i . l d ( p l u sd e 2 1 1 0 0j g n e t . L a l i s t e d e s l i i t . e s d s i n t e n r i o n s l d c l f e p . u f n o r r ca c t i v i t n t f s f i c h e s e < f i r l r i r! : ' r r l i i i l ! : : m l ) i d r ' i : i : _ .- l l l ] i l l i r i t ! r t i t l ! t i i t i r i t l . d r i l : l : : .!r:.: r l i ! , r $r i n s
d i d f , l iI i , ' : Y : i i .j l i ! l e I N t i ! f t : l i : r l i . i l i t i ! i i h -t r u o

m sr7

D e n r i n d e d i r i n u I a j r i . l . ! n . o n t a . l I o r \ 1 " 1 .I p, ."J , L,.'"' l j n . l i c p c n . rd a d j t c fl o . o n t . c t D e m a n dle d i t i o .o u l a j o L rd L r n a r ' r c o n t a c t i R ' A l - i , l , F i . r " , ' p . . o n . , rt r o t F d n o o u F l t l l l c l i cp e r n r ed d i t e r e c o n t a c t . l l l ce n . h eu r e r e r h e l ( h e o n c o n l a cp a . s o . n o n I t A f . t i . h l.a l i s r . d . s c . r n l . 1 s . e s p o n d vs ..l e u rp h . r o , nr e Dclenche fcherche Lrne d.uncontactpaI'le numrode Lanccimmidiatcm.nt un appcl .lc numroindiq sauf s ra u c u n . o n r a c L c o r r c s p o n r . ne D . L e . . h e n e. e . h e r . h e u . . o n r . rt . s . . e r n . l L u d

< r i t i r ii i d , t i d i f r i f 0 ' i . ' n i s i . i r t ' l l l II D <it!0.r dd! iriire. iiir0ii ir:?r: !i:?t.rfrll||ji'li

dim nrli mn::rirolilitflt iitln.lJ:li i) i ( t ! q r f r. i n r r r j n ? . r i D l i . l i t i i t . G t e ! o r r . C i ' r 1 'l : i L < r r l i x i i ( i d r n m : m i . d d r i d . tfr t s . r t ' m . t l 5 T t f ! t T/ ) 0 jd t,L f < ! i k ! i r ri i d l N : i i ! r i i d ' 0 i d , ' i t e i t , c i t ! ! l r U ! t T / ) < . i t e 9 i r r d r r d : n r e i M d if 0 i : r n i . r i i : q r fIrI J / ) il i

D c l e n c h e e f e c h e r c hd u n . o n r a . tp a f l e n u n r cd e u. e

Aflichcla listc dcs contacts alcc lcur photo D.nrancle sLrhclion.rrun contactpour lc.ioindf. a !n dc pemretde modifierlc ritr. de l Pour roures intentions, les

a d i d i f ! ! r i m ! . r i i i ] .i i i i r n r i t l i t l l T i t r T l i ' s / , ( t r q m n r i d m n , :r m l i l i t i ti i t ! ! | 1 l a : l L t i D i < c i t r ! 0 r r r r m : . r i m r i r n t i n ft t h q 0 " \ . r r 6) ir r

< i . i l i r d d l di i m . f t n . d d r i d . i t d t s . r t ' m . tl lt5 ii l r T I i T !D t j j l < n l ! 0 r rd ( i d i i ! m r d {j d . i t r i t . r ; t ! ! f t f l t T / ) ii < . t r ! N r il f d t u i d : m m r d i d j i0!i n.i r i i : ! J f lT I I D ri i

EI

<!cti0i driidriier.0n.idmid.c0riich.cti0l].tl5Iull_Pr0lt5' l{)|1l lfi <{itlorr oidnirerif idf dr0id,irieii.ch90r}.0tt!li' <rit{0f 0idiir=tiimid.iiieni.rah!0f J idf i.il8' <iclim .|]dmiirirerindf 0id.ihit.rti0r.rlC{" c!teqorX ir0idriimriidr0id.irhn!.citeg0ry,otf LJtl' /> jtr0iiari' <ti iidr0idr ."nd.ddmjd.dN0r.d llfu iir0iirtustrcon.i mid.co|]tach' D <tridf 0id:d[dyF.'rid.aidroid.cursff v2' .dirphon mdmid:IN.mn.if droid.miti.h' /> <diliiidrdiioeTrpF:'r_d,i_dr0id,(! s0 d 1F,l" "dt$r_r tdruidrf 0sirr0r.indr0id.c0rtictr' <din idf 0id:ft nr='idtuid.ir!s!.ii0i.t_l{)|IlNI' <it!0fy iidf0id:mnFtl]druid,ll]teit,rih!0rl,0t llT' /> <it dtuid:njrldylF.iii.aiir0ii.rurs0r.iki/cfi hct' idru1d:i0!Hcorn.aidr!id.r0itmh' <diiiil]dmiirdreTtp!1d.indf0ld.r!frof " ih tl'0m_ al]dmidrf 0strcor.iidf 0ld,c0tich" D <dii iidr0idrtimTtF='fl 0jd,ursof d.idf .ihn/posial.address-r2' indr0idri0strcoll.adtuid.mrtich"

Nousconstatons la vie d uneactivitesr1fsfr que gile. A Ia moindrecontrarit, frameworkAndroid le peut sacrifierlpplication ja etlou lctivit.Noubliez pour rpondre mais quevous navezque dix secondes une sollicitation l'utilisteur, de mmeavecdestlphones de gamme bas I Pour testerce cyclede vje complexe, approche une efficace consiste demander changement le dbrientation (touche quel du tlphone. viteet n irnporte moment trs Fl I dansl mulateur). etrei un changement En dbrientation entrainela sauvegarde l tatdelctivit,sadestruction, de puisIacration unenouvelle d activit avec lesnouvelles ressources, adaptes Iorientation. Cettedernire doit pour restituer rcuprer tatprcdant l lactivit. Nous avons. danslbrdr.l invocation de: onSavelnstnceO i - onPauseO i onstop0 i ' onRetainNonConfi gurtionlnstanceo ' onoestroy{)| 'le constructeur la nouvelle de instance lactiviti de o create( ) (quiinvoque gt normalement LastNon gurtionlnstanceO) Confi ; - onstart() i - onRestorelnstncestteO : - onResumeo i - Out.. Un autretest consiste invoquer ne autreactivit par dessus. puis utiiiser le dbogueur Eclipse pouf d tuer le processus demander retour l'activit et qui le vient d tre dtruite.Lutilisateurne doit rien voir de particulierLe processus relnc, sera lctivitserainitialise etrestituedans sontat dbrigineviaiamthode onRestorInstancestatO. Dans notreexemple, comme nousinvoquons lctivit de contact standard de la slection lors d'uncontact vo, latil, il suffitde saisircetteopportunjt pour tur notre application voir ce qu il sepasse. et En thorieet l'extrme, est possible tl d'utilise.le tlphone uneseuleactlvit avec vivante Iafois(comne cest le cassousWindows Phone par exemple). pa Un Z fttr,tre de DevTools/Developmera searg proposeune optionpourforcer nvoirquuneseule application la foisou de dtruireuneactivit immdiatement parfois,de faonalatoire, y a un Et l, patatras, il plantage. pile de I'exception La nindiqueaucune nos de classes. I Grrr quelques Aprs heures recherche. dcouvr de on une difrcultedudveloppement dAndroid. dialogues des Les sont vueset nondesactivits. estncessaire fermertousles Il de dialogues la mthode dans onPaus0. mais C'estbienjoli, il fautgalement rouvrir lorsque les l'activit redmarre. Cela complique beaucoup code. le Dutantplusqeictivit courante estdtruite d unchangementd lors orientation.

Nous utilisons categorie la DEFAULTpoUTtreau niveau mme queIagestion stndard contacts deI lnvocation un rie. des lo|s par

ll

Le cycle oe vre

Le cyclede vie dune activitest trs complexe. Comme te iramework dAndroidcherche maximum optimiser code au Ie pour etlesressources conomiserla batterie, fautprvoirplu il pourmaintenir restituer tatd uneactivit sieurs raccourcis et i pendant courtevie. sa Le cycledevie peuttrersum I lllustration 4.LeTableau par 2 reprendles diFrentes tapeset prconise traitements les apprlquer

4 : Cycle.!e lia clune activit

Tableau : vnements 2 d'un activil

onCreat0

ll faut initialiser I activiG en crant les diffrentesves.Il n'estDasludlciux dies allrnnterict. LeEundlesavedlnstancestatereuparIeconsrrucleurpe;r ul lspourresllruerIetar ffe de Iativit.Il est pffrable faire celadansla mthode de onRestorelnstancestteO. Ii est alors possibled analyser f intent de l'activit pour adapter I int.face aux difrentes sollicttations.

Est invoque ensultesi l tat de lactivit t mmoris le frarrework Celapernet de par restitue.l activitet linterfaceutilisateurdans derniertat. son Sidesboitesde dialogue taientouvertes lorc de la dernircsauvegarde. ilest tempsde les onRstorInstancestate0 rouvrir et de les synchronisef avecles traitements ventuels tchede fond. Celapeut en tre dlgu l ctivit. Cstglenent lbccasion .cup.eflesob.jets de cten casde rotationdu terminal. de mis qetla s tl'lonConfig ratio nIn sta nc ( ) devratre invoque pour cela. La mthode u

onstart(l onRes'rrne0 onRstrt0

Est invoque lors de la premire invocation de lhctivit. juste avantque lactivit ne soit active. Estinvoque Est invoque lorsque I activit redmarre aps une pause.Cest le moment de relance. les reqtes si les critres ont t mis de ct. Estinvoquejuste avantdemettreen pause Iactivit.Ilestalorspossible mmoriserltat de de l crandansun Bundle. dernie. est maintenuen vie Dar l framewo.k.indDendam Ce s m e n r l d v l ed J p r o c s \ ua e l : p p l i ,a r i o nA p r r i rd , e - i n s r a n r . " { p o . s i b l e , d rl e d . i d processos dy revenirsns qe l utilisateurnen ait conscience. et Est invoqulorsqu lhctivlt n est plus I acttvlt prio.itatre. Celase produit lorsqu une autre ctivjt est excuteau'dessus.ou que I utilisateur change dhpplication. Le ode est alors dans une situation instble. A tout momenl le processuspeut tre interrompu dtorit pr le framwork, s il stlme cela ncessalre. Il est important d interromp.e tous les traitements asynchrones,les requtes en cours, etc. Est invoque par avantlrrt de l activit.dclench l instructionterninateO.le lementdu terminalou parl'appuisurle boutor Relor4 dpilantI activitactive. bascu-

onSavdnstancestate0

oiPause0

onstop0

Commelbcttvit serareconstruite en casde basculenent d terminai, il pet trejudicieux de rcupref quelquesinstances lors de la crtion d la prochaine acdvit. Cettemthode doit rtournerunobjetquisradlsponiblevlalamthodegetLastllonconfigurationlnstance{) de qurationlnstance{) la future activite. Cet objet est maintenu par le framework dans le mme processusen onRetainlloiConff par mmoire, contrairement I approch Bundleutilisepar o nsaveln stan cestate ( ) et onRestorelnst n cestate { |. Il est donc possible de maintenir un curseur. afin d viter de refaire ne requte chaque

orDestroy0

F s ri n \ o q u F e l u \ ra r d n rl a o p i r u ' t r o nd p l : , r i \ ' r c F

son tlphone ce moment,l'activitpasseen pause. Le ProgressDialogdo't donctre dtruit.Mais le processus continue tourner!ll fautlui signalerque pointeurvers de son Notezquun bogue la version dAndroid de 2.2 entraine le dialogue nest pascorrect. Sinon, y a un risque il d'erreur. unedouble cration Iactivitlorsdu passage tl de du Lorsque nouvelle la activitearrive,aprsla nouvelle orientation, phone l horizontale la verticale. de quun tfaitement il lut sesouvenir rouvrirun taitencours, ProgressDiatog, rcuprer threaddu tmitment le asynchrone, Lorsde Iamchage dun ProgressDitog, ilya un a,tread l'infbrmerdu pointeurversle nouveau pour quil dialogue en charge traitement. dernierinformede sa progres puissp du Ce .ontinuer intormer ; lurih5dleur sa progre.sion. d. sionvian pointeur versle dialogue. l'utilisateur Si roriente malgrla rorientation tlphone. de travailI du Que

dans et de Nousdevons faircelalorsde l initialisation la listeet datvik.vm.enableassrtions=a11. le dposer le tlphone. ou deux utiljsant l multeur lorsdel'importationun contact.ls situations d de un dilogue progression. nousconstasolution ?Finalement, Est-cevraimentlaseule pour ouvrir un une tonsquil y a galement autreapproche (int id) oncreateDiatos Il la dialogue. fautrdiger mthode showDilogOet deleteDialogo et utiliserles mthodes faonde faire.En fait, celapermetde de l'activit. trnge de et lctivitdegrerle cycle viedesdialogues, demander lors ainsi, trecapable d delesreconstruire d unbasculement pr' des del cran. Lesdimcultsviennentalors informatjons constantes,mthode la dans lesdilogues. S'1lsgitde sentes pas Si il oncreateDiatos ( ) ne pose dedimcult. par contre, pas nosnavons message dansun dialogue, fautinjecterun onCreaieDiarog()pour le de paramtre dansla m4thode relaiscomme sisnalerll faututiliserunattributde la classe lors de lmalorsle message injecter Cdernierpossde devratre Celatombebien.Cemessage chage dialogue. du onsvelnstancStateO et mmoris dansles mthodes gurtionlnstance( ) pourgarantirque onRetainNonConfi amche. La ventuelle correctement sera la bote dialogue de ( onCreateDiatog) estalorsinvoque automatiquemthode du mentpar lctivit, lorsde la gestjon cyclede vie. peuventtre valoriss, commela Dautresparmtres du vrification invocations la vdfication b/tecode des JNI, (fst, portable ou debug), ainsiquela dexcution le rnode de possibilit la rception sur d'un signalSrGKILL, dumper la pile.

E IntgrationdeIa recherche
qu ne une Notre activit peutamcher listedecontacts aprs avoirinterrogunannuairedistant.Ilstdoncimportantde Deux critres recherche. de proposerl utjlisateuf desaisirles pour un sont rajouter en{te notfeliste approches possibles standard proposer chmp saisie utiliserI interface un de ou dansunea.rivf dAndroidpourgrerlesrecheiches maximum, nouschoisissons une Cherchant intgration cettedernire solution.

La documentation Androidsur l intgrationaufiamework d est ont ]eonsurAndroidrlesAPItranges g' de recherche trsbienfaite. Unenouvelle de une Il nralement justification. est prfrabl lesutiliser i Plusieurs usages sontexpliqus prfrable savoir il de Maiscomme toujours, est galement lutilisationde la botede recherche ; poufqoi lesutilise. on - ljout desrecherches rcentes q ; requtes Nousconstatons galement il ya souventdes d bochonnes, le prtexte avoirtournle tlphone sous LDAP - l4out de suggestions mesure. sur chose La ou cause cyclede vie de lctivit. premire du pour ne pasinvoquer par faire estdeprvoirun cache requte, de la recherche sollicitation. seratrait plus 5.1 Invocation Cela lannuaireLDAP chaque Iard.lorsdeI relledve, plusieursanluaifes. unou integratlon il Pourutiliserla boitede recherche, fautrerun fichier consiste exploiter La deuxime optimisation effectuer pour afficher crerune activitinvoque de configuration, gurationlnstance( et onRetainilonConfi lesmthodes ) pour et le rsultatde la recherche utiliser un mcnisme getLastNonconfi gurationlnstnce{ ) pour mainteniren volatils. vie le curseur contacts des pour les Lefichierxnl/searchabte.xmldcrit paramtres possibles grerla restitu pour Nous avons deuxsituations intgrer rechefche. la a dans tion d uneactit.Soitle contexte tsuvegard un Le Bundle,soitdansun objetquenousproposons. contexte < l - ' h c h i s e r c i a b l e..)m l soit est soit persistant la perte du processus, non. Une pourtestercesdeuxsituations consiste qualifier approche s/ndrcid' rnli:iMmidjhtip,/^chems.ndmid.c0r/ipt/ft " par la mthodeonRtainl'lonConfigurtionlnstanceO admid:libelr0!ltins^eirci-liiel puis ipti0r' de desbasculements rguliers l mulateur, mettrcen iIdmid:$rclrSettinqs0escripti0ostrii9Aeitings-dscf indmid:iicludelnGI0ilSeitcirialse' le de et commentaire contenu cettemthode recommenidmid:seclrSugqe!tlhe!i0ldr0' les seront cer Celapermetde garantirquetoutes situations ruggestions' idruid.seirclrSu!qesirihority='fr.!rid05.c0niicis,wlaill valides. La difficultprincipale dAndroidest les tests.Il y a tel qu possibles, difficiles reproduire, il lementde situations relles faut une longuepriodedutilisationen conditions malheureuse avantde garantirqu ilny aufapasd exception par dclenche I application.
?" irdtuid:seirci5usqesiSel{tionr jteh0nleri' jd.seirclrf irdm oderquyRerf iMmid:inpuuyFrtenhrsonlm' ch i M m i d : h i i i r 0 s t r i 9 ^ e i-fi i r i '

permet int8rer d intudelnGlobalsearch Leparamtre lorsque du tlphone, paramtrerla machinevir la recherche dansla recherche I1 peut tre intfessant de Slobale nous Pour depuisiebureau. le moment, Cela la loupe invoque est la des tuelleDalvikpouractiver vrification assertions. oas n local.prp avecla valeur nctivons cettefbnctionnalit. stffectueen rdigeant frchier

-(

pour filtre notfeactivit Nous devons ajouter nouveau un de lui permettre servirlorsd unerecherche.
-t < 1 . -f l c li e r A n d f 0 i d i l r i r e s ) . x l r l ctioi indmid:inerrdr0id.intent.icti0n.StRCll' <ciiegory /> indmid:mne='ndr0id,intent,citeg0fy.0tfAUlT' andr0idrni[re='indr0id.app.seiichible" Oml androidr esource= ^eatchible'/>

suivantle modedmchage super.onsearchRquestedO de la liste.Celavitera lutilisateufde clique.sur la loupe pourdesintentions slection. de

5.2 Lessuggestions
nous Pourpouvoirproposer listedesuggestions, devons une de spcifique. rdiger fournisser contenu un
> < l - . f i c l ie r n d m i d l i 0 i i e s t-..n l ' indr0idiraner.YolatilCoitactsRgreni5usserii0sPmtidef

s' Lors de lappui sur le boutonavecla loupe.la mthode i n d r 0 i d i a u i h 0 r i t i e s r . . p r a d 0 ! . c 0 r i a c t s . s u s s e s t i 0 n rc uested( ) estinvoque. bouton tantpas Ce onSea hReq proposer toujoursprsentsur lesterminaux,il faut galement de Lep.oviderestsimple rdigers il secontente mmoriser permetd'amcher uneoptiondansle menude lctivit.Cela Il et recherches de lesprsenter l'utilisateur au'dessus lactivit (cfl lesdernires de standard une boite de dialogue fautjustehriterde searchRecentSuggestionsProvider. 5). Illustration

Lofs dela vlidation de notreactivit l'utilisateur, est invoque nouveu a v e cI a c t i o nI t e n t . ACTIoI{_SEARCH et l extra Searchl,lnger. 0UERY

erinds .lasrlolitileConhci5Recentslg9esti0NPlollider tublic t5!99estjorstforider Sei llc { pulic sr99eltJ0ns"i .ptidN.coiiicts sitjciinal 5tfiiq|ITI()RITHtf jc ) !ul hhtilecoct!Rcnt5u!qestimrh0lider( { 0^T^8ASt-|100t-0|ltRItS) sehpSu!q0sti0is(AliloRlTI, i

est Le problme que notreactivit djprest pas ) Nous voulons ne sente. une activtt crer nouvelle 1e dansle fichier Puisnousdevons rfrencer fournisseur pour afficher le rsultat serchble.xmlvia sonautor't. car de Ia recherche, notre joue djce rle. activit ' x < l - ' f i c l r i es e a r c h a b l e '.> l ] l r Nousrisquons dvoir deux activits mme du Vpe I une suggesiions" r.Drid0s.c0dacts. aidruid:sarch5ussesiAuthodtF'f surlutre dansla pile I Cela i n d m i d : s e a r c h 5 u s q s t s e?e c t i o n = ' l' serencontresouventdans ode='queryRerf itsftonTert indmid:search Android les applications faut malcodes.Il utiliser plusjeursfois ( Retour, poursortirdeI activit. Comment sesortlrdecetteimpasse? proposer vie il Parrespectpourla prive, estimportantde Nous I1existeuneoptioninterdisantdvoir deuxactivitsdu mme un moyende nettoyer le cachedesderniresreqtes. le I typeempilesunesur lutre.ll fautalorsajouter drapeau aiouterons au menude paramtrage. cela singleTop. permetune int_ des Offrir la mmorisation suggestions ie grationdans recherche globale. Lutilisateur utiltser doit la .> <1.-ll cli r ^ndr0id|liniiest,rnl pour puis so!. desoptionsdu tlphone menuR..rerce que soit dansla rechrche accepter notreappljcation propose i n d0 i d : r i n e r . I 0 l i t l l e c o n t c t s L i s i c i i { i t y ' f globale (ci Illustration 6, pagesuivante). i n d0 i d . l a b e l r o s t r i i Sf/a lp p ' f n
idfoid:launcltlodersirslelop' rTasltrtiunclrjtrue aidroid:d

via le rechercheglobale, le widgefsur bureau,la Lorsd'une Lors recherches propose. de la salsie est listedesdernires est liste de quelques caractres,la de su8gestions alimente applictions. requtes difrentes des aveclesprcdentes

propositions,I algorithme 2.1, Enversion pourclasserces de de alors peu. la place I invocation un Lecycle vievolue les applicatlons ayant utilis paf le widgetmmorlse dernires de l de oncreateO,nousavons invocation onNe,Intento tutlllses. faut alorsrecherchef basde la listepour en Il de lofs du dclenchement lctivitde recherch avant dutresrsultatset voir d autrespropositions demander (cf. 7, pr' de trouver l'historique notreapplication Illustration de Nouspouvons alors,suivantle moded excution, via de pagesuivante). de recherche. I invocation ouvrir Ia boitede dialogue

EIG
philippe prdos
priippe pEdosoro5or gii.(m

s:5e

({

"phitippe Rechercher prdoJ t. . sur

E::li:t'**""
que notre liste rpond Majntenant aux mmes que la liste sollicitations descontacts standards, nouspouvons relancerle test unitaire pour tester possibles. chaque toutes invocations les A [ois,une botede dialogue propose l utilisateuf choisir il dsire de s utiliser la listestandard notrenouvelle ou lisre (cf.Illustration 9)-

5.3 Querechercher'?
Nous souhaitons complexifier ne pas lpplication demandant l'utilisateur m le iype derechrche. nosdecomprendre A sademande. suffit dnalyser requte Il la pour savoirs jl souhaite retrouver un contact partir de son e-mail de son numro tlphone de sonnom. de ou

q 9 ;

I : Rechedle globale An.trcid

plusieufsfois les En slectionnnt recherches notre application, de elle devientd'avantage prioriraire er les pfoposlrrons peuvemse rerrouvern ttede listesi ellescorrespondent aux premires lettressaisies. SousAndroid2.2, l'interfacea r amliore. typesdrecherches Les sont pfoposes l utilisateur si clique gauche (ci dla zone desaisie Illustration Le 8). rsultat dircctement est amch dansnotre listede contacts. Lutilisatur alors nh pasbsoin lancernotreapplication de pour effectuer recherche une dansun annuai.eLDAPLa recherche globale

Notre liste de contacrs volatilsest parfaitement intgredans1ebus de messages dAndroid.N importequelle qui application dslre avoiraccs un contact,un numrode tlphone ou peut uneadresse, le rcuprer partir de lnnuaireinterneou via notreliste Sj Iutilisateur indiqeune virgule grantdescontacts absents tlphone. du et des informatjons complmentaires. Malheurusement, nesuitpas Google partiecofrespond nom. la premire au ses recommandations. pourrarep.senter ville toujours propres la deuxime l Ipplication Navigation, le et le payset serautilisepourdutfes Parexernple. guide gratuitdeCoogle, GPS nutilisepas typesd annuaires. lesjntentions Contacts pourslec des tionnerun adress.Sic lecas. tait nous j p - i r oll o a l l . r o n pourrions pointersurune adresse un d 0612345678 jon contact lnnuaire de LDAP Ljntegrat ne fonctionne avecla bonne qu volont desapplications. Nous alom maintenant lffichage une d listequi rpond beaucoup d'intentions standards, nousl avons et intgr avec le fiamework rechercheAndroid. de d r

l_ 8:

contacts Contacts ligne en

Ilj http//androjdri utls.googlecode. com/hglassetstudio/dist/index. html

I Abonnez-vous
I

I oar AB0NNEMENT

>> d loutesles offres abonne'r'enl T SVPpourdcouvrit B o nd a b o n n e m e n t d c o l o e r e t r e n v o v e t l a d r c s s c i - d e s s o u s oumez

: Voicimes coordonnes Dostalss


MGAZIN /

Diamond ditpar Les ditions des Service Abonnements Cedex B.P 20142 67603 Slestat Il :+ 33 (0)3 67 10 00 20 Fax: + 33 (0)3 67 10 00 21

des dliosDmotrd a

crl GESTION COMPTES DES


-t
I T

I ETSYNCHRONISATION
Il est tempsde s'occuper I'intgrationdansle frameworkde de mise jour des contacts d'Android.
Lz , .a<+ Cet6esgre5ssion ropos \t ure .la\.e uril,rdire e.me p F p dn,de -^ .uperer re t F , o o k i Fd d n \ u n D e f a u t t H t t p c t i e n r . priljc clss Gert0oglesAsi0n Asyicr!t<Siri,19, Inreqer> exteids l0jd,
I

t t

ll Intgration dansla gestiondes comptes


Androidproposeun ameworkpo| maintenjrun portfeille d,authentifi cation.Celapermetde centraliser ces iniormations sensibles d ofrir aux et diffrents applications lesexplojter de sans devoir redemander ies l'urilisatur Cela protge galement la divulsation de de cesinformarions. Le principestle suivanr ne liste : de comptes enregistre est dansle tlphone. Une application souhaite qui bnlicier uneauthentification n d via d cescomptes demande avoiraccs un rokervia IAPI Accountltanaor Lapplication rcupreen retou. :oit le tokendemand. une intention soit invoqer pourdemanderdes prcisions ltilisateur(lasaisie l identifinr/ de motdepasse,la conrmationde l auro risation. etcJ.Le rerourde tctivitde I intentionindiqueparfoissi tout sest pass, toutes bien avec lesinformations. Voiciun exemple urilisarion d de cette poururiliser API lthentiffcarion de Coogle. Deuxpointsparricutiers Iimplmentation cetreApl par de Coogle d uneparr.Iactivjre lanier : a ventuellement demander confir pour la mationde l urilisater pour utiliserun compte retourne d informations ne pas directement exploitables, atf part d le tokenrcupr nest pasexpioitabie en tant quecookteIl fauteffectuerune authentification complmentaire avec le tokenpour obtenirenfin un cookie HTTPexploitable.

fa

irts|fe0r0ooqteCootie

1
,

r 0 i i 0 i 6 0 0 g t e C 0 o t j e (i ia ttu t ) i s n

p . iv t c t i y i t_ i c t i ! i t y l J p r i r t e c c o !_ c c o m i i A nt I I irate0nG00qle0ookie _ci]]bckj p!blic el0ooglesession( 6 pCt Defa!li|]ft jeni f trDflierlt, 0 n G o o q l e 0roto h i e i t kd) { jt - l r t h C n r + i i p c l i m t i ]

pririte Defutrf tipctimt j _hrhctient

p r 0 t e c t le de g d o t n B 0 ug f ( S i . j n 9 .i.r.i n g s ) rt ct rd s tfv { Accort[if9er = iccounitirage. ti a( . A c c 0 u n a g s . ! e rc t i y j t r . q e r p p t i i i o n c oii t * t 0 ) cc00ntliiiqef f !iure<Bundte> : f utur d c t u d t f ' r q e r , @ t t u i i T o r F { _ i ( ri.n . r i t s e ,r ! t r , r ! I . . f ^ w0te undte=rrt D es!t l - . t 1 ! 9 e r , t 0 F)d t e , q t l t o f l / d S e r , \ | 1 _ t I T t e1 lrrrt rtet t,i i f r i n t e nlt: i r l l r

, uslr jnputrequifed //jcti1lirj.5tr crjyjiyf0rtesuir(iirtrt, i // t0r for q009te 6) pforidel _ictj!ity.stirictiyitJ(inteit)i

) : D 5 t ' r . 9 . d t i - 0 t e 1 l r d l e , o e r 5 t . i r q r ! ( r9 e r . (^ i T F t,0 / (1i f tU ,; . _ 1 ! ! 0 L r e r t , 9 r & . i x ( ) . s ett1 r0 r i l e r e . { c t i e r t p l i n e s . t f!D i cIt c l 5 i.t 5 e / ; f hi r \0! 5 t ' i r 9r - - 0 9 + ! r ' 1 9 r t 0 l rd/ / t o ! i r l o i t , r e + r ! 0o . d t 1 0 , , , l * t;r; i , r r : r i , r ; 1 ' /t rr !_ I I 0 a s D 0 n . e 5 p o r=p t t t p (. e l r , e r ee / r , I r r p G e t l r . r - 0 9 r r . ) ; e r , {esDor5s d ea redii.t slr

I
i

i I

invocation.lAPl Lorsde la premire Cette dernire, retourne uneintention. demande lorsquelleest dclenche. for (cookie . _hihcliert.!etC00kieShre{).qethoii6O) c00lje I utilisateurde confirmerIutilisation { c00lie.setlamO.Eua]s('SCSl0'))de sesidentifiants lapplication if (c00he.sei ane0.equils('A[SID') (cfl par Illustrationl). Notezquele mot passe ] nestpascommuniqu. ) rstufi 0i if (respon!e.9etSta!ustinel l=302) ).setshtrsC0dd) ) { ]
pr0tec!ed onhstAecrt(lf resuli) \J0id ieqer { e l l b a c k . m t o o g l e C 0 0 k j e ( r e s u)l ) i i n i Y i l u e ( t. l

onResumo dansla mthode futilisationde cetteclasse treeffectue doit


p u b l ic ] s 6 0 o g l e 0 x to n A s l i r i t y s en e d c implemHts cetcoogldssim.0nGooglei00kie { o e f i r l t l t t p c l i h !t! p c l i e n tr e r 0 0 i i r l i N i i p c l i e i i o ! n pfotected 0nCreih(Buidle v0jd siredlrshncdiaie) { iuper.0n0rte(siyedlnstincesiih); s e t C o nl f i e r ( R , l y o t ,id e m o ) si , ]

1: Aubnsatun Google kie onGooglecoo o Puis.Iamthode la est estinvoque lorsque session ouverte.

Le codese dcompose plusieurs en Premirement, l invocation de tapes. gtAuthToken()en lui la mthode Accou dcri. nt fornissant lnstance une vantlecompte utiliser;un identifiant de type de token,variablesuivantles gestionnaires un drapeau et indiquant proiecied orResrme0 {oid qu il faut notifreren casd erreur Les deux pointeurssujvantssont null, car nous invoquons mthodedans la I n i e niin t e n= 9 s t l r h f i 0 ; t = Accouni[ini9sf (0trt ii9erc0!t|1anger .sei(qeiAppliciii0ic0itextO)i que principale. uneautfetche la tche / / U t i l i s i t i 0 d r p r e n j e fo n p G 0 0 q l e i c ie un Ce Nous rcuprons fetour Bundle. en = ccouit accornt acc0!nt/!nager,t^ccorntsByType( c0n.g00g1e')l0li pourobtenirsoitle dernier analys si geise$im=ne, GetGo0glese$im et009lesesn0r(this,cc0unt, thr's)i http[lieit, g e t s e s s ie r e c r i e ( h s r / / v o l e p p l i . i t i o r , a p 0 s p 0 t , c o n r / ' ) i dcrivantactivit l hi token. I'intention soit , ff ) Si prsenter l utilisateuf. le tokenest disponible, continuons processus nous le 0reffide pourinvoquerune et obtenir enfin URL p r b l i c i d 0 r t 0 0 q l e C 0 0 kseitn t) w it( 6 le du le cookie session de dans contexte { na DfaultHttpClient. Lapplication { pasbesoin demander identifiants de les t0| l t u d t , m t e l e x t ( g e t A p p l i c i t i 0 n h " 5 e x t 00sn0 p e r 'T 0 s t . t t l i G T|lG ) , s l r o k ( l i de I utilisateur n ! e s s i i, ,
defiulil '5essi0n 10dsi.00kelext(9etpd1cti0nC0ntexiO, err0r, tuisi.ttlIH-l0rt),!lr0r0 {itlr i ) ]

pour,ro, E Ea
contacts?
Pourproposer synchronisation une rdigerun descontacts, nousdevons Cla fournisseurdauthentifications. pas et nest pfatiquement document pourtant ncessaire. coupdil la un rSe Ac classe countllnage rvice (1700 grercela. poursaisircomment lignes)

Troisprivilges sontncessaires
-+ < l - - f i c li e f A n d f 0 i d f a n i f s t . m l < u s e s - p e r [ r ia ! i d r 0 l d : n a n e r n d m i d . p e m i ! s i 0 i . 0 t T _ C C 0 U I T 5 ' ! n0n < N e s ' p s m i $ i n d r 0 i d : n a n e r a d m i d . p eL l S!t!- 0 fR i 0 t I T I t 5 " or . mi iC < N e s ' p e f n i $ n d r o i d : m n e r i n d r 0 l d . p e t m i s s i o n . l l l T E R l l E T ' 1

Attention, certeparrjeestssez complexe trssbtil, et mais pourtant ispen\ableunegndemajor de5 ind it appli.aions. I fn ldil, louldpplicdtion n(essiint authFnrifcrion une devrait utiliserce mcanisme. Lesservices dclarer doivent invoqus Dartirdutres tre processus. doiventdoncsuivre Ils lemodl dvetooDement de permet l ;nvo( iona disr nceLarlassp .erviceprooose tanr ar a de ' la mr l.odeon8ind( ) pou proposer imptamenrar i une r ron classe AbstractAccountAuthenticator. srpnarons Nous rpladansle F(hierAndroidtlanifest.xmten sp",;63n, android:exported="rrue'..
<l--tichisAndfdlarifesi.nt,.> 0i c i' a r d r 0 l d : i 0 F , L d i p A ! t h e n t i cja teo n 5 e f l n d r o i d r l i b d = r i n 9 / t d pi_ s ea li e t , 0st c et f in!rcrd:erp0rtedr f rue. <ictiff indr0idrrne=,ndroid.acc0!nis.Acc0mtAuurentirhr " adruid:nane= adr0id,cc00nts.Acc0utiAuthenticitof , /> iidr0id:res0rcercxrt/tdi!_urheniicatof 2: Pannte du conpre

Nousdemandons simplement relancer Mzard dau de le thentification pourpouvoirmodifferlesparamtres ducompte. Lextfaaccount de l intentionnouspermettra savoirde de quelcompte sgt. 'l Lorsde crariond nouveau Ia un comptedurhentification, l'utjlisateurpeutslecrionner fournisseur(cf.Illustration3). son

Ce servicedoit ragir lors d'une intentionspcifique : android.accounts,AccountAuthenticator

La mthode Lefi, hierXMLindlqu addAccountO notreclasse de LdpAuthendani lesmetadonne5 rir I i.rrd, tictionService reot alors diffrents fce:le5 i(neser nomrpresentanr le paramtres pour lJournr\\ur one fi, standard affiche est framework, uneinstance dansle paramtrage comptes la communiqueravecle dont response des et petiteicne. pluspetite, deuxfois estutitise dansIepanneau quidevratretiliseaurermedeluthentjfication.Lecode suivant le pluspetitpermetrant est d'implmenter mthode la addAccountO.
< i - - t i c h i e lrd i pa ! t h e r i l c i r 0 r . x-m t . > <icco!nt.rtinticit0r x[]tisriidruid=, httpr/Achemis.iidr0id.conhpk/ i n d r 0 i d r i c c o r t Tfy pp rri d o s , m t i c t s . p r 0 y j d e r s , l d a 0 . r, e indr0id:ic0n='0dri*ibte/tdiD_ic0n, n d r 0 i d l:ls 0 i = 0 d r a m t t t d i p _ i c o i ' i h mdruid I lbd='0srrins/tdip_driEf _iaI| iiir0id:cc0uliPreief eices=iornt pisf /tdip_icunt -atces public tndle add^cc0unt(kco!irAuiheniicar0rresponse Ts, 5tr1ng rcourITJpe, Stfin! auflrloteitype, 5 t | i i 9 [ ]r e q r e d F a r e s ,n do e t i 0 n s l if Bu t p { fiml Siriiq icc0!rtllifn= nyicc0unt" i "i finil Stdr! passrd= : finil cc0unt accouit ier cc0!rt(c0untlaqe,accountiype)i L m t r i n i 9 eo . d t ( 0 !ttr0 l , , - i y r i ( ( 0 t , i s ! i 0 , 01 r r i n .d r p , f i n i l 8 ! n d lb l i d l e : n e * u i d l e { } i e B jIq{ccounutaiag.KI_cc0Lj[T_[tE, brdrs.prsrr mrtiime, I (rylCC0UilT ![dl putstriiq(Acc0urllnager. e. rypt,icc0rnrType) i bundle.putStfirq(lcc0unlf AUTI]ToKt, iqef.{Y pissrord)i 5Poiss.0rRe$l i(bundle) |

Il est galement possible informerdesparamtres d de prfrences serontajoutslors de la consultation qui du (cf. compte lllustration 2).
<l'- ficli$ ldap_cc0uni_prefercicos.ilt ..> xnlnsri0df oidrlrth:/AcieI|s.dr0id.co[]/ot/rcshdr0io > <Piorcnc-Ctesory s e t nr i 9 ! - d r 0 ' d : 1 , ' i l e . ' 0 $ . i r o / t 0 d p _ d C!(i 0 c1rre 9 0 , / >

Les choses compliquent lurhentificarion sefse si doit rectueraprsIa saisied donnes l'urilisateur, par conme indmldikoyacc0mi_seiiinqs' sonidentifiant sonmot de passe. et Dansce cas,le urd1e d r 0 1 d : t i i l e f s t r i r g / dd i0 r n t _ s e t i i n qe .i i tcp _ de rponse ]a rnthode de addAccount0 doit conrcmrun i l d r 0 i d r s d . F 0 ! t r q ,d 0 _ i c r o r t _ s e t t i r g _ s m r y r > attributXEY_INTENT dcrivant lcrivit invoqerTous 1es 1 d rd : h r q e t Did e - T. D r d 0 s , c o r ! c r ! , p . 0 r i o e , ! , . 0 p paramCtres 0 t d ncessaires seront envoys l activit. i l d m i d r t i " ! e t ( r d s =0 r c d o s , c o r r,d r. 0 r ' 0 . rd p , k, r5 p s. llizift.tivjty' Le paramtre l intentionKEY_ACCOUNT_AUTHNTICATOR de RESPONSE dememori\erbbjtresp;nsea destnatio; permFt I de ictivit.Cestun objetservant canalde communicade tionavecIe framework gesrion cornptes de des dAndrojd. La

{c.!LM edild\ho.{e{r rLl]]mriIr! edi{\rP.1$t n!d4k(d'DFNI d!f.n.kl.N,flFM\'NNIdd}

dt^i'i'1liZt!hnr!lrs): nE n(MiI.Fr. nE

4: Ahutdeconpte

5: Whard

et ncessairesuneauthentification au pa_ AccountAuthenticatorActivity peut tre hrite tousleschamps classe po.t, (le LDAP nomdu serveur,le d parIctivit, pourtraiterplusfacilement objetderponse, ramtrage uneconnexion cet el nomde I utilisateur sonmotde DN le cryptage,le racjne,le qui serviravalidero nonl authentification. de ce passe). servurs sontdjconnus, qui permet Certins d Ily a doncunju subtjlentreleservice authentification. vdlori\e, pardmetre\ lllu\rrdrio.1 i.l 61. c"1ain' consommatrice. l'activitdhuthentification I application et Le premie. retourne intert pourdemander Ipplication un pourvoirs'iln existe par Lintention estanalyse le Wizard. le d invoquerlctjvit avantde consommer rsultatdans pasd extraavec labelacount.Cenomnestpaschoisi au le Iapplication. Wizard plushaut,il permet invoquerle d hasard. Commevu du par correctement le directement partir du paramtrage compte.Lextra Lorsque utjlisateur authentifi l st par accountestalorsrenseign Android. la setAccountAuthenticatorResult( Wizard, nthode ) le Lors avecle butdie dcrivant compte. doit tre invoque A ( 0 l , i t c . n n c c o i t , i r t e r t . q ' ! lr r d ( l q e t f i ( r d r l , de d l ferrnetre lctivit,Iinstance responsemisede pourinvoquer suivant casronRsulto les ctserautilise cration identifierla de Laprsence ceparamtrepermetd ou onError{). du ou la modification compte. pourdemander Le codede addac nt ( ) secomplexifie cou un validele formulaire, traitement l'utilisateur Lorsque de I lnvocation lctivitvia la crationd une intentjon(ci asynchrone dclench vrifierluthentification auprs pour est lllustration 4). le via avantdjouter compte la mthode de lannuaaeLDAP Accountllanager de l,llizardactivity hritede accountauthenti- addAccountExplicitlyO la classe La classe permettant accs un a les complmentaires Toutes donnes qui permetde grerla rponse lu de ctorActivity, ce pas y Ainsi,nousnvons besoin (cf. s du 5).Elle inspire parmtrage un annaire sontassocies. thentification lllustratio pour cesparamtres, ou de unebase donnes dAndroid. propose de maintenir Elle e'mails, danslessourcs descomptes

Aslsnrn.ror lor 10.0.2:rca6

de 7 : checasynchrane

de grerIe cyclede vie de cesinformations de la sup lors Leschoses compliquent se qui encore lorsquelpplicatlon pression parIuttlisateurToutestmaintenu dun compte par dsire utiliser cette authenti6ction travaille tche fond. en de le frmework standard dAndroid. dansunebase donnes comme de lors dune synchronisation. Notrecodedoit pouvoir qui lui estprpre. traitersimultanment plusieurs comptes LDAPPourchaque requteil y adoncplusieurs requtes pamllele. casd chec en En = finl ^cmut cc0ut net, Account(muitlim, ACCoL]IT_TYII); de lhuthentification, nestpasenvisageable dclencher il de Bundle extfrextridle0; lmchage la bor'te dialogued de de authentification. Pourtant, jr9(|(tY extri.prtstf CRYPI, Wt)i cest ce que souhaitelPI en fournissantune intention! jrq{(tI_l10ST, *tm.prtStf ho5t)
i e r t r a . p u t S h i n g ( { t Yp o t0;R T , _P ) (tra.put5irinq(KE_BAS[0], hsdr), extri,putsif ir!(Kt_!stRlllt,usernaIre) i extt.putstf ii!(KtI_|1?tlIG,nappiis) i jis(KtY-ilCC,Sirinq.!fu (T0APlr0relurbef sof I0mats. ,utri.p!tStr q e t Sre fr [ C ! ( i o s i ) ) ) i e &mMtraiaqer.iddccounttxplicitly(c0unt,extfa)i pissiord, pis!mrd)i a !qer.setPNsxof d(acc0uni, _cc0unt

Heureusement, Cooglepropose une alternative. cas En d chec I authentification, notification siqnale de une est . ulilisateur dan\la odrredu haurdu terminal.Enclio-uanrsur peutsaisir nouveau mot de la notification,I utilisateur son (c passe lllustration Notez quelatraduction 7). franaiseest trop longue, quientraine le nomdu compte erreur ce que en ne saffiche dansnotrelangue. pas

Sil sagltdeIamodificationducompteoudu changementde Il fautquele consommateurdu tokenutilisela version de motdepasse, fautinvoquer mthode il la confi rmcredentiats la mthode getAuthTo ( ) de la classe ken Accou ntl4a nage r, deAc.ounttlanger pour Cela indispensable un scnario Dermettant est diouter unenotiffcation casd'chec. en dcrit plus loin. Mmesi la tentationest forte d invoquer djrectement connexion lnnuaireLDAPpour vrifier rccornif .get^!tiloks( une inisef le mot de passe, ne fautpasle faire. il j.^UT8T0{Eil_rtPi, tdiputheitir!i0iServ -nme ( Pour, oder eld. de,x classes doiventerr fdigeser n o t i l i c a t i o r , r u l l , ) iu l l r temps service authentification ile d etlcrivitassocie. Ces Lesillustrations 5, 8 et I (page 4, suivante) indiquenr les deuxservices communiquent desEundleset desobjets via rapes routce pctir monde le\ mejsages Fr de a Parclable. En effet,le bundledoit qujtterle processus diffrenres pour y revenirIl revientversle consommateur service, envoyer Iun et lutre. du pui) repar vers t IaLrir d ien( pr( F dFrnif. n hee par Commenons tudieraddAccount. mthode La doit qui getAuthTo ( ) encharge une Nous rdigeons mthode la lffichage Wizard du ken de retourner intention dclenche fintention ne possde pas vrifierluthenti6cationderetourner token. et le Notre token pour la c.ationd n compte. ne selimitepas un cooki un motde passe, nousne d'extraaccount. il sagit doncde la crationd un compte. ou et pouvons du transmettrele socket est ei ouvertverslnnuaireLDAP, car Lorsde la validation Wizard,le compte ajour les nous sur de avons besoin toutes informations de 1es pourpermettre informations la russite l'opration indjques sont via responsereuedansI'jntention. uneventuelle reconnexion LDAP ctconsommateur token. l instance du getAuth,qutesttnvoque Puis, regardons Nousrcuprons permettant sietseulement alorstousles informations silecache estvide. l authentiffcatton bonne, Si de testeruneconnexion est onResutto authentifie. est invoque avecles infbrmations. casd chec luEn de pourinformerdu f i n i l l n d l r e s u l= r e l t u r d l ( ) ; e t thentification. intention construite une est S q(kcountliiiigef ACCoUIT_TYPl, f esrl i.ptStli .KtY ^CC0UIT_TtPt) lancement Wizard. du poursignale. il qu accountestajoute i tsult.puisirinq(Acc0rit[ara9r.l(tY ^lil, icc0ut.narn)i CC0|J T_ fautvalider compte nonen crerun nouveau. un et Ensuite, resuli,putstrin!(Acc0unt[anger.(IY_AUIHI0(tl, The pissrord)i // t0ken si getAuth a t invoque avecle drapeau notification de result.putB00le.r(Acc0uni 8001l_RtSt]tT,irue)i ni9er.{tY par true, une alerteest ajoute Androidpour signaler le r c s p o n ! e , o i R e s r l i)(!r e s u l f problme. Sinon, consommateurdoitdclencherl le affichage pourdemanderla duWizard saisie motdepasse. d un du Lors IIestimportant saisirque getArthToken( clic sur Ia notification,intention de lamrhode I ) dclenche Wizardpour le que si le rsultatest absentdu cache. nest invoque Cela vrifierie mot de passe. Lorsde la vlidation Wizard,la du complexifie lestests, il fautinvalider cache car le avantd in, mthode confirmcredential{) estinvoque avecle morde voquer nouveau (j.nvlidteAuthToke( )). passe cettemthode n danslbption KEY_PASSWoRD- obligatoire on Cela est si dsireque la notification supprime soit lorsque mot de le Putsnousrdigeons mthode la confirmCredentialO. Cette dernire demander doit lavrlfication morde passe du enconstruisantune pourdclencherleWizard. intention Elle ConfirmCredential vrifie directement motdepasse, le s'il doil egalmFnl confrrmer dire(renenrIF morde pds5e ce stprsent. retourne statutet lesinformat'ons, si et le Sinon,la dernierest ajouten optiondansla cl Accounttlanger. mthode pour dclencher Wizard construitunejntention le KEYPASSWORO. prs avoir4outacco||nt, Il nefautpasconfondre erreurs authentification les d avec opiiois.coitiins&y(Acc0untllanager. {lY P^SS[0Ro) les erursrseaux. Dansle premiercas.il faut invoquer

les Llllustration l0 explique diffrnts chemins lesAPI invoquer et

10: Utilisation toke. clu . , Lutilisation lpplication De\Tools de permet prsente alors dansI mulater de testertouteIAPI d authentification, (ci viaIeservice.AccountTester, Illus 11).lesservices clerPassword tration pour efacerle mot de passe afin d vi et le utilisateur ter de bloquer compte pour invarideToken etracer cache.Un le sur appuilongestncessaire le compte manipuler

cas, false r dansle deuxime il est onResult0 avecKEYBOOLEAN_RESULT onError(). ncessaire invoquer d grerlesefets de bord.Enefiet,si uneauthentification Nousdevons galement de risque tre d il 1 compte I utilisateur choue, nefautplusjamaisutiljserSinon,le d celaNousutilisons aprstfois checs. est doncncessaire identifier Il bloqu invallde, nous est la mthode clearPss!ord{). qele mot de passe dclar Ds par de lfiaons. Labsence motdepasseestidentifie unechaine caractresvide, de n cequi estdirent ]a valeurnutl. Ainsi,danslesmthodesetauthToke ( ) et de I ( ), nousgnrons erreufsi le motde passe nutl. esi une confi rmcredentiat s

11: stdeconpte

lescom ll estdimcibdetestertoutes possibles. vousproposons binaisons Nos qui grerle csdune authentificalion cache n'estplusvalide en Il fautencore (ci. l). cas parlpplication. des LAccountfinger un cache authen dlffrents d'utilisation Tableau lorsdeIutjlisation 8re qu comne de un tifications. estdonccapable retourner motdepasse il considre Il se encore l'applicasi Cela complexifie a maisqui ne I'estplus pour le serveur LDAPLe mot de passe tvalide tiongarde connexions valide. Cela les ouvertes. il le maisne l estplusaujourd Dans cas, fautinvaljder tokenet le fait un cache plusq il fautinjecter hui. ce autrefois, de pas I motde passe. Maiscelanjoute de nottfication jouer pour povoir dans le tableu Leplus tous courant nestpasvalide correctement lesscnarios. nous avons mmorjs fait quele motdepasse le Comme pouvons immdia' efficacepour intgrercette nouvell Celagnre enIeffaeant, nous demander gtAuthTokenO. une consiste tuer lapplication via et une sanstesterIe mot de passe lannuaireLDAP. par efet de dimension tement erreur, avantchaque nouvel essi. bord.celaaioute notification. une

Tbleau Casd uiitistion 1:

Crtion

Non

oui Non Oui Oui

Pour,tesrer difftrentessiluations, estprfrable les il dhjouter un.rocllqpour mclhe fonerartificrcllcmnt per de un;.hc 0Flaulhenl'li.ation, e a un point arrtpafexFmple su d

, ftia.dit. ard.0id:i.eridr0id.mrtsnt.syicAdiDtef jdrresourcts?nl/td.p-sync_dpter, </seandr0 . P u i s n o u \ d a o n 5 a j o u r e r dd m a n d p F\ y n L h f o n r s d r i o n t d

rors d l crariond un compte. Dan\FLIipse,fdurrenspignervariabte il ld check true ; pourtof.erun icendriod che.du momenr. bon Nou\ proposon\. Je(sources proje., ave. du une.asse . ao(rrarre quilaci,ire td.redlon !ompte dF pol-r diffFrenrs le\ Etenfin, fichier un XMLldap sync-contacts.xmtindique scnarios , rype re de compte trait. Notez quelesservices athentification enregisrrs d sont . danslefichierandroid.accounrs,AccountAuthntrctor. <l-. liclli id! slm_rmth,xni > . 5 , ' ( o d d p t rf i . i r o a c l l xmt du rperroire oi /dta/systen/rgistred_se.vrces/. /! ! D : , s t i e a \ . i r d , 0 i d . c o rr D!tm . 0 . 0 .

Nousvoulonsque certainscontacts puissent Ctremis . Lppli, arron Dvfools presenre | emurrur ddn\ Anlors Joufatomatiquement, det volutjon enregisrrements drojd des p?rmer dlor\dFr\ier la.vn(hroni.ar;on ,esef\rce ! ta dansla base LDAP .5yn. resrer Un.li( \ur Bindpour " seconn, duscrv;ie rer Unrrvice ()n.h-onisarron un !lre sur. stafrsvn, " er nofiemerhodF inroquep de permel Ln (ompre est ae.a. , lrdi.hir rcguliremenr donne) teperipheriq-e. l2) <ur lcs \ous ((r.lllustrarion avon\Desoin sr!i(e d un. Accounr providFr (nous dun M a i n t e n a n t ,p o u r venonsde le crer), fichiersXML et d deux nouveiles de decrire fonctionnalits ces permissions dansAndroidtlanifst. xm1. teredSync Adapters: avances framework du - r.prados.@n Android, cooglepropose @m.ndrotd.onrrts n exemple( Sample SyncAdapter,. Ce der(bhd nier est trs succinctet l Nolrc service di\tan, doirexpo<Fr tds(F une, dflvdnr de nepropose enia'taucune nnecred syncAdptr to abstrctThradedSyncAdapter. Lamethode onprrorm_ authorltyi con,android,conracts sync( ) serainvoque le framework. par accounr rype:tr.prados.corta.rs. Nousavonstudien Le service dclar est comme cecii profondeur framework Ie nqr a@rl!. propos cooglepour I par L l <!.. fi cl'ier idr0idHarife!t,rnt -,> gerer ds comptes, 5yi(a@dedsyderuir per sarln!nod.l < s e . , i (ie d " 0 ijd p = , s e r ve s , l 0 1 i r i t e c 0 r t i ( t a r ( 5 i r ( r 0 d r t e r 5 e n r ( . mettre authentifi une cation partage lesapplicapar riorls. commmtsintegrer et <cti0i idrcid:in=hrdf , dans le mcanisme 0id,c0nte de t.5yicdiptef /> synchronisation. r 12: Testde la synchnnitjon

Ef Synchronisation contacts des

ii0f 0ri:oit!it!flrofi tF100.dr0id. oiti.ra iidr0idr.c0urtlype=.ir.Fid0s,c0iticrs.pr0rlder.tda0" i l d f0 j d : ! u t p 0 r r 5 p l 0 i d iln 0 J f d s"

WIZARDET CIUF
pourgrerun Wizard efficace Nousallonstudieruneapproche
prsent plusieurs sur volets,avecutilisationdes animations.
crf Yoid rcitldor(il rert) sei{uf {

Ewiru.a

pour prsentprcdemment, grer paramtres les Comme ) proposer Wizard noussouhaitons un deluthentification LDAP. Fisie ioli utdTecurfeitlrid(l estdesimplifierau maxirnum endeux troisvolets.Lobjectif ou { Pourcela,lpplication utilise le paramtrage annuairedun i o r i j i l j : f l r i l d r ' i . l e i q t h i. r t 0 i i l l volet. { une sociale. Dansle premier implicitement dimension =t yi(u f r r t Y i? \ r i e r . l l S i:t t ti e * . 0 l t ) i v eJ rhildrcntil.silisilili i LDAPAprs avoir il estdemand desaisirlenomdu serveur ) v.ifiquele nom d domaine existe, dernierpermetde ce ) dFdrBrentsannuairesconnus Lonsuker ba5pooonnes une le Si associs p u b r iy o i d n s i z e c l r i s d (fj t th , i n t 0 l d I ,i n t o i d l l ) c o x, i r afinde simpliffef paramtrage. lesparamtres { disponibles, crnsimplifi un estpropos, ceserveursont court et 1emot de ventuellement I'identiffant demandant 0, 0, ,inleft = iex ftirlateAriInati0n(_Nidil',0)l r 0 possible vrifierou de passe I'utilisateur. esttoujours de de ll I o u t l e f= n e r f a N l t e A r i n a t l 0.n i(d i,h , 0 , 0 ) ! t = n T r i r s l i l e r i i n a t i m il d t h ,0 , ! , 9 ) i r . _jnlrsht paramtrs plustechniques.I annuaire est les Si modifierles o u t R i g=rrle i T m n r l a t e n 1 r n trii0 ri( 0 ,, 0 r i l _ d h0 , complmentaires inconnudenosservjces. lesparamtres tous ati0n(All[_0L]RATI0li) iitef t.set0f ; modle paramtres de russit,le 0 sont saisirSila connexion o u i l e f t . s s tiif ( A l l | 1 L ] M T I 0 I ) i t j ( par pouraider _ i n R i q h t . r si t 00 i f A l l f _ 0 L ] M T I 0 r i ) ; les vers hberg Googie, estenvoy un serveur ; _ouiRiq,rt.st0!rati0r(All[_DL]RAT]0[) manuelle effectue est futrs utilisateurs. qualification Une ) Ainsi. avantd'ajouter paramtres la basede donnes. les p r o t t eo id o n f j i i s h l i f l i t e o ld voudrautiliserle mme la prochaine quun utilisateur fois I' simplifi. annuaire, bncieraun paramtrage il d i r t c o u i= q e t C l r i l d C o u r t 0 ; t vu codercelasousAndroid Nousavons quele ? Comment cyclede vie d'uneactivitest trs fragile.Il nest pasperti pourchaque voletdu Wizard. est Il nentdecreruneactivit orfrablede crer une seuleactivit et d'afficher les volets en fonction besoins. des nouscri' Pourpermettre passge unvolet un autre, le d damcherune vonsun Framelayoutparticulier. charge en nousvoulons plusbnficier de seulepage la fois.Comme nousnous d'animations du passage unvolet un autre, lors d prsent danslessources lnspirons un composant d similair (glissez votredoigtsur dAndroid, utilispourla calculatrice la calclatrice Dourvoir...).
cliss hnel5Nitcl'er !xt.ids ffinday0!t

= _childmn nerrii koutl; t f o f ( i n t i = 0 i i < c o r +i i ) eli _ c h i lrd n I = 9 e t C l r j l d i ( j ) ;

) (i Yoid holllrtit enent!1u) s { i f ( c u r f r l t l i e< _ c h i l d r.flle n g t h ) e r { ( f i l d r e , r l o r r e i t h e r l . t vi1iny( Yer .I I 5I t Lt r i bI i i _childrekrrnilierl.siarininiii0n(_iileft)i cT dferl r!nstlierl.striAniniiion(-00tteit)i il l c l l l d e i [ - c fn i l j e x ] . s i l J i s i b i l i t y ( r i e i . G ( ) i l t ) i f r cumnt!ieFcuf rrillr'e*; J i i o i ds r r N t r e ! i o sc iu re n i l i e r ) ( rtf { {

= 40ti priyih stitir iinal int llri-0UMTI0t iii 0rivii _{uretIier! = Iir riyt -cfildrer[] ier licrltl! priyt! Irdslaterinaii0,inlfti _odLetti !dvaleTrardatenimation Tmrdate^iiniioi 0ririTe _iiRigtti pririt0Imisliterinail0n ordRi9hii pulic !trlb|rtdei s) attf turlSritcf er([0rirt c0d0rt, {

] {

c l r i l d r e i k r r r e n t | l l e x l . s e i l J i s i b i lIiSy ( Y it e r . r i t IBt ) eiiljerl,siadAniiritio(,inRi!lrt) i _clrildrenkwf c l l l d r r l - c u r r e n i | l i e r l . s i a d r0m tii9 lir(t ) i rtR 0 c h i l d r l - c u m e n i \ l i e r l . s e i \ i i s i b i l i t yi( l / i e r . 0 l l l ) eii ruitv _cuf jeFturrntlll !tCrfrentlndr0

iq

Lesvoiets sontdclars dansdesff chiers/aJ,oufs diffrents, agrgs et dans unseui layout avec <inctude/r Cela des permet djterplusfacilement d chaque voletdansI diteurd Eclipse.
< ? x [r e f i 0 i =1 . e c 0 d i n q :t f . 8 " ? > ]l u < ff , t fa d 0 s . o n t a d s , p r d i d e r s . l d a p ,

>

i r d m i d r l i i 0 !rti d t h = i c h _ p a r e n i ' n

< i r c l u dl e y 0 u t r 0 l i y 0 u i / p a> d ' a /s <jnclude lyoutr0lyouthigs? /> <include Iixoutroliyo!thise3 /> < / fr . p f i d o s . c 0 i t a c tr i.d e f. l d p . e l i i t c e f > f 0 s ps PS

xnrNrandmidrhthr/^cielli.artoid.c0n/ i d r u i d r i0 r i d / { l z r d diid f0jd:lay0ui heiqhtrnaich_pircnt'

Nouspouvons alorscontrlef tousleschamps Wizardet animerle passage du d unepage unetre(cf.Illustration l).

E Contratde licence
Uneapplication (CLUF) doitamchern contratdeljcence demandantI utilisateur pour deI accepter pouvoir (cf. petseffecruer l'utiliser Illustration Cela 2). simpiement . Idioed uncprite clsse invoqu' a dn.le onCret;( ae 1",I,vir pri;ripal. )

dss tuii i 1

prihte sttjcfjnl Strinq PRtFtll|lCt-tUl = ^i{lPltD t!la,accepied ; p r l r a t e t a i i cr i n i l S i f i n sP R E f E R E [ ( t= _e ! l a "I s 5 ' t!t s t a t j c j d s h o N t u i i ( f i ^ cit i i i t y& t i ! i t y ) w ni = fiml 5harcdPrcfsrenies Drefereices ictivity,9tSlrifedPrefernce(PRtrtRtl|CtS_tut,Acririry.ll00t t yATr) ; i i ( l p f e f r e r c s . q e i E 0 0 l e a n (tPu u f t R tt t I t 0f, t s e ) ) C t Rt {( { f j n i l A l e t t 0 i i l 0 s . S u ihdle fe f= n l e r t 0 i d l 0 s . E u i l d e r ( i c;t i r i r y ) li d b u i l d e r . s e t l i t l e ( R . s t f i i 9j .te!r)l t l ; b u i l d e!fe t C i . d a b l ( t r u e ) . i h i l d s r . s e t f 0 s i i i w B L r is t rni{g . e u i p t ,i e xDi I 0qI ni eI f ac. 0nCj ct r i si eneI { ) i0 i R. l i I { y 0 p ! b l i c 0 i d n C i i c i ( 0 i a l o g t i t ed i .te q r ! N h l c h ) ffi 0 i , { prelorcnces,edltO,p!tB00leai(PlEftfEICE-tUtA CCtPIED, true),c0D[rit0 i ) ]li b r i l d e r . s e g i i y e B u t l o n ( R . s t f i i ! . e r l in f e0r ! e 0 q l n i e r f i . 0 n C t i c k t i s i e i e r o i - e rl i l ,
I y p u b l i c o i do i C l i c k ( I l i l 0 g l r t e f id icl 9 ,i i * h i c h ) ai 0 I mti!iiy.fjrjsi0 j

] (m 0itogtiierf bullder.si0ncarceltisten-f ace.0ncincelrisiee( ) { public d 0 C| ce (0 i I 0 In e f e diil0q) r0i | I j s t r c { ctTrTty,finish{) ! I )) ; builder,stliessi!e(rsadfil(tiyity, R,m*.euli)) i buildsr,cfeatO.strorO ;

) ] prjvai Chsequeice siiic ruidfile(ctil/ity ini id) acti!ity,


1

' Lamme dmarche peuttre pourafficherlesvolutions version uulise d'une la suivante,lors mises des jour Le numro version peuttrercupr de couranr par lesAPL
SirjnsCURRtIT|,tRSI0I= gettu*aqeliini!er( c0ntext. ) .geituckiqelii0(c0ntsrt.!ethct9e|lameO, 9)

DE INTEGRATION L'ANNUAIRE PHOTOS IDAP ETDES


Il LDAP. est I'annuaire concernant rien rdig prsent, nousn'avons Jusqu' tempsde s'enoccuper.
de il Android.Parfois, est ncessaire diffrentesi le type faire uneconversion particulireestutilisdansuneclasse Nous offrons alors 1a possibilitde et dcrirelesclasses leurshirarchies pourpermettre dcrire conversion la de prsente bibliothque Cette e,ycellente pources Dans situations. les applique. d lvantage avotrtvalidepat luteur faits,cel jamais. pratiquement n'arrive qu'i1 Lpplication propose surAndroid. attributLDAPil fautY Pourchaque plus dansleMa.i(etest unedmonstration un quuneapplicatton associer type MIME AndroidPour intgrtion de cette un recordde type Dat | une colonne exploitable. renseigneraprsavoir appliquven_ que IntegrerI autbentification nous tuellement une petite transformation avonsprpareaveccette API ne pose (mise majuscule, i ventuellement etc) en pasde difrcults. fixes quelques valeurs complmntaires et cesttout,Par les convertlr en_ pourd'autrescolonnes, Nous devons ensuiie com indique lignesuivante exemple.la registrementsLDAPenenregistrements Datpour avec mentcrerun enregistrement Datpour qu'ilssoientcompatibles type detlphonede XML va porterun numro Un lescontactsAndrold. fichier tlcopieurLa valeur 4 dansla colonne les de nouspermettre dcrire diffrents qu'il de standards, pourchaque datazpermet signaler Android et LDAP schmas Celaest drit dune classe, sagit d un tlcopieur attribut rype ou chaque du proposer une traductionautomatique dansla documentation SDK. quivalente dAndroid. versla structure ous avonscherchune bi bliothqueJva pour cela. Notre choix sest port sur de |lnboundid-ldapsdk-se.jrwww n Lemoteurdeconversion apasbesoin Lexprience d debeaucoup informations. montreque dansce type de situation, on a tout gagneren se rapprochant de du le pluspossible modle donnes originales. Nousnous lnspironsd'un schma LDAPCedernierest dcrit I aidede Les typeset de classes. typessontdes (un d catgories informations nom,un etc) des e mail,unerelation, avec rgles Puis, etde de classement compa.aison, de desclasses il est posslble dclarer avec de I hritage multiple. Chaque dattributs dfinit un ensemble classe avecleursrypes. nouspouvons Encequi nousconceme, convertir chaquetype en quivalent
+- lichierltidift.xnl ''> ' i idJticsifl Idelepionelrrbsf typeiji{i,lanq.Stdn9" ndroid.cuN0r.item/pl0-v2' IineJnd,

h.iterd un autrepour navoir queles deltas ajouter d de Lemodle descrlption un schma LDAPpermet d avoir des tyPes,des ou hritantd uneclasse plusieurs classes une et classes possdant liste d'attributs de ceftains types. asso la Pourrechercher conversion il lttribut d'un enregisement, cle faut foulller dans toutes les classeset et les solrsclasses, en6n,dansla llste llgorithme, Pouroptimiser destypes. si un attributnest pastrouvdansune dclare il hirarchte, estautomatiquernent vide. comme danstouteslessous-ciasses pour le prochain enregisCelavitera, tout trement,de parcourt nouveau I arbred'hritage. une Nousproposons basede rgles pour diffrents serveurs d association publics. fichiers sontrcup LDAP Ces 1l rs tors de la crationd un compte. possible proposer de un est galement de ffchierspclfrque, I installersur la carte SDet de rfrencerle fichier lols du de la cration compte.

LDAB Auniveau I utilisationdeI'API de La deuxapproches. premire nousavons les consiste demander enregistrements j er e r i r T y pa v . 1 n s . l n i e q e r ' puis lesanalyser deuxime La LDAP au approche consiste treinvoque fur de et mesure lrrivedesenregistre_ Ce frchierXML est ajoutaux res ments derappel. LDAqviaunefonction entre Toujoursdirigs par les performances et sources permetI'association LDAPet les enre et l conomie ressources, ls enregistrements noussiec_ de gistrements Android. mmesi aPproche, tionnonsla deuxime En une int- elleestpiuscomplique. effet,chaque Un utilisteursouhaitant LDAP immdiatement e$ prsentantun enregistrement grationavecun nnualre en proposer un converti votatilecontact alnt d tre devra spcinque schma Il de l autrefichierXMLd association,installer supprlm la mmojre. faut savoir arrivent dansdes LDAP lors sur sa carteSDet ie rfrencer de queleschamps chane un d divers, unesimple Un l crtiondu compte. fichierpeut formats

864 30 ncodage ajoutant %devolume. prjudiciable Cela particulirement est pourleslmages. Deplus,celanouspermetde limiter dnregistrements rcuprs le nombre et d interromprela requteen cours possdent Certains enregistrcments rn Distlnguish Name (dn),c'est--dire vers unerfrence un autreenregistre mentLDAPCestle caspour Ie champ obtenirle nom mnager, Nousvoulons le de ce dernierpour valoriser champ que Android. tantdonn noussommes pmdantune requte LDAP, nous invoqus ne pouvonspas explolter la connexion courantepour efectuer une nouvelle requte.Nous alimentonsalors une la listedejobs excuter aprs requte principale. Ainsi lesnomsdesmanageurs pourfinir dlimenter seront rcuprs lesenregjstrements Android. que prcise la prcdente. nestpasaussi Cette approche : suivante essais, nousavons optpourla stratgie Aprs nombreux de - Lesrequtes avecun or sontrejetes. - Lesrequtes sont en combines tentes parallle. - Siuneerreurestdclenche,la dernire approche utilise. est les de emcace permet trouverrapidement e! Cette stratgie finalementtrs est les nousutilisonsles capacits Pour enregistrements. amliorer performances. la des Cela lancerdes requtes asynchrones. complique gestion de IAPI pouvoir sur en combinaisons alorstraites parallle le sont erreurs, maislesdttrrentes serveur nonen serre. eI

de lf Nornralisation numros des


tlphone

prsents LDAP sontpasnorma ne dans annuaire un Lesnumros t]phone de avec utilisentle formatinternational Les sonttrs varis. Ce.tains liss. formats pourle pays(formt T0A),d autres n standard un caractre pls, suividu prfixe prfrxe, ajoutent,entreparenthses, dutresencore les LDAP utilisent un doublezrocomme Et dansla ralit, serveurs le fournisseur,appeltrarr.k(comme zroen Franceou le 8 en sont parfois capricieux.En effet, ils un numrolocal de le international. Les omettent prfixe Russie)ou unprfixe local, etenn. certains plus ou moinsles requtes acceptent parfois nombressont formatspar paquetde deux.trois ou quatrechlffres avecdiffrents des'spcifictions. ou standards les sparer trois faircle mnage danstoutcela?Comment Comment avecdes impactsimportantssur les sparateurs. international, trunk ou l le partiesdun numro tlphone,savoirle prffxe de prfixe de locals il existe, le numro client? et Premiredifficult, ll est souvent que peutavoir qui paysutiliseun code lui estpropre, cedernier chaque Comrne avec un impossible faireunerequte de de quatrechiffres, couper En fait,en regardant plusprs,les ? comment les critreor sans dgrader perforrnances. de un de versles diffrents Ils ne rechercher plusjeurs prfixes sontpasle fruit du hasard. servent routage sur Par exemple, jnternationaux, pour prfixes encrantunarbre pays. Enprenantlatabledetousles peut enregistrements syntaxiquement on avec fil chaque un chiFresuppimentaire. arrivefacilement chaque chiffre, comme ceci: seFectuer les de dcouvrir rg1es routage. qu'aprs chiffredeux. le sile suivant un zroou un est Il estpossible dduire de il ajouter chifirepour un nationI, sinon, fautencore sept, celadlimite prfixe un grandement les Mais cela dgrade rgulire de il cela.Grce cesdductions. est possible rdigerune expression perforrnances. est prfrablede iaire Ii Le retourne tableau un Dermettant dextrairelesdiffrentes Darties. codesuivant deuxrequtes, pourchaque une critre. sil deuxime international existe,le ve. trois string. Le premier le numro est en Ellespourrontsexcuter parallle. le de local. le dernier, numro client. et estle trunk ou le prfixe d dans Il nest paspossibie indiquer pririte staticliml strirg llSnPlroreRoi. de lesen unerequte simple retrouver ' l ( ? : 2 4 1 2 6 1 4 8 1 1 2 8 1 1 3 1 [ t 5 6l1 9 l6 {6 7 [ 0 1 ] l 6 26i ] 4 4 l 47 3 registrements dont le nom et le prnom " 6 4 2 1 5 8 6 7 t 7 8 F i l t A I 6 ? 1 9 88 69 8 9 1? l ' + 1 7 7 t 7 6r 3 ) dn=*jean*pierr*troll* sofi inverss. " 2 ( 1 :7 1 1 " 5 9 1 \ \ d ) l ' + 0 " 3 ( ? : 1 0 . 4t6 9 1 1 \ \ d ) l ' + pas troll jean-pierre, ne trouvera 578 ' 4 ( ? : l 0 1 r 9 l\ \ d ) l ' + cela 2 Syntaxiquement, sergleen dcla'5(1:11.81 ts9l\\d)l'+ rantunerequte typeand. de '6
(llGrlen{)(o+pieffet)(ctmllr))

( l(cn=*plri l j ppsr)(dj splryl eiphilippe*))

fonctionne gnral, en maiscerCela tains serveurs refusentdvoir plusieurs ll critresdansla mmerequte. faut de sur alorsserabattre unesuccession du requtes type :

( 1 : - 6 17 - 9 1 \ \ d ) l ' + l t l + '8(?.IU46]l[5i8]\\d)l'+ '9(?rl0.58lit679l\\d)"i pfirite siatic filal hitem -t0iPlr0nehthn= ? \1 h t t e m , c o n r p i l d " [ " 0 - 9 V r ( ] t ( ? :t({1 ::\0 + 1 1 ) ) ( ' + -' j(10 .r9h.0 0 . q , *u i.e + ' ) 1 1 6 6 ) ? ( ? r [ ^ ( ] t \ \ ( ( \ \ d + )r\ \ ) ) ? l ^ 0 . 9 * r + l * . 8 t . . net0 + t.j; , r?:11r 1., l.\\(t'rr\\,rl phone) tlrrors tfillie staticSiriig[] !plitPlr0nlrnber(ChirSequefte

fi l Strin9[]rc.ner 5trinq[3]i i,ntcrer(pi0ne), fjnl ilichef nitcheF_toaPh0rehttef { sq=ph0ief nota pion i! nurnbr'; finil Sirinq tog,i{TG,dsg)i thr0rnerIIIegilAry!|renttxcepti0n(llsq);

) rc[0]+hone||udbrutils.stripseparators(Inatcier.sf0up(l))i rctll+hone{umbedtil!.!tdpseparai0rs(raicher. )i sr0up(Z) rctZl+hone ul]berutils.stripseprat0rs(raicher.9roup(3))i

Lofsdela rcuprationd numro un ps de tlphone, ce derniern'est au si le formatToA, nous devons convertirlrois stratgies utilises. sont Premirement, nousregardons le fichjerd ssociatlons si LDAPdu serveur desenreBistrements indiqueun numroMCC,auquelcas nous rcuprons nous utilisons. I Sinon, le numroMCCsuivantla localisation physique serveur LDAP Enfin, cela si du ne donne rien,nousutilisons numro le MCC tlphone. du

il Aveccettestratgie, nest pas n' maisce numrosdetlphone, Cestunepremire approchepournorrnaliserles cessaire demander paramtrage de un payspossde spcificits. nutili- complexe I utilisateur En chaque ses Certains nestpassumsant. effet, un rgional dutrespossdent prfixe sentpasde trunk (lezropourla France), ll estdslorspossible normaliser de (lAllemagne exemple), pour par combinaisons dutresencore utilisent diffrentes les numrosrcuprs d'un annuaire I invoquer international. pour lespfsenter correctement LDAP un avec lutiiisateuret qu'ilpuisse utiliser en sur 0n arrive difficilenent, piochant le Net. construire tableau les en zippdans depuis impoftequelpays. suivant pays. tableau les Ce estmmoris CSV touscsparamtres n puis locales de l installtion lors de le programme, convertien basede donnes Celapermetgalement etrectuer d lpplication. Ainsi,ilestplus faciled extrairelesinfbspour un pays. desrecherches partir du numrode MCC tlphone. dernierest dansun prele de Ilyaun codespciffqueappel Comment connaitre pays l'utilisteur? Ce (208pourla France), pourchaque pucede tlphone. Nouspouvons le miertempsconverti TOA(leformat disponible en rcuprer lesAPL via puis internationalnormalis), le numro (la declientestrcupr fin du numro StRllCt)i Ieleplr0iy[iagr trF(T]eph0ryfanqer)context.!etsrstsrssrlljce(C0ntext.IllPH()llY tlphone). est alors possible il de de i i t m c c = l n t e s e r . ! a r s d n t ( t n . s e i l e i $ r,k h e r rti 0q ( 0 , 3 ) ) ; O srhti r f pourtrouver LDAP les faireunerequte chiffres sont cndidatsdontlesderniers par Cela nouspermetdetrouverlesparamtres dfautdeI utilisateur Siun numfo ceux Bn n indiqus. efet,lesnumros tant avec nous n detlphoneestpasauformatinternational, cesinformations, pouvons pasnormaliss, n'estpaspossible de il maison y arrive. fairc une requteavectous les formats le normaliser formatTOA.llfautgrerditrrentes au situations, Le utilis prsent dansun possibles. typegnralement si exploite serveut un LDAP Maisquesepasse-t-il I utilisateur pour lestlphones lesannuaires dans via chez dterminer paysdu serveur une requte Ie autrepays? Nouspouvons faisant le Unetable LDAPutilise un comparateur www'geoiptools.com. en dduisons codepayssur deuxlettres. Nous n abstraction toslescaractres tant de permet retrouver codeMCC le correspondant. de correspondances de pas numriques. Une requteLDAP avectelephoneNunber=*12345674 !rl=nerURt('hitpr//qeoipt00l,c0m/dit.pit?ll=+URttncoder.encode(ho!t))i les seracapable retrouver numros de 5AXhrsrhci0ry SXturserfict0fy,rexlshnce{)i spf= +33 (0) 1 23 45 67 89, 01.23.45.67.49, sp SIhNer = spf.ers^tPirserOi +33 12 345 6789.1l faudraitfiltrer les x|lLRedr n = sp.gettilReiderOi dass Uylandler 0eiaultBiidlf exiends o rsultats dansle casimprobable la { deux numrosde I annuahepossde tlphone deuxpaysdiffrents,mais de numro client. ayantle mme 00vrride public siiUe|]ent(Stfiis String l0calilire, fne, Stdn9 iitibuies itttibuhs) lJoid uri, I tIroNs SAXtuception { i1 {"nrter'.equl!(ialje)) c0u'rtrycodertttlbute!.9etli )i alue(' code" ) laiss ctla gestion de )l Nousavons liykidlerO fylndier hindlerIeli i peuvent Les LDAP desphotos. annuaires rr.seiconientHindl*(lridlr) i j proposer attribut pegPhoto une avec un n md r r . p a r s e ( Ie ip u t S f l ! r l . 0 p n S i f e a n O ) ) i image reprsentant l utilisateur. JPEG yC0de(f 1ni ncc=setlcdmmt0ntf rdler,countrycode) i

El L'intgration desphotos

is ind liCC t09.i{T^G,'Countryf0f lr0st +h0si+, ',+iaidler.c0nityC0de+'' is "+nrc); c0d0

de et Pourdes raisons performances nousnesouhaitons d conomie rseau, de

pas importer cesattributs ds la r' LDAP dun enreglstrement cupration pas il Comme nexiste dAPI d exclusion LDAP, dttributlorsd uneinterrogation nous devonsIister tous les attributs sauf intressants, lesattribtsportant Une desimages. autrelisteindiqueles possder photos. pouvant les attributs indique d Le fichierXML association alorscesdeux listesdattributs.Pour il les r6cuprer photos, faut contrler prsents les finement enregistrements l cran,et suivre le scrol.iitg Seules en seront recherches tche cesphotos le de fond.Heureusment. code de des dAn_ Contacts sources l'application dj droidpropose uneimplmenttion la Nousdevons modifier satisfaisante. des pouf tenir compte desspcificits contactsvolatils.En efet, 1esphotos ei resterenmmoire trecaches ' doivent vers:ons pourviter d'enavoirplusieurs

peu imges lisibles. ds utilisedepetites de Deplus.l'interface gestion contacts prfrable zoomer le visage. sur de Il est Faceoetctor MerciAndroiddhvoir tout ce qu il faut pour nousI La classe dun I analyser image la recherche visageS il est aider Nouspouvons va nous puis ce ainsi entrelesdeuxyeux, utilisez dernler rcuprez pojntcentral le trouv, Iimage queIespacement entrelesyeuxPourdcouper , esl pa\ ne Ldrecrion vi:dgs lonclionne \ur le\ porrritsar le! isage llop des gros.Cela nousgnJenrien.Unportraitestdjun boncandidat lmchage ne

ini ridth+itlrip.!et|lidtlroi ejglrtO ini hei9hi+itl]ip.9etf i t lei9it : {idth; int naxaridih>heisht 0f P P 0 i n ip = n e r0 i t(f( f l 0 i i ) d d u r / 2,.0 ) ; f hei9l1t,,,, fceoetedo(vidlh, fa0ehcioHeri tu0etecior f ices=ner Ficelltct0r'tacelill tuce0eieci0r.hcetl j df ac i f ( i i D e i e c i 0r . I c e ( b i t ]fa p , s ) = l ) { f f inil tucsoghctr.hcce{ices[r]; 0rlCt-rNRt5|]0L0) idenc( if (la,coif )>{ce.C0|| { iice.qetilldPoint(p)i iit)(f )*li) i nedrix=( i{s.syesDistnce{ ? nir nix=(ie*fipmx) ; rrr; firal ini dnx{rx/2i p.x:iidtl-naxi if (D.r+mrxidih) p.y+el9it'riI; if (p.y+a){>lreiqht) p i f ( p . x < 0 ). x . 0 ; ii (PY<0) P.Y=oi jntlrax'nixli intl I cmF=|reN , i x , b i i l r i p . ! s t P i r e l s ( c r 0 p is ,,0( i i t ) p r , ( j r t ) p . v ! r a x[,] i r i mx, mx, C0ifi9.ARG8-8888)i bitlrip=0it[]ap,c|et81tIp{cr0ps,

dun les Comme photosrcuPres carrees ne annuaire sontpastouJours d l'interface Android, comme spcifre le effectueruntraitementsur nousdevons pourlesajuster mieux au cesderntres auterminl.Maisoir couperla photo?En haut? Enbas? Lidalestde Ianalyser pour dcouvrir se trouvele visage oir de la et sacrlfrer zonela pluslojgne

] ]

n'a Lesohotos sontcharses l aidede trois tchesSoitle contact jamaisre na ), requte rien cherch;de photoet il esi un statut( unknown soitla dernire ,. soitunephotoestprsente il passe l tat( yes' et donn iliasse 1tat. no et des des onlowfiemory0la suppression imges aux Nousajoutons mthodes de une bonnesource ( unknown, C'est alorsle statut contacts,;nrestituant galement SQLite3 que Androiddemande Notez le framewor.l( mmoire rcuprer graphiques caches et de librersesressources eface1es apparaissent les lors Maintenant, de lfrchagede la listedescontacts' photos \ur cenlres le vi:agP et du iur e' d m\ure. 5i pos.ible permettant interroger un d sympathique, utilisateur Nousavons uneinterface annuaire ligne(ct Illustrationl). en entrelesdonnes des Nousavons appliqu rglesdetranslormationsystmatique parla gestion contacts des attendus de LDAP lesformats donnes et d'unannuaire et asynchrones via intgr photos destraitements les Puisnousavons dAndroid. r pour amliorer intgratlon. l la des explolt richesse APIdAndrold

tES VERS OUVERTURE AUTRES


soit consult un annuaire Il n'y a pas d'adhrenceavecle fait queI'annuaire d'ouvrir alorsenvisager Nouspouvons LDAP ou d'une autre technologie. en annuaires ligne'intgrs diffrents d'utiliser pourpermettre l'application
dans la mme application de consultation'
ommentDermettre lutilisateurd interrogerles Iacebook d un CRM Google, annuairei rlescontacts ? nationaux volreun desannuaires des d Nou\ devon\permeltre lapplicatlon recevoir sdnsinlerlaceoffran(des Android D/ueirdesdeolictions nolrIouroffrir Nou\de!on\; nireapplration exrn.ions; enrichil daulr\d merlant? integrtlonper d.srerhniquesd de I Ce noueaoolirarion. rendr;plus.omplexeinstdllation perspeciives maisouvriradenouvelies I applicaiion, directement Androldne permlpa: Ialourd composanr une d nece\\aireinstaller aulre ll sl uneappl'(arin. alo|5 Maisle cycle composants les et aoolicaiion d'interfacer deux application d; vie desdeuxapplicationsest diffrent Chaque du indpendamment cytle de peut tre tue p; b systme. grercela vie de lutre.Il faudra proposer: que Voicif interface noussouhaitons
p a * i g ef . p r a d 0 s . c 0 n i c t s . p r 0 \ J i d e r s i hcti volitileC0f itrDortr.ptid0s,mnticts f yolitileRiitacti i;0d if .!rd0s.contacts f 1 r ; d f f . Da d 0 s . c 0 r i a c t s . h n i a c t l d ; dExpti0n!i jn00rtfr,Drdos,c0itacts Ptulidets.[su]ts Ttisl0rit){celil0ri t.prados.coricts.pfollideN i0rt {

lin ! r i d 0 ! r e a t e (iin t v e r s i o r l , 0 r gl ) i n queryC0itact( RsulisirdtxcPilons jr Stlinqaccouni lre, f in St irg selciio1, s in Stllng electjorArg)i C0i I b y i e t s e t c c o n t P h o t 0 ( t iitr d i d ) i l qet t [0 t I ! o l a t l l e C 0 n t c y o l i t i l e ( o n t d t ( l in ( t d ] d ) :

: l'inlrlce en I applicdl:on deuxparries Nousdevonscoupr applna Chaque de ct urllisdreur lestournlsseurs , onta.rs. Sirins ii!ilhnceled(in iccounti[]e)i r0id alors devons diffrent Nous memoile un tion urilrse spa.e dAndrcid inter utiliserlesAPId; communication procssus entreI interface ) de l intefface ommunication Dourdffnir Cll (cl ;tilisateuret le fournlsseur article( InterProcess ' par limitations ceservicepropos Android' Il v a Dlusieurs dansce numro), du nepeuventretou.nerversle consommateur pour Lesexcotions proposer interlacedecommunication une devons Nous les seules mlhodes sont appelsIPC synchrones: service;ies de de oermettreauxdiux processus communiquer l intetface de ll r supporres n?\r paspossible d'ldrer iq de contactsPourcela'nous nonstar ueison vers le furnisseur irtilisateur AIDL .les.hambs sbtiquesdansuneinterface de I dcrivons interface communication laide du langage de un des transitanl AIDL.Cedernierestproche interfaces Javll permet lesdonnees Toutes Parvaleurd procesqu5 paramlre5 un autredoiventpouvolrt.e srialises les melhode diffrenr\ dansun flux Android d indiquer Dour,haue doit est Ce er ooui chjcune,si le pardmtre elre utili! en enrre DroDose Pa l interface rcelable poufcela. mcnlsme (in),en sortie(out) ou les deux(inout) Celaa proihe de lnnotationseriatizabte de Javastandard unior.rement Ddns cd\ dun prdmlre difrencequil estncessaire tout coder !a maincar le tur un impacr le codcgenere de Une ia in,,e'dernier.srr.uiereddnsle fluxde la requte ll d il nxisrepasde mecanisme introspecllon ny d pasde dansle est coDie effectue partir dela valeurdu paramtre de tlpe d insrance m des.riotio; de vrsionde classcs li!ree orc.ssu"client.C.itcerr(opiequiesr la merhode rnorisr des de polymorPhisme' mmoristion pourgrerle out Dan' implm.nrtlon. le rsd un paramelr unFins insranc.,dpia-pr.sentes le fluxpoureviler lesdoublons dans la avantd invoquef sur tancvide est construite le serveur leur'elr'Toulescesinforma_ rreduconstru{ parvaleur la frndu d tnvo.at;onlmplir puis est dernire envoye mthode, cette pour sontintressnts la sauvegarde rionset ces maanismes traitemenidela mthoderemote ll faut doncun constructeur ron malspaspoutunecommunical dansdesfrrhlers. est d obiels inout le paramtrc Pourunparamtre sansparamtre. Le inteipro.."us. RiPnd rout (la nesl drsponible code puisrenvoye cedernier le rcutrdepuis client,

estplusrustique, maispermetalols unemeilleure matrlse de la gnrattondu flux, amliorantainsl les performances. Desinformations vont transiterd'uneapplication une autre.partlculiremnt Volatitecontct. Il est alors des ncessaire implmenter interface d I Parcelable. Nousdevons rdiger nous-mmesproduction flux desriallsation la du Ie plusconomique possible. Le fluxproduitesttransmls dun processus autrevla un un priphrique spcifique noyau, du exploitantdel mmoire (/devlbinder).LesAPIpermettent partage essentiellement d'crire typesprimtttfsou dutresobjets des Parcelabte. Nous dclarons aiorsnostrols classes Voltilecontat. VolatileRawcontactetVoltileData comme rcelable. Pa public liolitileRirc0nict stiiic flal cl55 inplems hrclibte i pririte liolatileRinici{) {
00l'effide p u b l i c l d N d t T 0 h n e ] ( h r c s lg s i ,i n t f l i g t m d

iinil volitilsRarcoihct rFei nc,rcidFro.hrcl(ir); )

YolitileRi|hitict0i

j/olatileli{oacil]r^rfiy(intnze) public { reiumney tolatilRi{0rticttsi!eli )

Nousqioutons fichie.saidl pour lesclasses les P.celble, utilisesen paramtreou en retour de notre interface.
p*qer.Fdos.cotts; f pimdle hltileliYcooticti

{ d e s t . N r i t e h r c e l b l d _fiIiar9 !,) i i s f 0 r ( A n a y t i s t < h l i t i l e l )iilt:Dd a h s . l ' a l r e ( ) ) { e i o r ( h r c e l i b lp : a l ) { d s s t . r r l t e h r c e i b lfe p , ) i I (9s ]

Nousdevons r:organiser projet.Depuls version0.9.8du le la plugin Eclipse SDK. estpossible du il dvoir un projet Android dclaf commeune bibliothqu.Ce de.nie. peut possder des ressourcset autres fichiers spctffques dAndroid. Un projet consommateu.de cette bibllothque doit le signalr danslbnglet,4rd6id desproprits ptjet (cf.Illust.ation 1). du

dtt

e!@

1!!d4r!tii+ar!6

A e s i . * r i i e P a r c e l i b l e l rs s , ; f(i 1l) J pfirit-aw1dredFrr ircel(Pircdpamel) { f l n a iC I r $ s t o i d0 ird e F g e t C l a s s 0 . g e t C l s s t 0 i d e ( ) i le ldnircd. reidlonq0 i -ittr!=paftel.Eidtircelile(l0adr)i yolitilsoiti p=rulll {

EE
p={|l0latileDiti)pircel.idhmla!le(10der); lf (pl=null) { p'rt((Strlng)p.qetii(0iii.lllETlPE),p)i ]

1 : Projets biulothqr avec Toutes ressources lesclsses projetsliesseront les et des consldres commeprsentes dansIe prcjet consommateur, Nous organisons notrecode troisprojets alors en Android : - I interface utillsateur i la bibllothque commune entrel interface utilisateur et lesfournisseurc contenu. de Cestici qu'il faudraplacer que lesfichiers AIDLainsi touslestypesdesparamtresIl nest paspossible dyplacerdesassts : - un fournisseur contenu de LDAP La bibliothque doit tre la plus petite possible,car elle seraprsente danschaque fournisse decontenu. Attention, n utilisezpasdecaractres spciaux danslesnomsdeprojetsI Malheureusement, nouvelle cette organisation un ima pact ngattf important en termes de temps de compilation.

) ()refdde puDlir descrlbConimt!o int {

l
public stitic flnal hrcelable,heit0xl/olitileRtlconhcD = CRII()R r hfrla!l.CretoKyoltile8aitonticD0 { 00|Jerride public hlitiltallft ntirt creiFronturcel(Pirel ii)

:)
forthe p.otd: coiriour !he bulLde !Andod Rsource Migr

Andrid P.k9 Builder

dpendance entrele pro il de cela, estpossible dclarerune (cl je! de l interface le projetdu fournisseur Illustration et installs seront systmatiqument 2) Ainsi,lesdeuxprojets la activit. Pour avantd excuter premire dans1mulateur, il le de dverminer fournisseuf contenu, faut slectionner retrouverI applicaiion DDMSdans Eclipse, la perspective pourdmanderdy brancher un ie LDAP cliquersur bogu et un afin fournisseur dclaref service, d per doit Chaque de AIDL. mttrela publication Linterface
-- | < t - - F i c i e i d r o i d i l a n i f e s i , x >n i f < s e r i i ( ei d f 0 i d r m n e r . t d a p 0 t i Y eirc ee f l i S 5 < i . t i m r d r o i d : n a |tn p f i d o s . c o i t t s . p r sd le r 0 l i d e r/ > f . -' i . lf

din
2 : Buildr dsactiv plusieurs compiles gnres et fois Eneffet.les classessont parBclips. fojsparprojet. Pourviter cela, ilestpossible une de dsactiverles builders des projets des bibliothques(ct 2). Illustration un sur Il y a galement effetde bord : Iesidentifiants R partageant peuvent difirents pourdeuxapplications la tre de le mme bjbliothque.estdoncdifficile propager numro Il LDAP vrslapplication Ul. dun messag fournisseur du installerdeux appljcations : Lorsdudverminage. devons nous LDAPPour faciliter l'interface utilisateuret le lournissur

un Dans Ienttr, nosindiquons nomparticuliefquiserft les vira dcouvrir dynamiqementtous fournisseurs.Il on8indO. leservicepou.rpondrelamthod alorsrdigef
p!blicdasstdlroviderSeryice Ssfrite exiends { p r l i .I B i n d e r B i n d ( l i i en tte r t ) in 0n { ? fe t ! f ( l P r 0 { i d e r . c l a s s . g e t l l i r e ( l . E r i l 5 ( i i t e n i . q e i a c t i 0 n O ) ) n p r i r t ei i i l I P r o y i d e r , Sbuib s = r l P f 0 Y i d e r o f - ti d f {
]i

Ljnvocation Context.bindService() pefmettraalors de de avecIe lournisseur d avoirun proxy pour communiquer principaledoit dcouvrirdynamiquement Lpplication Pourceia,il faut utiliserle gesles difffnts fournisseurs. les tant demandertous services tionnaire packagespour de particulire. Ensuite, iL capabiesde rpondre uneintntion dv' -rposrbl"de lesdenarr rd ouvrirune.onneYio.1
pFmt*t,gettdckdglianiger( li.lagNiaqer )i fln.l Iiirii ariimrrIitit(lcTI0l)i Ii5t=0m.q!rylnteit5frjce(irii0f, [/tPdgel{aa!er. tist<ts0lrelrr0> tT 0^TAt/)i l|tl
rqle

dbr

t o s . d ( T u i p l u g i"i+ i n t o ) ; t 0, = iclit0i tif al 5!f riclr0 rrNi.elif0 if0.sefl iihit.stCldslilne(sef richfo.Fcli90|| sielif0.rm) e,

f iidl boolei fr=c0niert.iiidSyicekcti0r.

i i d r o j d : lf, i i I = ' c e i tre rf i c a l ' g et rd.oidrlinisclicklF'tt' = _e0piyred (igrtlier) ijldyisBrld(R.id.emptytuxt)i get]Ntince{ -emptJlext,set[0vemntletl0(tiitlioyemitlietlr0d. ) ) i

{ 00rrfide r0id ice[ormc!i(ConFremkn di!ilirn, lulic 0r5e { {


to!.d(it, hi5efric!0riecigd' )i

j dflwl:Ih0!idef .5tul.isl efiicdservic) drirr.0i{ruih(lflsl0t,iildr(l<<l6lJ)i Ie id 9rmDi0t // Iiil drlir,putkliss[ine.qihcti!||im0, driyf )t

Le texte peut alors possder liensHTML des versla place march de (ci.Illustration 4J. Nousvrifions gale mentdanschaqe four que nisseur lbpplication ( Contacts Inline ' est prsente, sinon nous invoquonsla place de marcnepour propose. de I'installer Pourviterdvoirun par application fournispowonstoutes seur, nous les regrouperdans un processus. seulet mme Pourceia, fautplusieurs il

pr0ridr. t09.(T16,"hp0$ible tr fsjsisr ) 00wrdde rilirn disrlift ) !uilic wid mSeNire0isc0ir!!ied1hq0ft { j b!.d(rft,'oils!i0iscoircird') tirr)i _drirers,riore( loxi.bift vic(imeft l0tuxt.8rr0 c0f Scf rrT0_tltrTt) ,tlis, i ) llli0 ), {omert.BI/io {rlII)i

4 : Lienvercle narch

Comme chaque instance VotatileRawDatdoit pos de sderun numrounique, pas nousne souhaitons proposer n gnrateur identifiants d ceniralis, celaenlrainrair car trop de communications entrelesprocessus. Nousajoutons alorsuneAPIdanslesfournisseurs pour pouvoirinitialiser Ia valeurde base gnrateur du d'identifiants. choisissant En unevaleurinitialesufsamment grande, a peude fisque ily (nyId*(1<<16r). de collision Danslessources dAndroid, dcouvre autrefaon on une de fire pour intgrerdesextensions. sgit de crrun ll qui chargeur classes va rcuprer classes uneautre de Ies d pourlesinstallerdansle mmeprocessus. application Jetez un il sur ia gestion plugins " Instants des des Messaging,. Lorsquucune extension installe, est nousamchons un pourproposerutilisateur consulterl messge I de march. Pourpermettre lhccs aveclaliste d'extensions, pouvons nous amcher texte un avec lien, un ailantdirectement effectuer un requte. s'effectue ajoutant Cela en lhttributlinksCtickabte true dansla dclaration lxtvier,r et en invoquant du la mthode etl.lovementl.let { ). s hod
) < 1 . .f i c t je r l a y o u i . x-n ] l ' <TexiIi indroid e|l I idr0tidhmptyrert dr0id:lyout_Nidilr:'lil l_pirert andtoid:liJort f eight= xht_c0nieni' indmidrtextSi='?0sp' ardruid:hriC0l0r= hndr0id:itirltertcol0rs0c0ndify' indrojd:pddin9teftrlodip' ardrojdrpaddiqRiqhtrl0diC ndroidr Fddinqloprl0dip" andr0id:liie$in![r]tjplief='0.92

- ellesdoivent utiliserla meme signature; partag utiliserun tilisateur l


n l N , d r c i d =h t t p r / A c h m i s . i r d m i d . c o mea p ik / f i d / Vi d 0 j i p a * i 9 ! = ' f r . p r d 0 s . c 0 n i i s . p r 0 l i d e r s . l dc 'p . g e r l e f indoid:wrsionCode='3" f a i d r 0 i d : i n s t i l l t 0 c i i i 0 i r i i t ie fl 0 i l y r d r 0 i d : s h d e d s s lfd pff d G . m i t c h ' .r

indiquerle duprocessuspartagerdansle nom marqueur

adr0idricon='0dfarable/app lc0i ndmidr Iibelroitf in9hpp_r1aln' i n d r o i d r i a m , p ifd 0 s . c 0 r i i s . p r 0 \ , i d e r s . l d i p . g e e r i c . b e t i . e='if Setierefic!plication' i n d r c i d i d e ! s qfa bs f" l l e i n d0 j d : p r 0 c efs . p r i d o s . c o i i c t s ' f f sr

Ainsi,I espace mmoire rserv I application partag est entretouslesfournisseursporles Dsquepossible, rdigerons fournisseur nous un pays. annuaires pages en blanches ditrrents de Nous avons ouvertnotreapplication exploitant comen la processus. municationintef Pourconomiser mmoire la du tlphone, nouspartageons mmeinstance machjne Ia de virtuelleDalvik.r

SUR QUALIFICATION TOUS ENVIRONNEMENTS LES


et soustous les environnements dans toutes testerl'application Comment ? lessituations
Androtd,contraie systme est rement dLltres, Pr sentdansune trs grande varit de terminaux, du tlphone de toute taiile en Passant des Par des des tablettes, tlviseurs. voitures les MP3.De Plus, ou desbaladeurs fonctionner.en dotvent applicattons plusieurs avecplusou moms langues, ou de technologies(ci de cpteurs Illustrationl).
rrc 4k^i(Gdrh4'!Pr4r!

ll

des Capacits

priphriques
d minimales un Les capacits Androidsontlssuivantes priphrique de modles MotoroladeSamsung extensions dirents Dour aux il modies' fautaller la pche Pourd autres sony. ou de spciiications. - 32MBRAMi Android dF pfopose\sur lapla.p marrhe - 32MBde mmoire dDol,.arions flashI Le> Pdr d\ s.lon les.apd.irs rlphones exemole .onLfilties - processeur 200MHz; de d le aemande privilge efectuern appl siune aoptication d ave(unedn"ir l20t ecrdn 240x320 d en dduirquellne peut lonctronnel Goosle Leteohonr'oup. simu qu".ur "n p"ripn.iiqu" avec ite ce de ave( lecdpd, unerdbletleqans Il est Dossible testerl'application plusieurs sur puceGSM aurapasaccs I'appllcation liionsde terminaux(cl Illustration2). Unerecherche n permetde trouverdes avecandroid sdk add_on Google non pul Mai,-roreappliLdllon sadaptrldpr\en.pou icl le dans fich Anbn' o un teleohone. r e , as iltdul indiquer paq d navons besoin telephon droidHa;if est. xmlquenouc
( r . . t l r h i i d h d i f r e s t ,)m l !0 iind Ie etlmnJ'i_0rtd irtir'fi { ! <rR.fei!,r0"toi!:" 0 i-ir0l

place mrch' de pas ne ]pplication sera filtreparla Ainsi, pour dulanrpropo\elle perr tre.onsullesars I annr,aire \uPprimons nous nor Pour d bouron apel. adapref reapprration iqu si l pripher nesl pasquipe le bouron iorrspondant
ltIlllt-Tttitrl0lll)) if ( l!ettcka!etaii9er0.hrSvstontuitrt(Pid!eliiget Cl!8!Ti0ll slror _!lSPlY l=

des 2: mutatlon nodetes

peut d'une tablettendroid consulter Ainsi,un utilisteuf le numrode tlPhone lui et un annuaire, composer mme sur un autrePriphrlque

Leparamtrage l mulateur permet classiques. trouve de On galement res des d jndiquer lescapacits periphrique sources du comme images (drawabte) des emulef IIlusrfrion (cf 3). ou desressources traiternent (raw), sans II estimportant tester de lpplication en mode( touch ) et en mode. focus ,, un testintfessant consiste tester p l plication i'horizontale veclbbsen.e de clavier Lexprience utilisateurest alorstrsdifrente.Cela correspond la majorit tlphones_ des Notez il n estpasobltgatoire avoir qu d un seui fichiervales/strings.xnl. Lutllisation deplusieursfichierspermet declasser chaines les suivants usages les (wizard.xml, error.xml, etc.)

- IWQVGA (240x432, basse densit, crannormal) ; HVCA(320x480,densitmoyenne, ecrannormal) ; (480x800, WVGA800 hautedensit, crannormal);

- WVGA854 (480x854 haute denst, Plusieursqualificatifs permettenr crannormal). ddapter ressources les suivantla largue du mobile, dcrltepar un codeMCC II fauty ajouter pour d'aurres rsolutions le mobile MNCpour le rseau ou i2O8 exotiquescommepour les tablettes pour Ia France), lanpue la reion Archos(+1rnilliond units). trouve la et On (rrFR), taillede Iaran(rargej.la facilementdes si/rs pour diffrenrs la Lesapplicatjons onrvoction fonc- largeurde l'cran(long),lbrjentation, oodles [1]. tionnerdans mondeentier l Ilesrdonc le dock(carldesk).le modenuit, la r importantdeproposer versions Larsolution des est trs dans solution l cran,Ie type de toucher QVGA vraiment de plusieurs petite.Ellecorrespond modle langues. au Flipout de l cran(notouch, srylus. fin9er). de Motorola. Elle semble abandonne dun Android propose mcanisme et un trs la prsence clavier sonmodede dansle SDI(car aucune ressource de saisieprioritaire (12key), prsence intressant, permettantddaptertoutes la propose. resressources volutions terminal. d un boutonde navigarion le niveau cettetaillen'est aux er du Unalgorithme permet lesrechercher dAPI (laversion nesupporte les 1.5 pas Dansnotrecas.nouspouvons de nous la suivantplusieurs critres, Ia langue clensits, taille deI cranet sonaspect). affranchirdetester de notreapplicarionen del utilisateur,l orienration terminal. densit, lpplication du car Contacts Les difrentesvaleursn tant pas basse la rsolutioncrn,voiremme il sgit standarddAndroidne grepas cetre s ambigus, sumtde construirele il nom du jour ou de la nuit. du rpertoiresuivantla combinaison recherche.Il possible combiner Il suffit alorsde proposer dif est de les plusieurs rentesversionsdes ressources attributs,en respectant lbrdre selon cesdifrentsparamtres. exemple, de priorit. Par un textedidepeutuliserunephrase ll fautalorstrouve.quelques copains courtelorsque terminalestla vertj te polyglottes pourtraduire toutes res_ les cleet unephrase pluslongue pourun sources. Dnsnotrecas.nousavons Ia affichage horizontal. cnance pouvoirtraduirenos textes de Poufchaque anglais, typederessource,est entranais, allemand. portugais, On a longtemps il reproch Android possible proposer (merci copains).esr safragmentation. effet.depuisfvrier de et une versionpar nrsse chinois les ll En pr important vriffer dfautet diffrenres de ahernattves lpplication dans 2009,septversions ontrpublies. Au exemple, ressources les drjvant car les toutesces langues, la rsolution niveau_Os, notezquunetudeindique cransse trouventdansle rpertoire est tellement petitequune phraseest quela hagmentationestencore plusim res/layout/. Unealternative coupe l'affichage. pour icilement portantesous systme lapomme, le en unevuehorlzontale trepropose peut tenantcompte versions OSet des des des Les fichiersXML peuvenr tre rdansle rpertoire res/Iyout-land/. diffrentspriphriques. Danslesfaits, dlgsen UTFI pour les langues non Android automatiquement va selectionner cejour. quatr seules versions persistent. la ressource pluspertinenre ia suivanr La portabilit enrre modles une les est raiit,mmesi desajustements sont parfoisncessairesla marge. Lesressources organises sont dans desrpertoires par diffrents type,ce ls applicalions pourune\tsion crites qui permetde les optimiserlors de ta Il n estpasfacile proposer banc ne sont pastoujours compatibles avec de un gnration fichlerappticatif du ApK. On de testspour qualtfiertous les rypes lessuivantes. Dutrepart,denouvelles y retrove essentiellement ffchiers d crans.Les rsolutionspar des Les qui dfaur APIsontproposes. appltcations XML pour desanimations (anin),des souhaitent utiliserneveulenr pour les pas jeux decouleurs (color), la description de de - QVGA(240x320,bassedensit, autantsexclure modles tlphones descrans(1yout),des menus. des plus anciens. faut alors utiliser une Il cran petit) ; valeurs diverses comme rrays,des des techniquede wnpping permettant de dinensio ns,deschaines caractres de (240x400, WQVCA basse densit, n'exploiter nouvelles quesi elles les API {string),desstyles etdesfichiers xmt crannofmal); sonteffectivement disponibles.

Elits,'

!l portulriu.e

entrelesdiffrentes versions

Eraille des crans

IAPI dAndroid 2.2 Pe Par exemple. des les met de propager erreursmjeures de de dansla console la place applications permettantau dveloppeur march Google, par rencontrs les d'identifier problmes Cette de les utilisateurs son applicatton. pour lesverslons API nest pasdisponible important. prcdentes, nestpastrs cequi si si PourpouvoirI'exploiter et seulement est la versiondu systme suprieure 7 dvons (correspondant version nos 2.1), la proposer sur-coucne. une

)
)i

permet vrilierqavec de Cela SD, etc.) application decontraintes,l le maximum Dansnotre cas,noustestonsnotre : les suivants avec paramtres application

n59) strtirmidril(5trii! h9,siing 0!lic

t
) {

?) p!!lir ltti! r0id*l(5!frq h!,Titurile

) rs!, publir sid itf(shil]q h!,5h! itrti. {


i _f .ni{h!,'tTf r'1rn!9,d

l { Pour pouvoircompilerce code, d il est ncessaire indiquerdutili 8), ser le SDK2.2 (version mmesl l l application dclareune exigence de important tester Il estgalment 2.1. sur minimale le SDK de combinaisons saisi, les diffrentes une avecou sanstouchscren (avec { <use5'sdk /> adr0id:nir5dklet!i0n-'7 IllD.8) if l8uili.lt{SI0i.50X dPad ou CoogleTV par exemPle), I doit trackBatl. Lapplication tre uti_ Il y a donc le risque d utiliser Iisable pour diffrentes combinaisons { par erreur une API qui ne serait ou signalerls limites dans Ie fichier que 8 disponibles sur Iaversion lors Androidfl est.)(nr. anif Nllc r0idriflShingh!, StfirqN9) la Par d la compilation. exemple, { paramtrer rev le Il fautgalement propos Pac_ le version2.2 du SDX tog,ilf(h9,nsq)! Settings potrr Taols/Developpements javax.xmt.transf orner,qui kage l danslesversions navoirqu'unseulprocessus la foiset n'estpasprsent flvffidr immdiate de la demander destruction liq, !) mthodes Nif(Sldq Il]ruribk prcdentes, certaines ou tublitr0id adoptNode( comme complmentairs ) { r)i loq.f!f(li!, pour inalyseurDOM.Pour viter mmoire Pourvrifr laconsommtion er I de cla,il est possible commenter il estjdicieux utilisrlaclasse Debug d le temporairement codespcifique delPI et dedclencher comptabiljt la prilic rtll5hiry Shi{ru!, ilNNahle h!, O void 8 dela version etdecompileravecla desallocations. { versionZ Justeavantl'int8ration,le tog.rtflhq,ns!,di et est ; commentaire supprim lecode o g h ! . s i d t A l l o c C o u)n i i n q ( ) en estrecompil 8. ); '
!li hq,llrroribk !{!lic !0idNlf(Shil]q rs!, di Ntl(5hjrq hq,Shiig Tifo$lt tullicr0ld

h!,Striig !s!)i !0ld ?{blic Nif(sirii!

ide 0r nso wid h!, lublic rtf(stril]! 5!ti4 { to{.dh!,ris}; ) owf dr puili. rtflShirq nm*ible ) {id h9, i
toq.e{h9,",e)i

l mwnid! nsq, h9, d wid Nblic df(Stdiq Strjl]! Tlrt0rik {

Une autre approcheconsiste porchaque distinct crer projets un sc_ diffrents Nousavonspropos et vrsion bibliothques lier le nariospermettant qualifierune des de par des Il code lesdpendances projets. application situations. dansplusieurs pasoublier tester application de l nefaut reprsentatil du sur un jeu de modle Les qjoutsdesconstructeurs march. et peuventapporterleurslots debogus I d inconsistance. les Pourpouvoir integrer diffrentes il de contraintes,estprfrable crer virtuelled multion une machin le en suppfimant maximumde ca (pasd crantactile, son, de pacits Ill http://wwwgoogle.frl peu CSM, demmoire searchq=android+ski+adb demodem Par application au total.pasde carte et

us, i 0 9 . d[ t [ , + 0 e b s e i c ] 0 b a l l l o c s i ( l ) i (

ElTestauxlimites

OPTIMISATION SOUS ANDROID


Unefois I'applicationdvermine, esttempsde I'optimiserau maximum, il pour

tenircompte contraintes terminal mobilit, des d'un en peu avec demmoire, peude puissance et peude batterie. CPU Chaque instruction conomise est
de I'autonomie plus ! en

Le framework ajoutegalement des optimisationsfines,endclenchant pr lfentiellement ramassemiettespour le lesappiications tantpasenfaade, n ou en fbrant le JIT si l'activit attendune de Lo|sdeI installation dune appltcation. raction I utlllsateur. premier un traitement effectu le est sur Lesperformances processeurs des de bytecode Dalvikpour encore optimiserle nostlphones cessent samlio ne de codesuivantlesspcificits tlphone rer, avecinnonce de doublescceurs du et le lier avecla btbiiothque standard. l,schz. Il est dllleursimportantden Une version en cachedu bytecodeest tenir compte lorsdu dveloppement et alorsproduite.Lesinstructionspeuvent de ne pasrdiger code de incompatible utiliser des offsetspour identifierles avec multicceur, le comme lestradition attributs la placede leursnoms.Ce nelsdoublecrecksou autresutilisations mcantsme trercprispourtoutes hasardeuses variables doit partages de entre les applications une mjsejour du plusieurs si tads. f.a/rewofk Android est ncessaire, Mais certainsmodles bascots Enfin, depuls version la Froyo de sortent avec des performances 2.2 bien permettantdedmocratiser l'OS dAndroid, nouvelleversion une de infrieures, machine virtueile propose. est Cellect notreOSprfr.

ndrojdpropose plusieurs dj pour optimiser tecbniques le code.La machine vlrtuelle Dalvik tspcialement pour conue un tlphone, instructjons Les sontorien tes registres etnonpilecomme IaJVM clssique. plupartdes La paramtres et desvariablessont mmoriss dansdes registres, instructions Les transfrent et manipulentls donnes entre ces registres. Lors de la compilation, ou plutt dela transformationdv bytecode en Dalvik,un Javaclassique bytecode optimiseurde registres utlllspour est distribuerles donnes mieuxdans au les registresdisponibles. quune Ds vriable estplusncessaire,registre n le correspondant devient immdiatement pour Ia suitedu traitement. disponibie Si trop de donnes sont ncessaires, la plle est utilisepour mmoriser les donnes complmentaires-

est capable faire de la compilation de juste temps.Le flux de traitement est placllnairement dansun cache. Lorsqunepartie estinvoque souvent, une analysedu flux est effectuepour retrouver les bouclesperdueslors de la sauvegarde linaire,puis cettepartie du codeest convertieen assembleur natif du tlphone.Cetteapprocheest intrssante lbptimisation seffectue car sur le flux desinstrctlons non sur et la structure langaBe.Il sgitpas du ne dbptimisercertaines mthodes, mais unesuited appelsinsi.l'enchainement deplusieurs peuttretraduit mthodes en un fluxcompll. dpssantla notion de classe, mthode de structure. de et

Bienquetout celaamliore notable mentlesperformances, n estpastnutile il dnliorerla consommation lectrique par et I exprience utilisateur un code efrcace. Plusieurs approches doivent tre pour amliorer choses combines les sur un modle de gamme. bas

E Int".face
utilisateur
Au niveude l'interface utilisateur, par chaque objetestidentifiable un id. Lrbredescomposants graphiques peut tre profond.Pourretrouverun lment particulier, nous find avons mthode Ia ( view8yJd ). Cette demireest eviterau maximum. doiteneffetparcourirtout Elle pour retrouver Irbredescomposants celuidemand. Pouroptimiser rela, il fautmmoriser cache pointeurs en des directsversles nceuds I arbredont de nousauions besoin. Pouruneliste, estconseill crer il de uneclasse agrgeant pointeu.s des vers toutesles vuespertinentesd une ligneCetteinstanceest initialisevia des ( invocations findvielrByld ) puiselle de estmmorise un tg deIa racine dans deI arbredesvuesd uneligne.Ainsi.lors dun traitement, suffitdercuprer il Ie tag (getTago)et de le convertir, pour avolrun pointeur directverslesdiffrents lments. plus, celaest directement De rutilisable du recyclage vues lors des pourchaque ligne.

00wrfid! cursm) vieN, t0ltsxi corfext,ht!0r !!lk r0ii !jidtier(lirr { tii.!eiTasl) filil lache = (lacie) cril. ; l air,Iieoq pirit) c0iirt, Crs0r !!!llr Iier i0rlier(coiisl { LlItR Sefl ltaptlnlliter) i seisy5t ic(c0nhlt.ul0u]-llifsiRYIct) li4 = ifilter.ifflt([.]!x0!t.c0mich-liri-ih!h0to, Fru!,ti]se)i sule leidfl= ft.fidtii8]ld([,id.ied{) |J toir racle, ; // ,.lrr n I )

lJoid io

sttlng[]{hh.C0 I0,hta cursor+A0lrer.qrery(dia,ner 1cT ^ri ) ! r u | 0IsPtY_,n I I ,n I I ,n I I );

par doittreremplac :
Stdn9ll{hh.C0{I^cI priwie staiicfinal Stfirgll DITAS-C0tUN||T4 Il),hh.0l5PtY-il^litl i d roi f0 crN0rnes0lver.query(dta,DT5-C0tU,null,null,null) )

sont construites la la De mme, plupartdesrequtes finales les statiques afin dexploiter varjables demande,

rduirc la tailie de lrbrc desobjetsde II faut galement prsentation. efet, les calculspour rpartir les objets En Les danslespacesont importants. effetssont visiblessur peu Pourcela,il faut recycler destlphones performants. ligne d une liste-Cela de au maximumles .iayoufs chaque qui d permetgalement limiter les crations instances de Nousavonsvu en sont coteuses termesde performance, giaphiques qu il tait prfrable d'avoif des composants pluttquede lessuPprimer Cela invisibles dclars comme permetlerecyclge segments lrbre de prsentation, de des il si sontdiffrentes, ligne.Mme leslignes associ chaque et toutes varianles de les d estprfrabie avoirun arbreavec non cacher lments ncessaires. les qu est UnRetativeLayout plusefficace un LinearLayout. viter la transparence. Il faut galement

de 11 prfrable construireune fois por toutesles est et de de chaines caractres cesrequtes de lesgarderdans statiques. desvariables
l0+'=?"i siticfiml Strif! RttrC0nii query{...,Rt())i

getcotunnlndex( eviterd utiliserl mthode ) Il fautegalement suite unerequte. pourretrouverle numro dune colonne le finalefefalffaire, assoclant numro unevariableconstante avecsonnom. dune colonne
p d v a t e t i i i c f i n li i t c 0 l l 0 t s 0 ; s p ratesiiic linl int C0LPREI0|=1;

de plusieurs requtes un fournisseur contenu vers Lorsque il dutiliserI apptoche doivent treinvoques, estprfrable batcr, mmesi eile est plus complexe lmplmenter'Il est les au ealemenr iudi.ieurd eploiler maxrmum possibililes en seffe.ru.nl t par dsqL pourqu. toustesrrdir.ments de plutt quen Javavia Dalvik.Lutilisation cluse SQLite3 pour sontinitilementanalyses Lesexpressions rgulires si un cot in (sefect ...) estrecommande Ellespeuvent tre places vrhereavec le construire plande trajtement. possible. celaest pour la dansdesvariablesstatiques conomiser construction plusde temps I utili que qui du pland analyse. peutprendre lamain. doiventtreoptimises l'expression.Elles sationde rnalsNFA(avec nest pasDFA car Ie moteurutilispar JAVA a d'crire t bcl la place Il retourarrire). estdoncprfrable rduire traffc.Ilfautdonc le rseau, nousdevons Aunivea entreparenthses, autantque possible les authentifies. de ablac.Demme, sousexpressions recyclerls connexions pas parle code, doivent tre Cela ne ii si elles doivent treeypioites la SSL. conomise ngocition Parcontre, faut viter (a+)(b+)devjent{?ra+)(b+). pour en dclaresoptionnelles. d utilisercesconnexions lesmaintenir vie.Il estpr_ Celapermet utilises. si frable lesperdre ellesnesontpas de paquets rseaux maintiendela connexion de les d conomiser

rgulires El Expressions

E Rr"u,,

El eur" dedonnes

de SQLet desfournisseurs LesAPI de gestion bases des de constitus tableaux de de contenu besoin oaramtres ont rejoues sontsouvent LDAP d'unutilisateur possdant nomdescolonnes. Typi Lesrequtes Ie de chanes caractres requtes dvoirun cache dernires des Il estlorspertinent d tre construits nbnt Dasbesoin ouement. tabieaux ces voire lorsquele d'tdentifiertouslesobjetspouvant pour retournerun rsultatdjconsult, fois. chaque Il estprfrable n statiqes. rseau estplusdjsponible. dansdes objets une treconstruits foispourtoutes

longue, est il SSL d'uneconnexion tantassez Lbuverture dutres prfrable utiliser un Future<> pour etrectuer d en traitements parallle.

de sur de Pourconomiser la mmoire leschanes caracles nousne chargeons images Pourrduirele trafic rseau, String.interno lorsque la quesi celaestncessaire lfrchage Les tres,nousutilisons mthode de en tche fond Iors Par ta pour conomiser m_ celaestjudicieux. exemple, de lnalysedu fichier tailles des imgessont ajustes LDAP et entre d Des moiredu tlphone. testsavecdescentaines images XML de correspondance lesenregistrements de nousrcuprons nombreses Android, faisons leursquivalents cr de nbnt pasrvl saturation, nous en mmoire soituntype LDAesoitun rfrenant de de avant,lors de l'invocation Ia mthode chanes caractres le mngejuste en peuvmt tvDeAndroid. chaines redondantes mmoirecar sont Ces Des Android. images onlow enory() parleframework pou\ons supPIiXML Nous alors plsproviennent lanalyseur de Nousnvons sincessaire de trejectes lammoire interno la invoquant mthode en des sur d od\ iueencessaire lalre rn cdche disque imdges mer iette redondance une recherche instnce String. Cettemthode de me i.leir conlor a lbb;eclil l;ppliralion oRIirun a!(s de la classe String de dansle poold instances le de pourne passufcharger tlphone ouivalente la chaine en ligne un annuaire, la elle est lalvM. Sluneinstance trouve, retourne rfrence contacts utilissraremenl avecdes vleur une Sinon, nouvelle st ri ng quivalnte de surl'instance sont en cours,il est possible Si des traitements de la JVM et le pointeur au est ajoute pool desinstances cancet(boolean)dun via les interrompre, la mthode un En est correspondant retourn. invoquant .ode comme peutgnrer exception spc! une AsyncTask. Cette dernire pouvons i nous celui'ci :,cache,put(key.internO,objet) fiquedansle threaden cours,sanspouvoirmaitriserleseffets dposer cl dansle pool.Lorsque danslanalysedu flux la par et prf.onssignalerl'abandonundrapeau' Nous debord. faire rfrence une cl nousutilisons nousdevons rception unenregistrement XML, d lors ledtecter delaprochaine internO. la de mme mthode pour tout a.rterproprement. LDAP il nest disponlble, ne sert Dansle caso aucunrseau Elles requtes parallle. en rien de tancerles diffrentes String. En instances ainsiplusieurs Nousconomisons ce de toutes. estpossible tester caspourcouft Il choueront mme utiliser lbprateufgal, la place si le cache requtes thorie,nouspouvons des des la circuiter distribution requtes des mais peufrserver cela ce equal() dans cas, delamthode le na pasretrouv rsultat, ' l:mrle d eviter rlcoplimisalion llesl pref'dDre 5urprises Yityliia9ef )c0rteri. cF{c0nnecii comctiyityllinqf que de La lecture source Dalviklndique lorsde I invodu j(ft qetsy!tensefl rtext.C0IItCIIvlTY SRriiIE) i nst pas String mmorise intern{), I instance cationde if ( de immortelle Si immortelle. uneversion considre comme (cn.seia.ti!ItmrklnioOull (crlTull & est prsente, chane retourne enplus la f00.iscomected( ) mme vleur dj est ! | lc|r.set^ctireletxorklf avec ) Elle du de exclue I analyse ramasse-miettes. estpartage ) miettes du ramasse Lalgorithme de lesconstantes compilation. { pourlesmarquer immortelles passe touieslesinstances par ermf // lo eixoft, retum lesorserver et ainsi ) sont de les Deplus,comme chaines caractres gnralement raisons optimjsation d plusclassique, estpossible utiliser des il d du sous'chaines fluxXML pourdes Pouruneapplication propos Google qui linstanceretourne la mthode par par substringO fait rf Apache [l] imodulenod-pagespeed passante touslessites web. rence mme uneposition de en la au tamponmmoire, indiquant d Dermet conomiser bande reste initiale Donc chaine la dedbut unetailleparticulire. et la enmmoire grosse suivantmaintient Le enmmoire, code : chainede caractres

E M-oire

si des de Nousvitons construire instances ellesre sont

r I' shi.. . q s t f i r q t i i y s t r i ! = ' ^ M M A . i q8 iA M M s h l n 9 ( ' 0 s i f i i 9 " ) l

11 lors oertinentde constrireune autre instance est n'onlpasd'tatet peuclasses anonymes Denombreuses dure devielongue. si courte le rsultatune statiques- rellemntplus dansdesvafiables tre ventpalement mmorises de invocation une iite deconstrui.e instance chaque Cela la mthode. dans contradic_ une noussommes LDAP, Pourlesreoutes dimciles obtenlr les galement donnes Nouscachons pari noussouhaitons viterderefairedesrequtes () dans tion. D une getDisptayName doitfouiller la mthode Parexemple, conomiser et les pourparcourirtous Data.y trouverun verslesannuaires. dutre paft, noussouhaitons lesRar{Contacts un Nousproposons cacheavecle rsultatdes ( on\lrulrP la mmoire. el structu rdName.cnfrn dF nresistremenl l vDe utiliseun algorithme mmoire Ce reqrtes- cache siau( leno parttrd..ii?l.renlesinlormatlons unedonnF dernires Dautrepart si les des surunedonnede d victions fequtes plus anciennes. il fautserabattre decetypenestprsente, LDAB les enregiskements retournent mmes Le plusleu$requtes le rype 0rganizationpourexploirr nomdeIentrepri\e via mmoire, pourmutualiser lesinstancesen est dlgorilhme Ioul cela dtect poureviterappliquercet est d resulrar cch Dans deslll|ekReterences. le caslimite,IOSpeutinvoquer des par lors moment. exemple du tri alphabtique rsultats-

lorsque situationdevient la onLowl|mory0 une mthode pourviderle cache. I exception iit x+; Nousen profitons critique. fk)i // = f(iei floit(r); I la de la requte plusrcente. locales des d D aukepart,il estprfrableutiliser variables de de Au niveauconsommation ressources l'application, locales nefiet,lesvariables d oue trs forte dans Dlutt desvariables instances. nousavonsfait le choix d une intgration virtuelle de elle iont mmorises dnsles registres la machine car est l systme. Notreapplication alors trs lgre. permettent combiner de dnsle tlphone. Dalvik.Descritllresastucieuses ]e exploite maximum codedjprsent au etles d Le le est lesvariableslocales attributs uneinstance Lapplicatton doncpetite. module plusimportantest faciiement nous LDAPComme dccsaux annuaires la bibliothque et que de et nutilisons lesservices connexion derequte, que possdons sources. nouspouvons supprime.louts { B - b i les nor.rs Cela nvonspasbesoin. 1es classesetlesmthodesdontnous { conomise Kio pour le fichierclasses.dex,et 30 Kio 650 pot !r // 00r!le riitilisition utilisef reqlstre pourlefichierAPK.llestimportant les d dpter APIquenous iiial 0 b= b1etJB0; sous spcifique Android. utilisons un usage intervenir le dclenchement ) ) sur Nouspouvons galement Nous I'extution une requte. d lors du ramasse-miettes de pour b_ qu peuvent tre galement inverses miette dmarre 80% ne Les boucies ramasse demandonsceque1e avec Aprs nficier instructions de spcifiques comparajson la des d'utilistion. Sinon,il gardeles objetsen mmoire. pendant quelutilisateur la requte, peutfaire le mnage il consulte rsultats. les
f0f it iTrf,len!tlr'lii>0i..T) f uniiie+[Nuitilje.9eiRuriine(); iiiil ![R!nt1rn +uiti[r.geiIarseilleaptilixti0n0; fiil ll0at ieapL]iilinii0 gnrent galement instances. des rapides Lesboucles {
8 ) l l i R l n t l D e , ! e t R u i i n e e t l i r g e t l i p ! t j l i ? a i i m lf0 i J.s l

// for{int i=0ii<iff.lorsth;+i) (i -

m d e l i s{ . . . t)

) finally I runii[]e.seuruet|]aputlliziiiol(hepltilizati0n); )

qutvaut
Itefitor i tr = nodetisi.itrt0()i i i 1 e( i t r . su i { ) ) { . . . 1

Avectous cesefforts,nous espronsde pas recevoird er par remonte la des reur de type OutOfllemory utilisateurs, plce march. de

uparavant codeen vrifiant damliorerle ll estpossible est si le conteneur vide,

e . l o r ( i l o dn o d e r o d e l j s t ) . .} {.

prfrabie accder destypesprimittfsqu des d 11est du plusfin, ll y a ceriaines habitudes dvelop Au niveau d deuxtbleaux entierssontplusefficaces objets.Parexemple. le qu pementJava il faut oublierll fautlimiterau maximum possdant quun tableau objets deuxattributsentiers. d Pourcela, faut vitrd'utiliserdes il nombre d'instructions. getae.set dessetters.Lpplicationtant isoledans un proles d'utiliser droits il cessus spciffque, nst pasncessaire package uI au Ils dccs attributs. sontaccessibles ntveau des directe. pourpermettre valorisation une I Pltll6li r ll sont proscrire,saufsi lbn a plusd uneseule //i,ai ray=nei Lesinterfces i tllgli ltll arfy-i=nei via d En I implmentation. effet, invocation unemthode une iill0li jnterface pluslongue l invocation unemthode que directe. irtll array-bei d est plusconome, seultableau entiers. d un Encore
superrlre llip [] = ro1l iish[ip{)i // Inte|fe

du E Au ,riu"ur', code

Lesnumrations galement viter sont qi des Il faut galement viterl'autoboxing, gnre ins-

l i t [ ] - i r r i y - b r si n t t l 9 r ? l !

ne des Attention l utilisaiion typesgnriqLles.Ils fonc tionnent qu avecdes objets.Le compilateurgnrealors de pour un type primitit luto-boxing
xi ||iylist<iit>xi// : lfrayList<lteger>

{ . .} .

nous t'ffllifJflT,iili",jj,;,,',,-it,ip.lettidth0'rusiuedtit'ip de de Lofs des constructions chanes caraclres, lei'eiqhtr)13)i utilisonsStringBuilder la placede StringBffer' car 0, 0s)i les Nous enchanons mthodesappndo fesidBliniD.m0Dmr!(8ilrap.[onpfes5f0mit.fil, raDide. cela Dlus est ; le le type de paramtre plus byttlbltelnase=os.totril(l en choiiissani.ludicieusement et un nousajoutonsbien cara'tre non Parexemple, fficace. djuster il dlimentation, estjudicieux Aprs uneboucle avec de unchaine caractres un seulsymbole au le conteneur strictminimum
( ) p ' 5t ) i i lS i r i n g s u l l d e r o , i p p'e.n d (p e n d (a Ptp e n d)(;' )
ll > i i i i t r s ' < i o 1 te c o 1 t i ( t r e 5 L l l T e r r i y ' ' ! ! < Y o lie ( o r t i ( t > ( 1 0 0 ) : 1 r r o r i r 0 l i! i l e ( 0 i li c t c 0 1 I i c : I i r L I i t t . 0 d D ( 0 1 h i!iils r I I

{
p( ) r e r s t f i r q 0 r l l d r 0 . a p p e di ( ' p'e i d ( s t r ) . a l l e n d ( ' ) ' ) i

,.i,tt.,lotrnt"tl; i miettesen forantdes dider le ramasse Il est possible avantde les variables null o en vidantls conteneurs doit parcourirtousles miettes En oublier. efiet.Ie ramasse Pn es les chemin\ Dossible\ idenlr6er insrdn, en!ore vie. Dour aidele ramasse_miettes on rfrences. Bncoupantdes {

Les tamponsfabriqus I aide de StringBuitder ou en ijls tre 5tringBuffer doivent compacts restent mmoire (bu de.t rinrosize ( )). En instances. effetuneallo_ Il fautviterdeconstruiredes ne est mmoire trscoteuse, seraitcequepourgrer cation de le verrouqlobalde lhllocateur mmoirell estprfrab)e les comme instances les au de recycle; maximum instances, StringBuilden Un simplebuilder.setlength{0) permet

de Lutilisation charsequence la placede string, ds ) excessive-de permet la quecelaestpossible. d'viter cration cela Par de caractres. exemple, permetdexploitel chaines dernire { un directemen! StringBuilderouun Editble.Cette et est classe une String modlffable non immuableElleest C i. nrt=n. i // -preY+ull felP utilisateur. de ditables I interlce dansleschamps utilise ) de propager typeCharsequence mthode le Il fautsouvent plusnaturellement est de la Le Dolymorphisme galement viter'La rsolution enrnthode, place String qutvient que ne dune heihodesurchargee destring, cela prenden effetplusde temps est ChrSequence unesous_ciasse Comme il saufsienboutdechaine. l invocationd unemthode finale. Endclarantlsactivitset pose dedifrcultparticulire, pas les ce on un nales, amliore performalces' iaut utiliseruneAPIimposant string Dans cs'il est touteslesautresclasses en charsequence la de touiors Dossible convertir variable Enfait. il faut oubliertoutesles bonnespratiquesdu dve_ utilise est tostringO. SiI instance st;ing vla h mthode procdural au objetpourrtournef bonvieuxcode retournethis Sinonuneinstance loppement djuneString, la mthode au s{ring est construite derniermomentpour rfrencer sipossiblesansle dupltquer du le tamDon Charsequnce, Androidutilisent utilisateur les Comme APIde l interface et Progard I2lestun utilitaired optimisation dbbfuscation d le de il estpossible propager contenu un un Chrsequence, Android qui per;ei desgainsimportantspourlesapplicatj.Jns textede saisidanstoutesles APl,sansdevoirconstruire ou Il ermeid liminerle codemort (mthodes attributs uneString. sansefet de borddont la valeurde non ;tilss : mthodes ne Chrsequenc peuttre une Maisattention, instance rcritunepartiedu code(intin utilise), equats0 de retournestDas cr cl utilisecomme dun Hash, lbprateur I les I mlange interfacesoptimise h; Vousrisquez lesgetteursTsetteurs string sontincompatibles charsequnceelde propage constantesl des ritage; vos de ne plusrtrouver Petits. de Il permetgalement rduirela taille destichiersen suivantle volume doivent tre initialiss Lesconteners la et les renommant mthodes attributs pour compliquer d information sarder rtro-ingnierie. = cet e r y t i s . . o T a e t t e p t o r _ l s r $ r i i t l i . k D h o r d t e ? ( r:) d It estimDortant utjlisersvstmatiquement utilltaire en car du dsir protection code. lesgains termes de sans mme permetd viterlaug_ par une estimation excs Parfois, (donc trafic rseau dutlchargemnt) lors de detaile depaquets fois,lors de l'ali du mentation tamponmmoiteplusieurs ne de et en vjtesae code Iexcution sontpasngli8eables' ne d la mentatlon.Parexemple, conversion un bitmapen PNG et sur doit utilitaire treinvoqu lesclasses lesarchives in'ernau Cet Lc du prendra pdsplusqutaille bjtmap tampon l en is peuldon.re iniai enI onsequenL justeavantleursconversions fichierclsss.dex Bvtearrayoutputstrem

E Tailledu package

fait soit 46 aidepas.Il fautdoncconstruire respectivemnt %et66 %.Cela un gainde 200Ko, Eclipse nenous Porcela, (115 (14,4 secondes CPRS kb/s) en paquet lide de ant. Androidnousaide rdigerauto 15secondesenGSM kb/s),2 le est en et moinsd uneseconde UMTS(2Mb/s).Notreapplication un matiquement build.xml partir du projet. petite, estvrai.Nosavons tout fait pour particulirement il dAndroid et la 2.3 la e depuis publication Drnif nouvelle, Eclipse est misejou.duSDK,Proguard maintenantintgr

DanGalPin de Pourajouter priseen compte Procard, la dansle de De plus,celapermetd conomiser la mmoir l un extraitdescriptant qu ilfaut injecterdans I3lpropose de (prs 60OKo) mliore performances les de et tlphone flchierbuild.xmt produit. et dmarrage d excution. les II faut t1charger fichiersdd-proguard-retease. un xml et procfg.txt depuis site[4]. d ilpropose utiune tropcomplxe, Pourviter intgratjon xMLpourfaire un inct ude.Ilfauimodifiel llseruneastuce la permettent optimiser res' d conomiss Lescycles CPU une entity et l4outer Ie fichierbuild.xnl pouf dclarer trs de lectrique. autresource consommation Une source <project/> dansle marqueur de peutconsommrprs la est Ce importante I cran. dernier de daprsle menu" Utiljsation moitide la charge batterie, yersi0nrl,0' <?xDl mcoding= ?> !Tf.8 des -) l nst du tlphone.Il pasfaciled'apporte. < l - . f i c l r i b L j i l d . m r dela batterie, r <l00CTIPt ct I par ttendu Droj saui rendrele service conomies ce niveau, fse t < l t l I I I l d d . p r 0 9 u r d - r eIlS T fe ' a d d - p r' oe lu iifs e . x n l ' > S eis N possible. Ainsi.lutilisateur le Iapplication plus rapidement I' mais tlphone, de content la ractivitdu estnonseulement g m j e c ti i n e -c 0 n i a c i s l n l i r e td e fP ! l i r h e l C > 0 ' c.ondes rrn quelou\ ddmrnageP, dep.u5ileronomI\F

lectrique fil Consommation

de mximum traitements Iutili Les antjciperau Ilfautdonc sateurpourmaximiserlarcuprationdesrsuitats.Pournotre ajouterune propritproguard dir Il laut galement des.onnexions application, setraduitparuneouverture cela le fichierrocal.properties, rfrenant rpertoire avectouslsserversLDAPleplusttpossible. dansLe pendantque rib de Proguard. Nouspouvons estentrain de salsirunrequte. l'utilisteur de dclencheslors asynchrones, fajrecela lidedetches * t i c h i e ro c l , P t u P e r t l e s l jd/bi l initialisation lctivit. de pr0qurd.di /home/iidr0 i/proguitd/li!
lip,'iect,

onstart0 Iinterfacedes un Nousajoutons mthode pour entendu requalifie vrifier tfe Lapplication bien dolt au de etnousles:nvoquons plustot fournisseurs contenu qullefonctionne aprs manipulations. ces toujours au rsultats fur et mesure nousretournonsles Demm, les quelesdifrentsfournisseurs livrnt.Ainsi l utilisateurpeut partielsns lafin du t.itement attendre un rsultat pour exploiter modifier Le fichierprocTg.txt estventuellement strategiespour par Nous avonsappliqude nombreuses application, exemple desspcificitsdevotre tenircompte dun quepossible ressources les limites o'r autant pour qjouter priseen compte vuesspcifiques des conomiser la des Il en terminat mobilit. ne fautpasoublierquela variabilit Parcetabte. classs Les sortisn sont desmodles trsinportante. derniers est que car ' k e e D r b l i c a s !* e x t e n d s f 0 i d . 6 . l l n t e | f i c e D plus pasforcment rapides lesprcdents, ils sadres_ d iid r ' k e e0 r b l l c a s s e x t e n d s r c j d . \ , l e i . Y i e r D d iid Ie riguurdans Avec grande une diffrents. sent despublics -keepclssxiihnenhmmA iInplenents dmjd 0s.hrcelble d!! i d sensiblement il stpossible mliorer choixdesapproches. { pourAnilrnid r classique uneapplicatjon en uneapplication prblicstaticfinl r** CRtT0Ri
l

Dans tre Dutres modifications Deuvent testes. notrecas, suivants sansproblme. modifi paramtres les nousavons
sii! flnontusrixdrised -dolhtiprdprbl aryclsses icllbf

Ill http://code.google.con/intl/fr-FR/speed/pge-speed/ docs/module.html

orge.net 12lhttp://proguard.sourcef l0l09/ l3l http://androiddevelopers.blogspot.com/20 serverhtml r . o p t i l n i z a tlic o s e ^ i n p l i f i c t 1 0 i / i r i t h n e t i c , l f i l d / * , l c l s s / m N i proguard 0r d rq/t android-andlicensing
. 0 p t i m l t i 0cs d A j r pc i f i 0 n hlfi n i i c il t i lio

Les Le rsltatest impressjonnant. deux applications conomisent contctsInIin et ContctsInlineLDAP

commandline.googlecode. [4] httpr//android'proguard com/fiies/

1 Tableau : Planmarkeling

du cibleerobjectii narlting

en Devenir lren.sur lesannuaires liSne une n 500 tlchargementsn an. na.chentrotsmois de Renbourserinvesti$mnt lenregislrenentsurlesplacesd I pourAndroid d fake dansl ralisation applications Valoriserlesaloir Rdire prix 106deprmorions. le Prixlev naximu dansle tlPhone C.erun frne@rl polr lntg.ertout lype dnnaireenllgne,avecneintSradon cer un envlronnenem.cueillant desextensions Sratlltes ou Payantes Publierles sources prlies gratuites. ds prpascoles ingnieurs u.ive6its ou d dansleurscoles. Ts tudianis les aynt n.uaireLDAP un pourpossder annuaire un LDP Toukslesentreprisesslsmmeot Srands leursCRM et souhairant c.ssimple em.cevers un Tous conrnarnrs les hgn int8r d.s nnuairesen l.s un Tous piculie8dsirant ac.s identihs cejur pourAndroid Deux concents ou avecleu6 collgs pour avon!n ac.srpideet prjvilgl application Lsutilisateurs sohalrem.eite camarades prco, sG dvoir 8rerlne llste nore de contcts de des direct la base clienls Lescommerciux veulertun accs

spcinque 0on.tionnlii

Andrid lnrgration plusfod po$ibleavec la ADre)uneonoapblaqdruirp,i1r.rlditruionaurpdlslrdflophonesunpixtduitpourunperiode dn) aternrr"j. oour tairennan'e r'apDlicarion dlfiAenr' .qc esd ur h'drcur' pretnlv* de' retou-! jrrcn en\ra. piqualihcdrion lpp,i, aenore mrrrhe rous pv\du monde let de uirl5arer_ C_d1deur, OfrrirLnv{ionnoin\'hqeiurlPsmrlieLredu"ilsPnhdn8ed.aprcmolnoeIdpplicdrion (nalyseda.sslx mois) poovantvoluersuivnt le retour march d! IJnprix rai5o.nble sur ac.esslbles lnter.tt Achat I unitpourun accs to$ lesannuaires l permettnt accs n pourlesenprises, .htlorfaitaiie Sraluitprtouslesemplovs annuaire pourun a.cs lannuaire lentii. de dcrifs cht prix rduilp!r lesmilieux e" rr 0 l h p o r i a u " m eu n " p D l h d r r o n A n d r o ' d c o i r r1 0 l0 0c '7 0 0 0 0 nt de en tni 'nv^riisemenr temps,rs,mpo, 'undnnee cherh) oansnrre<as Puis $25 por llnglsirenent sur la plcde marchde Google de Col rentelpolr I en.eglstremedsur dhltres Places march quelques mois. bta limne 20rl enversion sodi. prvlepourdbut en proallon.elle pe.dantun mois, avec.om!tication France pya.te Puisvrsion pour fiancophone derx mois sur Pisversion standard le march Davante (g..lenent lngue nClaise pronotion inRuantsde chezlesblogs dnsle monde entjeravec Enfin. ditrusin

ll difficile. Le prix estun problme dautres Il est possible denregistrer fcteurs de fauttenircompte plusieurs v n e m e n as e c F l ! r r y a g e n t . tv d onEventO.Ilestprfrable informer commeles offresde la concurrence, de s'offrifIa possibilit fairedespro Lutilisateurdecesuivioudeluidemander le motions baissant prix pour une en lautorisation. priode I investis limite rentabiliser et pour un faut sement.Il etrectuer calcul tmps de estimer boutde combien au rentredanssesfrais. un application peuttrede quelques semaines proposf prix pour Cela un Nousdevons prix demand. moissuivant1e la chance, plusieurs Nous notreapplication. avons par construction, avoir une version d Si le publicciblnest pastrs irn gratuitede lpplication, quel'uti portant, prix doittrepluslev tant afin le pas LDAP n lisateur exploite l'extension atteindre rentabilji. la d'esprer Celalui permetdvoir unetrs bonne I de Nous dcidons proposerextension ide de ce que sera l'applicationen de la connexion desannuaires LDAP 2 eurosvecdespriodes ajoutant que pages pluspersonnels 1es blnches. promotions I euro.

serontdis_ moinschres Desversions pourdes sites ponibles aprsngociation. spcifiques. LDAP Il faudra faire une analysede Prix pour vrifierl'volution dansle temps, l'influence destarifs de la concurrence. etc.Ilsera sur despromotions lesventes, le possible baissef tarif par la de toujours est suite.Linverse trs difficile, moins version une nouvelle dvoir proposer plus beaucoup riche.

Em pri*

Il Leplanmarketing
plan Nouspouvons alorsbaucherune pourfaireconnatre notreappli marketing les Il cation. fautrechercher coordonnes

Tableu Aclivitde marleling 2


A c t i v i t ed a m a r k e t r n g ldentilief des critiquesfrncophones pour lipplicatjonet oflrir n ccs en Result't http//wwq.nueraa.con/cntacr/ httpT/www cnetr.ancejr/news/demieres.news.htn?k\=1000082258 htipJ/ws ft ndroid.com/conract / /a htrp7lww w planete-andrcid.com propos nessphp hp7lwwsnobia.cecom/iraserv/soumetr. 8&q=android&l&sa=N&sta.t=20 httpT/blogsarch.google./blo8search?hl=ir&ie=UTF ssa.droid.frlandropress/cntct/ httpT/qww hrlpil/ndroid.La.ce.h/propose. iniornaiior/ une htplwws applicationandroid.f i/conta.t nd.id/ htpi//wws applidmid.frlvoe applicatin lest r htrp://ww s mona roid.con/i. dr php?do=cntc nd nce.inro/news-ajout0 asp http://android sna ph.eft http://wwwlorr.aldugeek.com/ hp://wNw beeeek i!/contact http://www tunandrold cn/co ntentlindex php/noeJor um/ http://wswphonandrld.com/contct po!. lesnuh tr&ui.sommesnols .oniad us http://www android /popup-contctphp http://q ww.o biles a. ius cm http://qw(giiks.com/coniactez-nous/ http://s w.tochnoblle fr/contact htrp://www.android.software ulate de conracr lrllorfr http://wwwclubic.com/dive.s/contct.php Ide ifie. les entEp.lss ponvant tre partnls la dlfilslon deI appl'cation. pour signaler la Contacter mdias les publication lpplication lcters. de leurs LestelcosOrange,SFR BolygesTlcon pou lur permetre dbf.l. n appllcatton. pro ,. et E.tic.net et le servlceC/oudta.e Mabite Magazine,llobile Achat, PDAet Sartphon.t\!bite Bus-ess Magazine(http //wuuteklr til Lssentieldu nbile Ihtrp //ww uessendel.nobile.id) Pl,oneIi (http://wwuphonelife.frl) l!8926hm1) PhaneMaglhp//vw*iornarx.frlphone ahish tech sciences'et'techniques Mobile MaA(hrtp://wwwnbilesnagljle.com/) Lejou.nl desttphores(hp //wwnjdr.k/) CNULinux Maqa2lne(hpi/wvwgnulinuxmag.com/) Tarti un euro le prcmiernois Prs lancenenr. le grarlte llmire dansle remps. Publier br une pays. permettnt utilisation de Publler lexrnsion une avec pges les blnches difrrents .aly3r ls pports CoogleMarket et Flurry.

de rdacterrrs chefdemagazine,les Les actjvits prvoifsont rsumes en et dansl Tablau 2. burauxdes lves universits des les coles ingnieurs d utilisantLDAP, Commevous l avezcompris.les peuvent une entreprises demander expermettant accs un spcifique La premireapproche dattirer tension est moyennant unachat lsdveloppeurs Android. Cela fait leursannuaires, est Deuxexemples par la prsence ce horssrie. de Nous forfaitaire ngocier. pournotreentreprise et que serontsuffi sontproposs esprons les lecteurs sur samment curieux reconnaissants ou pour la qualitde ce numrospcial, Le bureau lves coles, des des des tlchargefapplication sallger classs l et prparatoires desuniversits ou noter peuvent de quelques euros.Sils peuvent pour nous une contacter obtenir en cela version valuationpourvrifier lapplication(si possible bien), I utilj d jls permettrad'augmenter audlence i de sationet lesparamtfes. Puis, peuvent pouvons nous Puis un d celle-ci lemarch. nos suf envoyer icne, texte introune prvoir le plan dcrit dansle TableauL ductionlorsde la page identification, d

dccs evntuellement avc lesparamtres delnnuaire et lesrgles dssociation pouf la placede mar' un description produirons Nous alorsuneversion ch. spclfiqu moitiprix. permettant et d tousleslves lesprofsseursavoir En un accs leur annuaire. change. nousdemandons promotion cette la de danslesdiffrentes extension mesur sur publications internes lbrganisation. " deslves Untruc du genre Lebureau une rductionde 50 % sur a ngoci le Androidpourgarder uneapplication ,. contact avectousleslves. Contactez-nous tes si vous intress. sont la fin des Nos coordonnes articles.I

DE PUBLICATION L'APPLICATION
Pour publier une applicationAndroid,plusieurssolutionss'offrent au Marketde places march alternatives I'Android de Plusieurs dveloppeur. sur ces permettant diffuser travaux desplateformes de sont Google proposes, Archos(+1milliond'units les comme tablettes par non soutenues Google,
moinsimportantes. vendues!), ou exigeantdescommissions
galement de esacteurs mejeurs I lntemetsouhaitent Amazon, Vodphone, { proposer march comme un qiint pu!lirnaiicsid stiSfcil kei(coiixi cofieri,5tfii! nsg) HTCou BestBuy. { ne Lesoprateurs t1phoniques sontpasen resteet propo' teir/AeircihJ+q)i !ri rri=Ljri.Frse("mf prjvilgiespourleurs clientsCest de sent piaces march des Inint(lnteit.CTI0ll-lltl,ufi)i Inh itei!'mN qui les o resolle=conhn,qthiliglinisr( ) li st<Rs0lTelif le casd orangeou Vodaphone. qualifientgnralement qerylni0rtciirities(liert, 0) ; ; apph.[ons avanrde lesoropo\er leursclienls. if lfesol{e,si01=0) une diffrentelAndroid Market D autresproposent faade { permettant recommandation iteii) 1a conixt.sirtktlrity(ii AppBrain, deCoogle, comme sociaux. ) au despplications seindesrseaux de Le tableauI indiqueles caractristiques diffrentes places march moment. du de i = !ujldef fiilAlert0iil0q,tujldef irAIeftoiil0g.Brildel(c0rteriJi ijue)i buiIder.setTiiIe(Lstrig,laIkI brildor.rthnclbldhre) ! iull)i brild0r.!ethsiiille8rit0l({,iirin9.ni*ei-oi, essigr(nsg); brildr,stf !rildr.creite0.shoio;

E Pui." sonmarch

applications placede marchoffrent des de Certaines ) permettant rechercher dautres composants de intentions les directement Celapermetde proposer ] ou applications. tlcharger lesrecherchant en composants complmentaires places des Il n estpasinutiledepartir la pche diffrentes (pname), textelibreou une par nomdu package auteur(pub), (ci pour vrifierla compatibilit l application de de march par spars desespacesde combinaison cescritres I, pagesuivante). Illustration est La syntaxe dela formenrket://<serch>?q=<tvPe parantre>:<vateu. rket: //detaits?id=<pc kage> 0u ma

r.prdos. market://search?q=pname:f Parexemple, contacts pub:"prados". est de projetdansla place march deCoogie La prelnire dimcult notreapplication qulledoit de Lapublicationdu une trecapable proposer I uttlisateur listed extensions, demande de plusieurs : tapes prsente le t]phone. sur de extraite la place march, de - la prparation package du l lors dtecter celapour aiderl'uttlisateur de Nousdevons - l enregistrement lpplication. de Laclasse I installationdecomposants. Queryl|arketpropose sur pas de de Il n'est possible testerla place march l muplace march elleestpr_ si pouramcherla de unemthode sur Desstuces sontproposes le net pour demandant lutilisateurde lateurdu SDK. sente, uneboitede dialogue ou modles. les de contournef I1l,enexploitant images certains cela sedbrouillef.

sur E Publication le march


de Google

Tableau rlesplcesde mafch 1

ro.
Android M.ket (Goosle)

cor""tion
$25 u.e fols

coiiM,
30 %

http://ww.android.com/mrket Paiem.rpa. les utilLrteuF \ia Cooglech{kout. Priodede tesl de 15mlnutespou.les acheteurs. Deux@ns (bientthult). . Unepaniedu monde seulement. ' Des.riion danstoutesles iangues. lcnehautersolrtion (512x 512). Gphiqde p.omo(180x120). Dec.iptjon g.aphlque (l024x5OO). Aucunepossibilitde couponsna.keting. Compatible ma*e*//search.

Appslib(Archos)

$0

30 %

hrrp://wwuapPslib.com Paienent lesutilhateufs Paypal. paf via Dclencbement plement $25. du Conpatible ma.ket//search.

Slideme

S0

1.5 $0.01 %+ forPa],rnenbbta.trdnsfers http.//www.slldeme.org 2.0 %+ 90.05 for bank accountdeblts 3 ihages ei une vido. 5.0 %+ 90.05 for c.edit cafd Compatible ma.ker//search. An addirional I %appliesfof Non USA (edit card transactions l0 %+ 90.10for paymentsvta paypal Appllcation g.atuite 1O% http://wrv,appoke.com 5 images unvido. et http://wwwyaan.mobj Utilise Paypal. Descriptionen dSlals et franishup://andappstore.con http://developermotorola.con Dlstribution Chlne, en Aentine8.silet Mexique. Utilise Pypal. Dclenchement $150ou aprs 90J. Description anglis, en puis espagnol, 3 inages.

Appoke YAAM

$o $0

ndAppstore ;-hopaApps (Motorola)

$0 $0

Commisston Paypal Conmissio. paypal

orangeapplication

ngocler

ngocir

httpi//www.orangepa.t.ercor Processus qualifictlon difi.enrs de sur modls http://www.storeoid.com/ 3 images. http://developersonye.icsson.com wwwlnsldemarket.com Applictionpo. tablette. Testes de la soumlssionlors 5lmages. Dclenchemnt paiement $100. du Recommandatin rsex via sociaux.

Gene.al Mobile
Soiy

Pasd lnfo

pasdinfo 0% 30%

$0
$0

Inside markef

ln ligneu.lquenent ToshlbaMarketplace SamsungMa.ke!

Psd'lnfo Pasd'info $0 30% http//wwtoshibatouch.ul httpsr/slle.samsungpps.coin

Id66n-n;

3: Desdiport d a Wlicatif plas de Mtch I : Dilfrentes

du E Signut,r."
projet

de !l Importation
I'application Pour la publication

la signatureet le compte un utilisateur identifipar sacartebancire Cettelnsque criptionestncessaire, l'application publie tltre gratuit ou payant soit

Avanttout, il faut exporterlesproJets et les signer Celas'effectuefacilement sur l Pourpublier application la plce $99 que demande Notez Micmsoft / avecEclipse,via le menuatdrord toors demarch Google, commence : ici tout de liSD par an PourPouvoirtre deve_ po.l Sign.! aPplcatloa Pkage. . ll est E htrp://ma.ket.android.com/publish/Home et Phone Pouvoir Windows loppeur alors possibled lnitialiser un conte_ gratuite de mrne Il estimpo.tant bienlire la licence publter pplication, une de neurde certificats, crerunpremier qui et dexploltation. est en franais En d certificatde siSnature, aligner extraltsquenousJugeons (c 2) voiciquelques lepackage f.Illustration d exporter Une applicationne Peut tre suP_ i impoftants dernierestalorsprta trepubll Ce juste dsactive faut donc I1 prime, facturcrult eu' utiliserun autrenompour uneverslon aVous pou\zPas ne des rcment desutilisateurs exenplaircs bta et la publier sanscommentalre, que cesutilisateurctaient en indiquant quil ne faut pasI utiliser' des Fodults ga initialementauto ses tlcharyer permet de tester la publication et Cela titement.Cettestipulation ne visepas lesservicesofferts par le ma.ket,avant empchella distlibution de version_s la publicationofficielle. dessai du Ploduit avec une option de vous AprsvalidattonPr Google. ' . tdAaryenentaddtu)nnel permettant remplirun formulairepour publier devez intgrahduProduit, dbbten ]a version que Notez lesdescriptions l'application. ( Concenant les Prolluits qui ne pewenttie enplusieurs Tous langues par lesparamtres peuventpastrcexamins I avance peuvent tre simplement relle l utilisateu (tels que lesapplications): sauvegards, la publication avant vous auto sez Google rcmboursel (ct Illustfation r 3). 2: !atond un cdifrcal lnteAalement ltilisateur du prix du Si vousutilisezun scriPtant Pour proAuit si celui ci demande reboul' ]e intgrerProcuard,il faut ajouterles sement dans les 48 heres suivant Ie propritskey.store et kv.alias dans tlchargenent. ' Ill http//blo&jesuislibre.org/2009/i0/ le fichierlocat.properties Lesmots suppon-de-landroid-narketdepuie de sacquitter $25 ll fut glement dansles peuvent etre ajouts de passe sdk-degoogle/ lemulateur-du couvrelesf.ais de Cela et ky. store.pass,ord key.atis. pourI'inscription. cls deller permet indirectement et password, maisce nest pasconseill publlcation

SECURITE
Lascurit d'uneapplication Androidprsente deuxaspects. faut seprotger Il contreuneautreapplication malveillante dsire qui exploiter notreapplication pour nuire I'utilisateur, il faut se protger et contreI'utilisateur lui-mme qui souhaite piraternotre application pour ne pas dpenser quelques les eurosdemands I'auteur par pour sontravail.
ndroid meten placediffrentes techpourgrerceia. nologies Nous vous renvoyons I excellentarticle de Benjamin MortndnsMIJCn'5l deseptembre/ octobrc 2010. systme Le pas n'est exempt de vulnrabtlit. faillepermet exporter Une d un fichierdelacarteSDlorsde vlsited unsite, la I insu de lutilisateurPlusde 350 vulnrabilitsont tdcouverres Coverty par Ulsur la verslon Lesdtallsne 2.2. sontpaspubltcs. pour rcuprer des informattons confidentielles. pou.rait les enElle voyer en dehorsdu tlphone. Nous devons nousassurerquelpplication possde appelante bien le droit de consulter contacts. nos Lesprivilges par sontidentifis une chanede caractres. est Il doncfacilede dclarer nouveau un privilge, pour peuqubn utlllseune dnomination nonambigu pourvi, ter lescollisions. Nous nesouhaitons pas dclarerun nouveau privilge, car ll en existe dj un qui nous parfaitement. privllge convient Le READ_CoNTCTS recycl peutrre pour vrifierlesdroits de lappelantdun
1 : Drcit de t applicton

ll D.I^.er 1",
privilges
Androidpermet chaque application de dclrer privilges les quelledsire. Cela efs fectue dans chierndroid anifest,xml. le

-' <1..fichlr lidmidfaiiiest.nl prot{hd siitic roid cleckPg ilssjmO ihrors securitJExpti0i <rsrs.p!rnissi0r droidi!reiindmid.pemi!!in.6iI_[C0UtiS. /> { j {!e!-pemir5i0i itur0id:nale:1ndmid.p0fiissior.ltA0 i ' ( ^ p p(li t l 0 r . ( 0 r r s l .\ { t C d l l i r y 0 e . r i s s i 0lrfr i rt . p e r n . s s . 0 1 , C()tIl{T5" ts <u5es-leni!sin rtA0_c0llTAcTS iidmidrnim='aidf0jd.D0missi0n.tRITt ) C0ITACT5" =hdagellni9er. SSl0l_DtlltD) <use!.pr0i5si0n Ptr iidf0ldrmr='indroid.pemissi0i.CCtlS_lttTll0R{-5TTt" <!ses.pennissln i i r n e rS e c u d t y h c e p t i 0 n ( f n i f s i . p e m i s s i o , R t A { ) _ ( 0 t i A [ r S adroid:iirciindmid.!e .n0tt5S_0!I0tm i!sifi ClLry <uses.pennis!r0i ineJindmid.prmissjor.ctLPll0||t. droid ) <u5e5-Fmjssi0i iidr0id:mrn.lndf 0ld.Fmissim,tt^0_tli0tt_srrt"/>

Nousinvoquons mthode la heckPermissionO dans Nousne dclarons le strict minimum, la listeest toutes mthodes l'tnterface que ies de car AIDLainsiquedansnotre afrche l'utilisateur lors de I installarion l'aDDlicarion routlnedesynchronisation contacts. de des Ainsi,uneapplication pourluidemander dccord Illu\trarion Cetpourrairqui possde prtvilge \on lLl lJ ce peutgalement utillsernos contacrs l effrayer en ligne,malspaslesautres applications.

Coogleproposeavec sa place de march un mcanisme pour vrifierla licence d'uneappllcation. faurajouter Il une Cesprivilgessont accords I ensemble l application bibliothque invoquer mthodes desendroits de et des stralorsde sonlnstallationDansnotrecas, nousne sounalrcns tgiques codepourvrifierquelutllisateuresrvalide. du En pasquuneapplication tierce utilise lesProvi.ters contacts casd'chec, de plusteurs comportements env:sageables, sont de

ll Imposerdesprivilges notre application

E La prot".tion du code

v{uroevts

sDKlo.aroi /hm/prGd6/bh/rndrcidrd*/

i cooqb a s by coode h." rdrc d Pi r, rvioi I ixro by eivEr6en Mobicomm!i *coqbAP5bycq9Li.ldlobP]],kvii]

3: Bibliohquede sestiondes ticences

du lfrchaged un message la modification comportement delpplication. indiqu de comme sur Unefoisenregistr la place march, permetde crerdes prcdemment, clic sur EdlrProtre un 2). comptes tests(cl Illustratlon de dutiliser un machine Pourutilisercela,il estncessaire API Inc.) APILevel8 , ou sup virruelle" Coogle (Coogle detestsde laplacede unsous-ensemble rieure. possde Elle pour qulifier application. I march SDK Manager, utiliserle. Android andAVD Il fautensuite , Package(c[ Illustrauon3). pourtlchargef . MarketLicence le

r,2,3,4,5, 6 ,/ , 8 , 9 , 1 0 , 1 1 ,1 2 ,1 3 ,1 4 ,1 5 , 16,i, 18, 9,20 l 1 )i contert) voidcheck(Coitert { = Strjllgdeyild sec!rc,9etstrin9( c0ntext,qetcontentRes0]lef 0R010-10); 0, 5ecte.

reN seivs lagedPolicy(

Lessources ajouter votre projetsontalorsprsentes poLveT Vous egaicl <sdk>/narket_licensing/library/ lesimportant. bibliothque en crerunprojetAndroid lement pourintgrer procder plusieurs tapes Il fautensuite en Ajouter unepermission votreprojet:

nex At50bf usctoi(SAtT, m texi.gethciislne(), deviceld)), 8St64_tt]Btll_KtY

et il un licence, fautdclencher traitement Pourvrifierla


l .cleckAcress(ieu Licensechecie$illbick( -checkef

dppelen retour < s e s - p e f l r i is i r o i d : m n e = ' c o n . i n d m i d . t e itdC gl.l C E t C K attendre retourviaunelnterface s d0n l ii t Sfl 5 le - Choisirune politiquede scurit. sont Deuxversions proposes serverflnagedPolicy et StrictPolicy. : Il estpossible rdiger dn dautres. pourmmoriser le un de Choisir algorithme chiffrement par AES cache l licence. estpropos dfaut. de - Intgrer celadanslppliction. pour initlaliser besoinde trois informations Nousavons base64 la de un ticencechckr ll nousfaut une version rcupre le site de Google, sur de cl publique l licence permettant qualifferIe t1phone un et de une information un alatoires gnrer foispour tableau vingt donnes de application. chaque
pfi\Jiie lA5t64-tUBtlC-KtY staticfinal Stfing = ' I I I I j ^ I 0 . . . I is u i t e f i l e s i i d e 0 0 s l e ' l s = prll,ie siiic liral bytellStT n!l byietl

{ )

los.d(TA,'llM')i

p u b l iY o l d o n t A l l o r 0 c d t o q . d ( T , ' d o n ti^ l l o r " )

l
* $ {0d p u b l i w i d i p p l i c i i i 0 rft0 f( A p p l i c t l 0 n E r m mo d e O c f { ' r m fl t o 9 , d ( T A G , ' e+ e fo fI o d ) i )

la onoestrov{) d 1ln fautDas oublier invoquer mthode pour viterlesfuitesde mmoire sur le checker.

que peutprendredu temps le si Notz Iinitialisation IIest prffable dclencherla de rseau capricieux est celui un vrificationdans autfe,readque del'interface problme statutdIapplica du utiLisateur. posel Cela du de tionentrel dclenchefirentprocessus valldation Lapplication pas n de t la fcprtion la rponse. maisI utilisateur haiteIutiliser sou encore valide, t un Pour tesLer cela,il faut d une part nrgistrer (via d, d compte Google testssur 1'mlateur compte de syr.rd, puis diterle pro6l du compte la plcede pourdemanderde certaines erreufs rtourner march pour ce compte(cUll. de la vrification l licence de 2). lustration quvecla Le pfoblme que celan lonctionne est la piace marchde Si d Google. le terminalne possde pas,l de bibliothque narrivepas lief Iaplace rnarch compor pourdemander lvfification 1a de licence.lJn peutalorst.e utilis pour utiliserles adapt tement (comm placs march avec d de fonctionnalitsautres Samsung)ou unserveur andppstore ouZirconiade [21. les enregistrs intermdiaire rfrenant utilisateurs qelle soitl source tlchafgement. que du d D plus,il est ncessaire utjljsrun utilitairede pour vjterqu'il soit possibl de camouflage cod, du automatiquement un de rdiger outilpermettant dtecter pourle modifier[3]. de le code vriiiction la licenc de porcela. Iutilisation Procuard de Nous avons voqu la dbptlmiser Enplus conomise.tilledelpplication, d nmoi-e. l , nargpmpnl -d-ir a,on.ommoton er toutes infofmations ls cet outil prmetde supprimer qui ne sont passtrictement ncessaires l'excution de l application. profondment bibliol de Il estpfrable rnodifier par oourntarrFUre\er)ion rhq propo,p Loogl pefsonnelle unique. Celrduit les rjsquesd'uneex ploitation un utihtaireautomatique. pojntfaible par Le une concernjntefface lappelen retour ln etret, l de entraltotr{ } invrsion nomsde mlhodes des simple Plus et dontallowO permetde leur.erle systme. en profondeur, c]]-back invoquvia la mthode l est IlicenseResuttListener.5tub.onTransct( ) Cest poul d pa.tir d ici q'ilfutlaif pfeuve irnagination Jnp diflF'erc du.odF propo\ i'nple.ienrr ver\:on par Coogle r

W W

ra scuRtrrur'Fr, DU
EN DES PAROTES L'AIR?

Iu tzl

http://wwwcoverjty.com/scan-android/ http://andappstore.com/AndroidApplications/ purchase checklngjsp


p l | d r d g e u \ v : r n" d e { I i f r - d r i o n " i , e n ' e d o
,.din,.l ono P '-oir

I/ l3l http://www.01net.com/editoriai/51999
'
i I

DE SYNTHESE L'INTEGRATION
parfaitement cependant parattrsmodeste. s'intgre Elle Notreapplication Android. dansI'environnement

q c ? -

c a r a

1 : schna d'ulilsatianet d intgnton

'illustration1 indiqueles difet frentes fonctionnalits les cheminspour les atteindre. codeportpar bleuindiquele Uncadre . en l application Contact ligne,. Uncadre porte vert indiqueunefonctionnallt par le d.iver LDAPToutle resteestdj prsent Nousavons dansle tlphone. pour intgrercela fait preuve astuce d le en rdigeant minimum. Nousavonsrussi proposerune de sans appllcation consultation aucun paramtre, nousdcouvrons autocar le mtiqement paysde lutilisateuret Les nous comprenons requte. versions sa suivantes projetintroduirontpeut-tre du

crerpour lesdil: API, il est frentes prfrablede tra-

publication ap des plications nest Pas Le trsrapide. temps des d excution manest chines virtuelles prsentatif temps du

Ceia entrainequeles longs. seule La actrvit dffichagedelaliste desrsultats plus fait mais de2000lignes, ilestdtmcile faire de Dhilleurs, autrement. lessources dAndfoid *****

rel Il est tlphone alors impratif de terminal (voire plu rapicle).

11st difficiledbb tenir la stabilitde l application, de car si trsnombreuses densle narket 2 : Application tuations sont quade Le tlchargement I application L e s r g l e sd e lifier LesdiFrents la de est depuis place march extrme ne scnarios sontpassimples tmplmentrapide,telpointqubnpenseune pastoujours par sont suivies lesapplica menterentestunitaire,Il seraitbienvenu par erreurLapplicationestparticuliremeni mme celles par dveloppes tions, des tout conomiqre ressources, enouvrant Google. en les rcrivent dvoir une liste prcise scnarios Parfois, applications pourles critiqus d qui desperspectivesextensions. un service est pourtantdlsponible detestsdessituations et les les applications, activits, services dans un autre activit.Par exemple. Des de les fournisseurs donnes. tests " . Iapplication Navigation de Google gnriques quelque sorteen pour unitaires pasl de n'exploite activit Contacts laslectionuneadresse. d Une demander versions terminaux de Denouvelles at activit spcifique critepourcela arriventchaque mois.avecleufsspci Celane sert rien. ficitspropres. nouvelles danslapplication. tablettes Des des et consomme ressources limite les Android pourlesftes, avec sontsorties au Nous voiciarrivs termede notre posslbilits intgration. d fut destaillesd crantrsvafiables.Il fonctionne, Notreapplication aventure. pour les adapter pplications tenircompte LesAPIsontcomplexes loind tre et sur de elleestprsente la place march priphriques, qui nest ce Il ainsi que sesertensions. Qulretour vldentes. faut parfois rechercher de tousces 1l pour trouverla bonne. Par pastoujourssimple. faut prvoirun Iongtemps partager cetteexprience de ? de pour un exemple, amcher disqueanim budget miseniveaudesapplictions. sous Le dveloppement Androidest d attente, pendant recherche, faut il Ia Malgr les difficults,nous avons pluscomplexe il ny paraitaupremier utiliserune " Progress ". Drlede qu bar inrussi proposefune application rapide barrequecedisque abord.Faireunepetitapplication I avec tgfe,ce qui nest pas possible Iaire une application solide, est faclle. Le quelle d'autresenvironnement. framework de Il nest pasvident deviner est taaitant touslescas tout moment, pour souple pour coder Androidest suffisamment meilleure approche Lintgration serala uneautrepairedemanches. ll unefonctionnalit.nefautpashsiter dansl cosystme fined uneappltcation une utiliser approche etdemande toutcasserpour nous ajouterons Android pasdocumentes nest Prochainement. diffremnent. dautres exrensions. premire ou per pour plusefficace ofganise La dnalyse sources des desheurs pagesbianches de faire-Maisnous Il estalorsdlmcib de fairedesestima mettradxploiterles comment comprendfe quelques possdent pays. sources Les avons accs auxsources. contrairement tjons de chargesans avoir diffrents en mois d exprienc dveloppement un ockProviderd exemple. vous Nous dutresplateformes. pour dpplications compleyes Android. invitons proposer propres vos exten et Les API sont nombreuses Ia do avecun CRM, Le nombre d tapes traiter est sionspour s'interfacer Il souvent succincte. nest cumentation web pour n importequel pour une application un annuire pas dcrit pourquoiil faut privilgier trs important grantdesidentits. framework plutt que telle autre. telle approche Nous vous invitons tlchar8er de lutiiiser.Par de maisseulement comment Au niveau l environnement d(le les qu'ilne Iapplication, consulter sources peutregretter des de on e,\emple, gestion botes dialogue veloppement, la petit)et notervos esl de pasvidente comprendre Ion soitpaspossible modifierdu code code finalement si nest de I sansdevoirredployerappli' retourssur la placedemarch Google du nentrepasdansla complexit cycle la vole, 2). (Hot-compile).gnration la ou autrelcl lllustratjon I La et cation devie d'uneactivit.

ER"tou.

d'exprience

CONCLUSION

IrI I I-f

Nous avons parcouru les diffrentesapproches Android.Les choix pour raliserune application dpendentde la complexitde technologiques de I'application, son niveaud'intgrationavecle de systme, saportabilitavecd'autresordiphones.

!H I
TT

irl

peuvent tre rdiges a plupartdesapplications peu et CSS3. Certains laide de HTMLs, Javascript pour API venty grefierquelques complmentaires toutnmaintenant une du exploiter composanis terminal les Les forte compatibilit entreles cosystmes. applications plusfine avec plusambitieuses dsifantune intgration ou lrrive pour ragir desvnements comme le tlphone, API par doivent utiliserIeS dun appelou dun SMS, exemple. parla tre dAndroid, pfenantgrded diriges en spcifiques plus gestion ressources. Enfin,les algorithmes exigeants des (calcul chemin, simulation, numrlques de des comme calculs de etcj, de lnalysed images(reconnaissance caractres, d les analyse photos). manipulations imaBes de de visages, doivent utiliserun de ou lesalgorithmes ralitaugmente, codenatil pour la rali et de Voiciun ensemble questions d tapes Android. d'uneapplication sation ? marketing lappljcation de I :Quelleestlpproche de 2:Chojx de Iapproche dveloppement: pourfonc que ncessite rseau le Est-ce l application HTMLs. ? Privilgier approche une tionner - Esfce que lapplication horsligne, doit fonctionner pas les cartes. 3D ou desvne la mais nexploite Android? Privilgiergalement mentsspciffques HTML5. lpproche complexes dlgorithmes a Estcequelpplicatjon besoin ? desjeuxtemps_rel en ? et exigeants CPU Propose native. Privilgier l'approche une Eslcequel'applicationabesoind iorteintgration classiquele ? avec systme Utiliseruneapproche de 3 : Lesphases dveloppement: - Identifierlespossibilites intgrat'ondansl systme d (Choisirles etc.) intentjons traiter,leswridgels, d IdFntiferles possibilires xpo\Prdesservi"esou (identjfier les aux des donnes autrsapplications AIDL). Contents Providers,lesinterfaces

globale tlephone ? du Faut-il intgferdansla recherche s ou des laulil s intgrerdansla gestion comptes en ? treconsommateur Raliser interfces. les - Tester lesscnarios cycledevie (basculenent du tous periedu processus en tout instant, du tlphone route). coursde (mode touc, ou interactifs Tester touslesusages { etc.). fo.us.arp' lsans.rn ta./e.dpad. lavier. -. Testerdififentesconfigurationd (ldpi,rndpi, cran hdpi,portrait/paysage). -- Tester bouton pourchaque et cran chaque le retour Tester limitesavecuneseuleapplication la fois aux les de unedeskuctionimmdiatetoutes activits et - Utiljser animations arnliorer pour I expfience des utilisateur en Iourdes(images) les Tlcharger ressources tchede fond. (et - Identifier privilges ncessaires les les minimums des privilges imposs consommateurs servi.es aux publisl. - Identifier fessources (version l OS, de minimums les etc.)et taille capacit priphrique, dele mmoire, du dansandroidllanif est.xnl lesexprimer - Ajouter ressources plusieurslangues etvrifief les en <ont (les ; r\ulnre IxrFs souvenrr\oir I inrerla.e pourdescontraintes taille). de CPU mmolre, optjmiserle codeau niveaurseau, mmoire. Analyser consommation la de etventuellement la Intgrer publication la iicence modilications. lsdernires

YOU! GLMFNEEDS
Ir.ltr.J lf \(tijJit:ion a l.efl:f{llljljsrri(rrIL de la protegef. d s s l r t g f t i ! r f l f i . . r 1 { ,u l i l i s a r e u rp o u fa n r e l i o r el r ( l u a l i r ((r1 .l a p p l i c a t i o J r . , l I ' u b l i i _ a I i o n l.a p p L l . r r i ! l d l l r r l ' " l r

P J t l l o i fu n e l e i o n b l a i \ ? c ! n a u l r c r n n j ' a p plii:,rtion .rn plnrns.sr:L(rri(nnJ l.sc(+rlesn Itdigf Les,:eerf Aral\scrl(,prjr dc lappliralion C F l af s L r f r ' l . s r ! , r h . u s f s t . r a p e s p r l o j f p o L r l . r . l i s L i o d u l r ea p p l . . t n ) r A ' r l n ) i ( l n l - . r l I ) L r v . l\lc r s j ( t r r 2d l ' \ n d m i d q u l v i e n t d e stofrp r o t r . s . ( : l r e s r n l d l f r n n ^ l , . r 1 . l s r f r a s sn i e t i e s r r u l t i l f h r ' a ! l l . r r r r ( l j n r . f f o . \ n r l e s a p p l i c a t l o n s ep l c i f. a r i l ' r ' r r i ( n !r r L r . . e s . a u r d i l T f e n ts c r s f u f s a r t n r i s r i o d e r : r L i fu n e l o h t i o l l ! d r . y . I d c ! , d . s p p l i . t i o ] r sI i r t r i g r a l l o ra . ' n n r \ r ' r r L \ ' lof raIS\'ldo don( k s ftr rraLsoulrJ1s .k' lioogle : \iPs l]r \{itr\'l : d.! fllt rsaudio la]lston pLrsi{rrs.arx:r!s l l a \ ' o i e r f l l ' t . rr l cn o L r v [ ! A P ]p o u r k , sc . r . r n r u r i . a t i o f s s Nf C (,\t'r, F,r/./ 4,,r,urn n/rrrs). l i i r s . r r n ) 1 .r l c c . d o s s i e r t p o s s i b p o ( r fL r ! ! r r l ( ' a I r a i s o n l.a d i s p o n i b l l i t r L rs D r ':

z t NE / F R A sur Rendez-vous www.gnulinuxmag.Gom pour dcouvrir les dernires news de votre magazine. pour rpondreau Profitez-en grand sondageafin de nous GLMF! aider amliorer
EIII
F|]IITN;

II

V r sL r c u e r e rl e ss o r f c s e sp m l d s s u l \ d J e s p f i ' q u el o f s d l . t u b l i ( a 1 i ( n(r1 r . . ( l o s r i d l a p p l i . a l i ( n ' r r , s . r a p l u se r r e f s i o n r r a J r i e n s f c m f f f i c f p . r r j r r l i a i r r n . I n l h i l i p p e ^ r n . u d HarangcrpoLrsr.|!rL'r'tcl t'nseiisaliss sff J . p u l i l i . d e s n r t j c l sd e p r l s k d f b u l d . . . s j a . l . l { p . n s . a ! o i r ( l j r a s s ( r i i { i r n t L r a r rp c b l i c a l i o n sl a l p u b l i i l ru . o la s.!fit des aftl.Ls rif c .l.rvc ||.r..r Ja'a. ( s ( l , s L r \ l n r o l o g i e.s m p l e r e s. o n r . r e l . s g r l l L s r 1 . . r L (u l r ( o l e s g f a p p e s e s . f \ f L I s . l . \ p l ( i i l l j o a u \ l i i 1 1 5d X t r l L d r . ! t r ! I ( r . o j s i a r c r u r l d . s n r i l sd sl e . t e u r sp o L r f ( a n c r i f o L l r g f ' r r ' t r n r r . . f r r g . r . , r ! . l a m e s e f f e u f s e lp p o f f ' f.sr . pf.iaf. his (t(( j. prlnds er.hafge uf hofs \ r i ed a n ss o Jirr t g f a l l t I e s p a l !( t L r . f r ! r ' ! : r r ) \ o l ' s r f a ! a l i s l a i r ( t u . ! ( t r r sa L L f . rd t r r o r v e r td e s d r a l l sq u | ! o u s j g n o f i e z u r l L . r i v e l o p p r n e n t! s A f n r o 1 s d 50 V o u sp o u l e zn t e n f o u f a g ea . . n r l r n r . r r n { i l h f g r a n l f l a p p l . r r t b r " a . r r . . r . r l i g n . ' f r . n i r n l j . t u n\lo s . o n r q . r . i u i f c s p r s u e l q r L e.s u f sd L L r i l i s arr' r a i r

4!

LA HTMI5 POUR PLUPART APPLICATIONS DES


pour optimises optimiss spcialement sont web Pour Lesapplications pourmobiles dessites pour une dvelopper application Pourquoi par treutiliss desordiphones. ? web aveclestechnologies classiques mobiles
les capitulons avantages de et inconvnints chaque des Les approche. avantages nativs : applications - Ds sont de millions cartes crdits de disponibles un clic pouracheter en lapplication. n - Vous devezgrer vous-mme applications permetpas le desmmes et est montiser a prio.i d identifierlaquelle native pajement voussouhaitz si web. laquelle unepplication est votreapplication. d Lacourbe dpprentissageun nou_ d Il n'estps possible avoir des est de pour sophistiqus I interface ve1environnent dveloppement effets De longueet fastidieuse. plus,comme utilisateur suivant sont lestechnologies diffrentes indiquait lescosystmes, ncessaire de En2010. tude Adobe une dvoir ilest immdia- quelesutilisateurs prfrent des quipespluridisciplinaires. est I1estpossible exploiter d dbrdiphones Il ,'tard[a.e utiliserlenavigateur pourunegrande raredvoirtoutes conrptences tousleslments tement web pour les (cI du terminal. l). partiedesusages I]lustfation Cela touslesmodles cosystmes le chez et par d peutsexpliquer Iavolont vjterde mme ingnjeur des Les inconvnients applications polluerIe tlphone descentaines vec base Le dveloppement de techno_ rafement utilises. d appiications commeHTML, maitrises, logiesd.j pourdevenir dveloppeur Il ft payer permetde raliser et vidosdmontrent CSS Javascript, De nombreuses que qu il ne Lesapplications fonctionnent mobilesrapidment. d estpossible avoifuneapplication des applications vojr surles tlphonesAndroid sur quivalente XHTMLs ennatii,pour sans devoir apprendrede nouveaux et n d de unesous-partie entreeux, les ou ou Android, iPhone autres. langages. matriser subtllits lestlphones environnement. versions chaqe des La mjseen paralll deux 'll fautdvelopper Java. avec -L cyclede dveloppementdP et prentissage longet dimcile. est pas Ellesne peuvent trejndexes.

'l Demme, y adesavantagesrlisef web desapplications : puvent utiliser Les dveloppeurs actuelles. leufsoutilsetcomptnces Lesapplicationspuventfonctionner possdant sur touslespriphfiques web. un navigateur Ilestpossible corrigerlesbogues de est Lecyclededveloppement rapide. peuvent indexes. t| Lespages Et desinconvnients: - Il n estpaspossible ious d'exploiter (il hardware existe lescomposants dessolutionsJ.

1 : UsageWebouappttcation

Nousallonspatcourirles nouveiles permettant dmliorer fonctionnalits utilisteur defaciliterle et txprience web d dveloppementune application pourmobile i - l lmpctsur lamiseen page; - lesmarqueurs peut trs smantiques i Ce modled applicatton des De plus,le march applicauons - lesformlaires rdigen HTMLs pur, tre march facilement i webestlargementsuprieurau La desapplicationsnatives.trsgrande sansconraissnceparticuliredAndrcid. d prsente lvantage tre galement hors m4oritdestlphones. ordjphones, Cela SVG; de sur spci portable dautresarchitectures d'applications recevoir nepeuvent CSS3 i peut La d Les fiques. dveloppeursapplictions t1phones. mmeapplicalion ' Ia golocalisation i places de sur peuvent un atteindre publicpls large treprsente diFrentes et sur plusieursprtphriques plate- march(saufWindowsPhoneZ qui sansrseau I Iutilisation pas Les d formes un seulcoup. plateformes nccepte HTMLs). asynchroneset lestraitements Mobile ne iPhone Windows et Android. de fonctionnalits Les nouvelles fraction march du reprsententquune permettent efet baucoup de en HTML5 dans destlphones sonensemble. pas qui avec choses n talent possibles prcdentes. nouveaux De Lesapplictions sontellesmoins lesversions web que pour Pardfaut, Androidconsidre les frameworks apparaissent iaciliter que na performantes les applications pourles pages ont riches web consultes une largeur les taitvraiavant nouvelles lacrationdpplicatlons tives?Cela alpha de 98o pixels. Celapermetd avoirune Une proposes HTMLs. difientestechnologies. version par fonctionnalits pour les pages possible dejQuery Mobile permet,en quelques mtseen pagecorrecte Android, estmaintenant il Avec pour un terminalmobile, de des entrelesdeux kilooctets, rallser applications non conues la de gommer diffrence ncessaire des Un zoomest gnralement avancee, riches vec ergonomie une mondespourlaplupartdesapplications. lire passage unepge pourpouvoir le textede la page. d lors animatlons du ontdumal Lesditeurs solutions de propose un galement outil Google entre deuxapproches. les sepositionner une page pourles permettantde rorgniser LeW3Cavc MobiwebApp Microsoftutilise Silverlight I1l Parexemple, sur sa MozillaavecOpenWeb webpouramliorer vistbilit un pour le dveloppemenl Windows spciffcations, sous s'effectue mobile. conversion L pour tlphone plce march de moment, nnonce Applicatton (une et au mme I2l Phone Z de applicationweb)ou dhutres proposent lavoleviale sitehtlpl//wwwgoogle au Silverlight bnficie abandonner des Windows de creret d hberger sites[3]sp' com/g$'tln. HTMLs.Mais,lestlphones pour les tlphones. Lapremlre conus ML5 Phone7nesontpascompatibbsf | cialement chose faireporadapter la moije renonce. Cherchez logique, sur un site uneprsentation un mobile de Il nefautpas inquiterdutemps tls sur consjste intervenir la largeurini car des de Le dernie.pointqui rendattractifla chargement pages lhpplication, API utilisationdesnouvelles de tiale accorder 1apagel4l.Plusieurs web est que unebonne ralisation dapplications plateforme Les HTMLspermetuneutilisationhorsligne. informatlonspeuventtre indiques ouverte. celautiliseune dans un marqueurmeta :la largeur, n'ont dveloppeurs pas consacrerdes mobiles utilisant la hauteur, possibilit web Lesapplications un deffecter la qui pouruneapplication peut semaines de zoom, dansce cas,la valeurinitiale, natimentembarquer IITMLs peuvent et certainscosystmes). trerejete(dans et delavido, utiliserla position minimale mximale. et pas lhudio web Lesapplictjons ne subissent t gographique I utilisateur afficher de Flash. Elles qriiri|n.'vi4Frt' .rcalabir0, sans desanimations utiliser colisntru5f en fonctionner ab quunsitepour peuvent galement Il nefautpasconsidrer par de miniature sence rseau la miseen cache moblle estjusteuneversion la d'adapter Ensuite, est possible ii dune base diffrentdeceque despageset l exploitation du siteweb.Cesttrs feuilledestylesuivanila taille del cran locale. pour uneutilisation un de donnes sur lbn rallse les dbrganlser lments et par exemple bureau.Ilyaun crantactilpluspetit 11 faciledetesterlpplicationdans diffremment un tlphone sur est ou sur Lespace restreint est et pasde sourls. en bauche. se passant une tablette. une premire et le doigtest plusgrosquunesourlsI d mulateurdemobile. dverminage Un quelques restritions Il y a galement permet <linl relrstJlesieet" ou sous Coogle Chrome Chromium type=' ieri/css' lechniques. ind jedii='0nly screm partiedeserreurs href='indroid.css' grande de leverune (rnr-ridihr 180pr'/> et Ensuite, Iergonomie l'af possible de codageil Avecun pe d'effort, est <liik relrsillesheei' typ'tgri/css' sur serontquallfis l mulateur, avecjuste fichage dbbtenirun sitetrssatisfaisant nedir! eerrd lrlsfrdeskt0p.css' C configurations. est condition de pour diffrentes CSS HTMLs, etJavascript, ( n i n . d i i t 4 8 h x ) ' de de offerts, l avantage la portabilit HTMLs. ou revoirI ergonomie lesservices pour La applications mobiles Ledveloppementdpplicationnative plupandes au premier ncessltent connexion rseau. une qujl ny paraitau estpluscomplexe peuttre permanente est Cetteconnexion une Rallser dmonstration abord. exposent qui ou temporaire. applications Les srieuse raliser application une mpide; invoquent serveur un est les fanctionne toutes conditions un desformulaires, dans et plus challenge ambitieuxetpluscoteux. sur le rseau afrchentlesrsultats.

ll Mise en page

Cettetechnologie privilgierlors est une Lasajsie d'une valeur numrique avec Lafeuille stylepermetdhvoir de de de : de la ralisation graphjques type ergonomie quivalente uneapplication desboutons d'incrmentation camembert, courbede chifire.etc.La nativet portableentreAndroid,iPhone, <iipt tlFrrurber'rlirl' siler?"step:'l'/> description dessin du tantindpendante Blackberfy, (cf.lllustration etc. 2) il de la taille du priphrique, est plus Celadoitadapter mme sdapter touteslessltua Unesaisie e-mail. d de les touchesprsentes le clavier tions,d un ordiphone un ordinateur sur virtuel (cela dpend versions). des pr de bureau, passant une tablette en ou un tlviseuf.
<input naDF typeiniil'plrch0lder="eni1l" 3'

Une URL:
<lqut tftF fl" !licef0lds5ih" 5izF 4e"

Ecsss

ElMu.q,r",r^
smantiques

E cur,"nu,

Les nouvelles fonctionnalits CSS3 de permettent proposer misesen de des lgantes, devoirsurcharger sans Les difirents typesde date (date, page techniques. est ll month, weektime,datetinqdtetineles pages drtefacts danslesfeuilies style, de dorloct),lestypessearchet cotor sont possible. les dans tableaux, des Pas ganiser lments considrs comme textesimple. du d de descolonnes, arrondirles an8les. detype range(!n curseur dplacer latailledesimages defonddes gauche droite). valeurs champs djuster Les des djouterdu flou ou d ajuster nesontpasvrifies avantla soumission, lments, la relative d'un mme prsence lttribut rquired. le stylesuivant position en de (rticre:nth-ch d{2n+1)) amlioreront lment Les procbaines versions [51. peut-tre cela. permettent fonctionnalites Toutes ces en une d allgerlespages rcuprant fois pourtoutes feuillede style. une

E Formulaire

LIncanevas unezone est rectangulaire pemettantdes dessim deux dimensions. permetdedessinertoutes sortesde Cela acco.d Avec simple un aprs Javascrlpt, pixels, choses, manipulerles de dessiner Plusieurs marqueurssmantiques il dbbtenir de l'utiiisateur. est possible des etc. permettent aider la structuration desfigures, dgrads, d la positionde ce dernierou de suivre de la page,et la comprhension de les vnements la sesdplacements. de En capturant celle-cipar les moteursde recherche sourissur le canevas. est possible ll (<section/>,<navl>,<article/>, uatel0siti0nh0siti0r) d interagifavecle dessin. Comme les functi0i <aside/>, <hgroup/>,<hader/>, lments dessins sontpasdesobjets, t ne = wr litltrd !0si!i0r.comds.litjtudei <footr/ <time/> et <mark/>). Ces il fautredessiner toutela zoneducanevas p r i r l 0 U i t u d e .0 s i t i n , c 0 0 f d s , l o i g i t u d e i par pour dplacer enlever lment. infofmationspeuvent exploiies tre ou un i l e d ( " J s r ji i c i \ l i i i h d +,"\ l 0 4 i t u d e ) ! e par Cela pourgrerdesllux RSS, lesscripts peutse compenser ajoutant en un Ils trs exemple. sontgalement utiles deuxime canevas Ie premier La sur pou.la feuillede style. enihsiii0i d crationdynamique un objets'effectue ir!i9hr.90locitim.9etCof (utdateh!itioi, puis a-dessus, le sur Iecanevas calque linal. dessin figsur le canevas st bllllglAciuracI: t|e

E Golocalisation

})i

De nouveaux types de saisies sont proposs. Toutdbord,ce qui est trs la importantsurun ordiphone, possibilite djouteruntextedide intrieur un l d permet conomiserde la champ. Cela d place l cran. nomdu champ sur Le est visibledansceluici et non au dessus. peutgalement qu Unchamp dclarer il dsirele focusl initialisationdela page.
<inpd placeiolde|rlciercis" irhiocusr!rue5

Esvc
ScalableVector Graphicspermet d crire en XML une suite d'instruc La de tionsdedessin- particularit cette par est approche rapportaux canevas que I arbre DOMassoci toujours est est de disponible.Il alorcpossible modl fier dynamiquement graphtqueSVG un depuis ou de recevoir vnements des lesdifirents 1ments. le Suite un bogue, paramtre enableHighA.curacy indis' est pensable pour lbnctionner avec Android2.2.Il indiqueque l'on prcis. dsireun positionnement il les Avec mulateur,fautmettre l coordonnes via Eclipse CPS dans I onglet DDMs/EnuIato| contol

Poursuivrelutilisateur, codeest le un peupluscomplexe.


// Iroq rgulireireit f r i ct i 0n up a eP si t i oi (p0! i t i 0|1 dt 0 ) { ) // 0clenchemeit p0ursuiie li deli de = \Jir tchld rri!it0r,seo1ociti. M |lihhPositior(!pdaiehsiiion)! / / A i n r l i t i od el a p o u r s u i t e n n a r i s i h r . ! 0 l 0 c a i i 0 n ac ce r ( r i t c l r l d ) ; . tl l a

gee d!.ci ioi1",'1.{', d0rids mrl i.e$ruie5!l(lt r8lt 1id, )i lR l, {

Le fichirdoit trelivr avecle type peut MIMEtext/cache"mnifst. Cla seffectueren ajoutant lignedansle une fichier. hta ccss du rpertojre vous si utilisezApache.
ddType texthacle-lianifest,rnifesi

l)r
possible ouvrirune Ilestalors d tran saction dy excuter ordresSQL. et des
(t o d b . h a n s i c t i o l ( f u i c t lx )i { I|l10 d0cids ' tx,executesql('llslRld ' ) ' ) i {id, l1 m i r er)/ l | ] (s , l n d i o i i r x . e r er e s q l ( ' l N I RlTT 0 o c i d(sd , I l d ? n a | nle )t E(S , ? ) , l i d , N e r v i l u e l l i A l,l

Cefichie.dottpossder premire en de ligneune cl permettant confirmer pujslalistedesURL le formatdu 6chief. du sitdevant tremaintenu cache. en
[cNt f1llIftSi

Lorsdela consultation unedespages, d celle-ci rcupre est normalement. En plusieurs HTMLspropose technolo tchede fond,toutesles autrespages giespourmaintenir tatctclient d b . t r a r s c t iu n c ifi o(it r ) un on{ pour cache sontrcupres alimenterle 16l.sssionstorage est une variable { local. Ensuite, pageslocalessont les t r . u c u i e S q l ( ' S trt ER 0 d 0 c j d,s[ ] , f Ci [ permettantde mmoriserdes inforamliorant perfbrmances les utilises. f u r c i i o( i x , r c s r l t 5 ) n mationsentre les pages, tempsde le et permettant uneutilisation ligne. hors { la session lutilisateur Il sgit dun de \ J Ire i = r c s u l t s . r o | s . l e n i t h , iS jndiquer certaines (i = 0i i < ler; i+) ior que Il estpossible d dictionnaire chanes caractres, de de { pages utiliser doiventobligatoirement organis cl/valeur. en tocatstorage i l e r t ( r c s r l h . r o r s . i h)n nii n e ) i .( Elles le rseaupour tre rcupres. permet mmoriser informations de des ) n seront donc pas accessibles hors au delde la dure vie de la session de t,l ligne.Clasetrctue toujoursdansle fichiercache"nanifest, aprsun en Afin de rduire la communication pe[net demmoriser Leyemple suivant tteNETWoRK. les et localement nombre consultations entre l'ordiphone Ie serveu., le de prsentes informations normalement par I utjlisateur ccllt lt^luitsl dansia session l utilisateur, ser' de ct index.html veur, serontprsentes dansla variable {ou5 .orsrlt iYe? ltepa9e <5pi idicorit5?1?</spii> ioi5. sessionstorage. Lesinformationsdevant persister la session seront mmorises IUl0l(l i f ( |i 0ci I 5 0. d e,p q l0i d 0u t ) t 9 i Ci danstocalstorage. Lesinformations / l o q i i . j s p = i lmalStori9e.pa9elodCorit /lo9o.Fs permettant structures djusterloca I o 5 ori q .pi 9et o dCu i . cI t s i oI prsentes Iement pages les dans seront Ii F*el (l0.il5hfqe,pr!et0idCount)+ Sans rseau,imagedu logosera le I = de SQL d0cuftd,gettlmedtyld('c0uii ),trt0ontrt unebase donnes locale. considre comme lien cass. un Pour locilShris.FqetoddCounii Avec toutes fonctionnalits, ces ll est viterlaffichage lienscasss, est il de possible qui possible alors dvoirunappljcation d'indiquer lments des de mme lbsence rseau. substitution. peutgalement en de peuvent mis fonctionne, Desvnemnts Cela servir tre les les de chaque modification unedonne. d adapter scripts. feilles styie ou lespages selon besoins. ls possibleavoiraccs Il estgalement d unebase dedonnes locale SQL. en La ccllt tiltftsT pef fonction openDatabase metdbuvrjr Il scllpt!/Jqrsfy.ls une base. faut indiquerson nom,sa Il est possible indiquer dans un d version, description,une une estimation l des de sa tajlleet ventuellement appel fichier ensemble URLncessaires ilITIOR|(; un pourmodifi dynamiquement I tilisationhorslignedelpplicationFl. enretour er /loqii,j5p page sitedoitavoirlttribut Chaque du la version celleci. de fAttSlC(. manifest dansl narqueurhtml.

E Persistance

Lsrequtes effectuent lide d une s

E Utilisationsans
reseau

'1.0','tocild0c{nnt dtsopeihhhs( dofln0m! , <htlrl ! t o | 9 ' , 5 l0 4 L ? , r ! i 2t t 4 maiiiest= /ccie,l]ilifest'> {

l o ! o . p ro f f l i n e , p n q q

Celapeut tre utilis avecdesURL partiells, pourremplacer uneseule en par foistoutes images, exemple. les

par UnWorkerpeuttreinterrompu son Un scriptpeutadapter compo. Cela la page maitre.en invoquantsa mtementsuivantI tatdu terminal. !cripiYjquefy.js se dtermine l aide de la variable thodeterninateO. Il peutgalement navigator.online. La modification se suicideren invoquantla fonction des de ce statutdclnche vnements nslWorkerScope.closeO. jnses/ jpg line. iniqes/off Le Worker peut accder l'objet navigtoi pour obtenirdesinformaCetteapproche essentiellement Oody jrer updih0ilire( est oiorl )' dexcutionet tions sur son contexte pourpermettre hofs faite uneutiltsation o f i l i m r u p d d t e on f ( l ' > Ii fe importerdesscripts avecla lonction iignetnonpourrduire traficrseau le importscripts0. sur le sefveur. jt Comme cettefonctjonnl n estpas inde Commela moindreeffeur.isqued Combinavecl utilisation la persis (cas iPhone <3.2ou possible de toujoursprsente des validerl'utilisation horslignede votre tance, estalorsparfaitement il < 2.0), estjudicieux depas il ne pplication, estprfrable rdiger proposer application fonction Android il de web une des sur un scriptencharge produireceffchier nantsans de fseau, enproposantdes sppuye. la prsence Workers, tout mais de les exploiterpour optimiser Dsmta-informations les pages calculs, recherches, extractions dans des des lhpplication. peuvent I indjquer ils fautplacer URL s NETVIoRKFALLBACK. ou dela pa8edans lademande Cescriptpeuttreexcut sur 1eserveur garden cache. et
t cacftt lftsT

Pour dverminr versionhors la ligne,conme lapplication interroge n plus le srveur, faut ajouterdesou il Lobjetwindows. tils en Javascript. alorsde applictionCachepermt gnrer traces pourchaque ds tat.
v = ipp{acheiift 0r.imliciij0iCicl'e;

!0webworku,

lE Dio*.,

rase ippliche.UliCACt0: = 0 // !lC^Crt0 fetu ltcltlll0i ri5eipp{iche.l0lti Itt = I // feirfl lotl i {se ipche.{lltCUnGr // [llf{|(llt= 2 reh 'CNtCUlt i = car pt0ache.!0|lNt0^0llGr // lolllt00lrc3 rirM 00lliL0l0ll i = 5 .isapp0clre.!P0^itRt^0I| // !t0TtRi0r 'LJP0Ttlt0i mlfl] i = ci!eappCicie.0BS0ttltr // 0l50ltTt 5 ruturi'0BS0ttTt'i 'Uno CClllsllTLls retum ;

Un l/eblvo.ker est un traitementJaqri vascript fonctionne tchedefond, en pouvojrintervenir directementsur sans depuis I intrface utilisateur, disponible Android2.0.Sonfle st dobtenirdes depuisle rseau de le et inlormations signaler l lnterfaceutiiisateurpour une Typiquement, un misejour synchrone. les Ajax Workerutilise tchnologies pour web,n communiquer un serveur avec HTTP, XML ou JSON.

gestiondu Nousnavonspascouvertla sonet de Ia vidoqui sont notresens desfonctionnalits trivials.

d Afindbptimiserle traficfseau une octet appiication web mobil(chaque jl d cotechr), estenvisageableexploitl propose Coogle, par l extension Apache, permttant retravailler fichirsCSS. les de HTML,Javascript. et JPEG PNGavant leursdifiusions l rsealr Mais sur L8l. effectues attention manipulations aux ache,manifest. Pour crerun Wo.kef.il faut l ini- vis vis du fichier des Certains filtrescombinent fichiers. tialiser avecun fichierjavascript.Ce les modifient encrent nouveauxou des dansun environnent dernier fonctionn URLde toutes pages. les jndpendant la page ayant autonomq de dclench traitement. appelen le Un des Unxcllent travailderecensement pourrecevoirles spcificits tlphones effectu retourdoittrajout est ds du notifi cations Worker. par Peter-Paul le Koch.En consultant voustrou site$'wwquifks ode.ofg. . llrrylorhr neN [0fkef('ry_xter.js')i d sur verez beaucoup informations les = i!rcti0i(evst) rJ140rlf .onnessise 1nodles. capacits ditrrents des
{ b k x l e r i ( " C i l l d c b yt l r o t t r l V " ) ! l;

sur La fonction dclfe onmessag invoqie lorsque Worker le appelle sa sera Pourdemander l'adapiation cache fonction du postltlessage0. mme, est il De la enJavascript, invoquer mthode possibl il faut au dnvoyer message Worker un updateO. la mthode instancedu surl avec mme transitent aprs Worker. messages Les rindM.pDlitstioft ch.!pditg0 ; avoirtconvertis JSON. en

l;

lll Packagingdes web applications

pas d ne Les utilisateurs Android savent qu suf de toujours il estpossible placer une le bureau signetvers appljcation un dsirent galement web. entfeprises Les Android" sur la avoirune. application i .s e i i ( a t p c ec f t a t = 5r i i d o r . a p p l i c i t i 0 i.h c f u avecsa bellicne Un Worker peut utiliser les fbnc- placde march, ur0trrRt^0r) permettant leffigie de la marque. coup,on se Du du tionsde gestion temps, { prio retrouve ds // lemde avec milliers applications, d appciclre.sftpticl'd)j Ie ciclre un de dclenchef traitement qe ar,rtant de nomsde crarTimeout( dique(setTimeoutO. ), pratiquement ) setlntervalO et crearlnterval()).

et nettoyer caches applications les des sans librefainsidsressources, sup primerlesapplications typeweb(ci. de Illusrration 3).

vous pouf1pplication installe, 200Kjo de droit uneicne, lbsenc Ia avez et barred navigalion unapplication qui se met jour en mmetmpsque

lERm.i*e

3: Effanenl du 6che

un Il est t.s faciled pfoPoser appljcation Androidpour intgrerun web. I1 est alors possible application spcifique, suppride davoiruneicn d un merla barfedebouton, olTfir accs pags dansl menu. difct certines web Ko En quelques votf appllcation dans une application est encapsule pouvant sur trepublie une standard, place march. de exjsdpplications Desgnrateurs tent. commef initiative ( MobrleSite pa. S,,rorfcuts " propose getjf.co. [91 Ilsumt dentrefuneURLet unicne pourgnrer applictio une

Si vous avzbsoind aues accs au tlphone,librvousd utillserune pourajouter unnou similaif approche leJavascript velobjetaccessible depuis permettre appli aux Majscomment 1l cationsweb d'interagirplus finement despages. faudraalofsle poftr sur plateforms. simpl Une initiatives lsdiffrentes le Plusieufs avec tlphone? (PhoneGap, lign Javapermetde marier les deux open source sontproposes Elles RhoMobile Tranium Mobile). ou consistent touts tendreles fonc w f r prsnt dans a p p r / i e ( . i d d Jiip t lsn t e afc e ( n y f i p p e r , tionnalits Javscript du un page, pr l ajout d un rv.apper Ces danslespace availdela page. de une Cetafticlevousa pfsent apont wfappers t portssur diffrents proche dvloppemcnl applications des de permettantune porta cosystmes. Il dlaisse. st entre Android, sousAndroidsouvnt bilit des applications p.frabl pourtantconomlqument Plmet Symbian, iPhon. Blackberry. webquune ne il Mobile.Bienntend, lut de r-diger pplication Windows sont native. Lesrticences plateforme, caf appliction les v.ifiersuf chaque que plus thofiqus subjectives ou la nlarge.ceftaineslonclionnalits Il l'fet relles.y agalemnt CVquijoue. ou ne sontpasprsentes lonctionnent lbna d Il estplussduisant jndiquerque difremment. prticiplaralisationneapplication d trs native Phonecap smb]e option une qu Android uneapplicationweb [10j Pour une intressnle. crer application HTMLs.Nousesprons vosavoiffait il web enrichie, suffit dajouterune changr avis quevous ludirez sans d t bibliothque un projetAndrojdcls priori cstechnologies. r une activitqul siqueide dclarer la et hrilede DroidGap d initialiser pagde garde. I URLpointesur une Si il le .essource locale. iautplacef fichier phonesap.js index.html dansle et Ill hup://mobiwebapp.eul du fpeftoire sets/wv,rn proJet. /as I2l https://apps.mozillalabs.com/ flfencer vouspouvz dircctement Sinon, unIJRLdistante. I3l hup://www.wobile.r. nthemobileweb.com/ [4] http://leaf tag/vrewporl I5l http://net.tutsplus.com/tutorials/ 5 and html csstcchniques/html youll css3 thetechniques soon_ be s1ng/ g 1 6h t t p : / / d e v . w 3 . o f/ h t m l 5 / l webslorag/ l7l http://wwwwhatwg.orglspecs/ web'apps/currenlwork/#omine [8] http://code.googl.com/intl/f. lR/speed/page-speed/ [9]http://dve]oper.getjar.com/ Sile Shortcuts university/Mobil l10lhttp://wwwphonegap.com

pas gnra public App Nedoutons qued autrs 0rojdhp dass exterds pour diffrents { teurs sefontproposs pourajoutef mYffide avec options tlphons, ds p!licr0id0nCf dlesavedlisiiiestaie) eaie(8!f di avec faccourclsvers des desmenus 1 pages siteou porpaftagr du irentes s p e r , o i sfi t e ( s w d l N h n c e s i t e ) ! { unepage avec autfesviaune'mail.un d d s u p e o.ildfl l ( f i l e : / / h r d r 0 i s s t / r SMS. Twitter, etc ont applications lgres lvantage Cs p.atiquement rien de ne consommef Elles sur le tlphone. nont doncpasde utilisateur raison tresupprimesparI d lorsquil dslrefaire de la placepour une beucoup tlcharge. application pas plussympathique. nepensons Nous tf quuneapplicationpourobjectifd a la prmif tresacfifie

l activit enchoisissant et Endclarant vos a!'ez ralis uneapplicauneicne. le intgre dans tlphone. tionwebplus la camra. Ellea accs lcclromtre, aux au les contcts, statut du rsu. cation lechnologies notifi d diffrentes (a1erte, rmation, beep vibration) et confi En du proposeilleurs option etauxcarctristiqus !lphone. ne Android d pour 90 Kio pourle fichierAPKet moinsde I menude paramtrage dans