Anda di halaman 1dari 57

Rapport de stage

Cration dapplications mobiles multiplateformes


Vers une optimisation du dveloppement des programmes informatiques

Stagiaire : Jos Martins DUT Informatique Anne spciale 2009-2010

Tuteur : Sylvain Jubertie Matre de Confrences - LIFO - Orlans

Table des matires


1 Introduction : dveloppement dapplications sur plateformes mobiles 1.1 Le Laboratoire dInformatique Fondamentale dOrleans . . . . . . . . . . . 1.2 Dveloppement dapplications mobiles multiplateformes, tat des lieux . . 1.2.1 Etude du march des appareils et des applications mobiles . . . . . 1.2.2 Le dveloppement dapplications informatiques mobiles aujourdhui 1.3 Les objectifs dnis pour cette tude : un dveloppement multiplateforme 2 Analyse des mthodes de dveloppement pour Android et iPhone 2.1 Android : la plateforme Open Source mobile . . . . . . . . . . . . . . . 2.1.1 La tablette Archos IT5 . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Installation de lenvironnement de programmation . . . . . . . 2.1.3 Le dveloppement sous environnement Android . . . . . . . . . 2.1.4 Mise en oeuvre : Hello World sous Android . . . . . . . . . . . 2.2 Le iPhone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Les caractristiques techniques du iPhone . . . . . . . . . . . . 2.2.2 Installation de lenvironnement de programmation . . . . . . . 2.2.3 Le dveloppement sous environnement iPhone . . . . . . . . . . 2.2.4 Premires lignes de code pour iPhone : Hello world . . . . . . . 2.3 Dnir un mode de dveloppement multiplateforme . . . . . . . . . . . 2.3.1 Intgration du C/C++ sous Android . . . . . . . . . . . . . . . 2.3.2 Intgration du C/C++ sous iPhone . . . . . . . . . . . . . . . . 2.3.3 Elments dun projet pouvant tre factoriss dans le cadre dun multiplateforme . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.4 Factorisation du code mtier entre lAndroid et le iPhone . . . 3 Dveloppement dapplications multiplateformes Android/iPhone 3.1 Etudes des performances en 2D et 3D de lArchos IT 5 et de liPhone 3.1.1 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Ralisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3 Rsultats obtenus . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Un projet multiplateforme avec code natif : une calculatrice . . . . . 3.2.1 Analyse et mthodologie applique . . . . . . . . . . . . . . . 3.2.2 Ralisation du projet . . . . . . . . . . . . . . . . . . . . . . . 3.2.3 Retours dexpriences . . . . . . . . . . . . . . . . . . . . . . 3.3 Utilisation des instructions NEON . . . . . . . . . . . . . . . . . . . 3.3.1 Lunit vectorielle NEON . . . . . . . . . . . . . . . . . . . . 3.3.2 Exemple de mise en oeuvre sur les deux plateformes . . . . . 3.3.3 Les problmes et limitations rencontrs . . . . . . . . . . . . . 3.4 Mthode de dveloppement multiplateforme : un premier bilan . . . 4 4 6 6 8 10 12 12 12 13 13 15 17 17 17 18 20 24 25 26 27 28 30 30 30 31 32 33 33 33 37 37 37 38 39 39

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dveloppement . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

4 Des 4.1 4.2 4.3

objectifs aux ralisations : retours dexpriences et bilan Lapprentissage technique et professionnel : 10 semaines de formation intensive . . . . Apprendre se connaitre : un bilan personnel encourageant . . . . . . . . . . . . . . . Savoir conclure 10 semaines de stage . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41 41 42 43 44 46 48 49 51 54 55

A Glossaire B Moteur de calcul en code natif pour le projet calculatrice C Prsentation des plateformes de tlchargement lgal pour Android et iPhone D Aide mmoire pour lObjective C E Installer une chaine doutils pour dvelopper sous Android avec Linux F Installer le SDK iPhone pour un ordinateur sous Mac OS G Bibliographie et liens

Remerciements
Je tenais remercier lensemble des membres de lquipe enseignante de lIUT Informatique dOrlans qui ont pris le temps du partage. Cette montre l ne marque pas les heures de la mme faon que celle de notre quotidien, elle ncessite patience et rptition. Je tiens remercier tout particulirement M. Sylvain Jubertie, membre de lquipe Paralllisme Ralit virtuelle et Vrication (PRV) du Laboratoire Informatique Fondamentale dOrlans (LIFO). Son tutorat durant mon stage ma permis de naliser lensemble des objectifs que nous nous tions xs. Un merci tout particulier pour Mme Sylvie Haouy-Maure, le MacBook Pro que vous mavez prt ma permis de raliser la deuxime partie de mon stage dans de bonnes conditions.

Chapitre 1

Introduction : dveloppement dapplications sur plateformes mobiles


Le DUT (Diplme Universitaire Technologique) en Informatique est une formation permettant dacqurir un diplme de niveau Bac + 2 prparant aux mtiers de linformatique. LIUT (Institut Universitaire et Technologique) dispense traditionnellement ce cursus en 2 ans. Elle propose, dans le cadre de lAnne Spciale, de le suivre en 1 an pour les tudiants titulaires dun Bac + 2 (dune autre lire) qui souhaitent se rorienter. Compos dune priode de cours magistraux et de travaux dirigs sur 10 mois, le DUT se conclut par 10 semaines de mise en pratique des acquis au travers dun stage en situation professionnelle. Ce stage est donc un moment privilgi qui va me permettre : - dvaluer ma capacit tenir un poste de travail dans le domaine informatique en terme de connaissances, dadaptation et de ractivit. - de valider mon orientation dans ce domaine, en testant une nouvelle situation professionnelle. Les enseignants de lIUT sont, pour une grande majorit dentre eux, chercheurs au sein du laboratoire dinformatique de lUniversit dOrlans, le LIFO (Laboratoire Informatique de Recherche Fondamentale). Souhaitant poursuivre un cursus universitaire jai voulu raliser mon stage dans cette structure. Aussi aprs discussion avec lun dentres-eux, M. Sylvain Jubertie, jai pu intgrer le LIFO pour y raliser une tude sur le dveloppement dapplications informatiques mobiles. Ce rapport de stage prsente cette tude, en 4 points. Dans un premier temps jexpliquerai ce quest le LIFO, le dveloppement des applications mobiles et lintrt de cette tude au sein du laboratoire de recherche. Dans un deuxime temps je dcrirai les mthodes actuelles de dveloppement sur les deux plateformes mobiles phares que sont Android et le iPhone. Je mettrai ensuite en place les moyens techniques pour dvelopper ecacement en multiplateforme avec une prsentation des applications ralises pendant le stage. Enn je conclurai sur les apports, titre professionnel et personnel, de cette mise en situation pratique aprs 10 mois denseignement.

1.1

Le Laboratoire dInformatique Fondamentale dOrleans

Situ au coeur du campus universitaire dOrleans le LIFO(gure 1.1 page 5) est un laboratoire de recherche fondamentale en informatique cre en 1987. Il a t reconnu par le Ministre de la Recherche comme Equipe dAccueil dans le cadre du programme quadriennal de dveloppement de la recherche 2008-2011. Ce contrat a pour objectif de dvelopper un secteur de recherche de haut niveau, et, de construire un ple scientique vivant au plan rgional et europen. En tant ququipe daccueil il intgre une quipe denseignants chercheurs qui travaillent dans le domaine des sciences et de lingnierie informatique. 4

Figure 1.1 Le LIFO Le LIFO possde un certain nombre de moyens techniques : - des stations de travail - une grappe de PC haute performance relie un rseau en Gigabit. - un mur dimage compltement ddi - de trs grandes bases de donnes (notamment gographiques) Le LIFO cest aussi des partenariats nationaux et internationaux : - en France, avec lInstitut National Recherche Informatique et Automatique (INRIA), le Commissariat lEnergie Atomique (CEA) - et dans le monde, avec lEcole Polytechnique de Montreal, lUniversit Technique de Vienne (Autriche), de Beira Interior (Portugal), de Tokyo (Japon) et de Warwik (Grande Bretagne) Le laboratoire est constitu de 4 quipes : - lquipe Contraintes et apprentissages (CA) qui sintresse la smantique et lapprentissage des rgles dans un formalisme relationnel comme, par exemple, la mise au point de programmes dans le cadre de la Programmation par Contraintes, - lquipe Graphes et Algorithmes (GA) qui travaille sur les graphes, leurs dcompositions, leurs particularits, leurs modles de calculs, - lquipe Scurit et Distribution des Systmes (SDS) qui tudie les problmes de scurit, daccs, et de tolrances aux pannes lors de la mise en place de grands systmes dinformation, - lquipe Paralllisme et Ralit virtuelle et Vrication de systme (PRV) qui eectue des travaux lis aux dveloppements de langages, logiciels, bibliothques pour la programmation parallle et distribue. Les domaines dapplications sont la ralit virtuelle, les bases de donnes, ou encore le calcul scientique. Cest au sein de cette dernire quipe que jai eectu mon stage pendant une dure de 10 semaines.

Figure 1.2 Zenith dOrleans - Modlisation 3D en temps rel - Equipe PRV Photographie extraite de la page personnelle du LIFO dEmmanuel Melin

1.2

Dveloppement dapplications mobiles multiplateformes, tat des lieux

Imaginons une application informatique, par exemple un jeu vido. Lditeur souhaitant maximiser son march diusera sa production sur le plus de machines possibles. Cependant, et limage du march des consoles de jeu de salon, plusieurs machines aux architectures pourtant assez similaires, nacceptent pas une simple importation du code dorigine. Il faudra souvent reprogrammer une partie du logiciel, voire son intgralit. En termes de temps, de moyens humains, et plus simplement dintelligence ce nest pas raisonnable. Cette tude est galement motive par lexplosion du march informatique de plus en plus nomade et embarqu. Enn du point de vue de la recherche informatique le dveloppement multiplateforme cest aussi des enjeux en terme de performance de calcul, dnergie, dadaptation et de modlisation des projets (en terme humains, matriels etc.).

1.2.1

Etude du march des appareils et des applications mobiles

Les acteurs conomiques sur le march des appareils mobiles sont nombreux : Apple, Google via Android son systme dexploitation, Blackberry, Samsung, LG ou encore Nokia avec Symbian. Matriellement, nos appareils nomades (tlphone, PDA) intgrent presque tous une architecture base sur les processeurs dvelopps par la socit ARM (Advanced RISC Machines). Ce processeur plusieurs avantages en termes de puissance, de cot nancier, dconomie dnergie. Pourtant malgr une conception similaire, du processeur jusqu lcran, lensemble des constructeurs revendiquent des dirences, par exemple, liPhone 4 serait plus rapide, le dernier Blackberry plus sr, les NSeries de Nokia seraient plus proches des besoins des professionnels. Il est vrai que le march est porteur et que celui qui se dmarquera bnciera de lengouement des clients, mme si les dirences ne semblent que commerciales. Il est important de faire la distinction, en termes de march, entre les tlphones portables, les smartphones, les tablettes. Un smartphone, littralement "tlphone intelligent", est un terme utilis pour dsigner les tlphones volus, qui possdent des fonctions similaires celles des assistants personnels. Certains peuvent lire des vidos, des MP3 et se voir ajouter des programmes spciques. 6

En 2009 le tlphone mobile en France (tlphone et smartphone confondu) cest 1 : - 58 millions de tlphones portables en France - 90% de taux de pntration (9 personnes sur 10 ont un mobile) - 4,7 milliards deuros de chire daaire Dans le monde, la mme anne, les ventes se sont leves 2 : - 1,16 milliards dexemplaires - dont 456 millions pour le continent asiatique (120 millions uniquement au Japon) Le iPhone, toutes versions confondues reprsente lui seul 42 millions dexemplaires vendus depuis sa mise sur le march en 2007, le Blackberry prs de 28 millions, les tlphones sous Android prs de 8,5 millions 3 . Sur le march spcique du smartphone, Blackberry est historiquement premier avec 36% de parts de march, Android reprsente 28% et Apple 21%. Dans des pays comme le Japon, le iPhone reprsente 72% des ventes de smartphone en 2009. Les tablettes ont les mmes capacits hormis le fait de pouvoir tlphoner et possdent gnralement des crans plus grands. Elles sont plus orientes vers un usage pour la vido, les images et la navigation sur Internet. Larrive de la tablette iPad de Apple bouleverse encore un peu plus la donne sur ce march avec 3 millions dexemplaires vendus en moins de 80 jours 4 . Dautres fabricants esprent proter de ce phnomne, notamment Archos avec ses Internet Tablet IT5/IT7 ou encore lInde qui souhaite mettre en production une tablette un prix rduit, 30 dollars. Ces chires semblent ne jamais vouloir sarrter et ce nest que le dbut dun vrai phnomne.

Figure 1.3 iPhone 4 et Ipad - Apple.com


1. 2. 3. 4. http://telecom.sia-conseil.com http://www.journaldunet.com/cc/05_mobile/mobile_marche_mde.shtml http://www.numberof.net/ http://www.apple.com/pr/library/2010/06/22ipad.html

Figure 1.4 Archos IT 5 - Une tablette franaise Si ces appareils servaient encore tlphoner il y a peu, ils ont bien dautres utilisations aujourdhui. La monte en puissance des processeurs les quipant, la mise disposition par les constructeurs de kits de dveloppement, le volume de pices disponibles, et louverture des plateformes de tlchargement lgal ont rendu ce march plus accessible. Les socits de dveloppement de logiciels ont intgr ces machines dans leur stratgie. Pour 2010 le chire daaires escompt pour la vente dapplications exclusivement mobiles est de 6,7 milliards deuros. Pour 2013 les prvisions sont de presque 30 milliards deuros 5 soit 2 fois le chire daaire 2009 de Renault 6 . Le march de lapplication informatique est donc en pleine volution. Le tlphone devient compagnon du quotidien et tous les acteurs du dveloppement sengagent sur ces plateformes. Google Maps, Facebook, Ebay, Need for Speed, Les Sims... tous ces succs ont dsormais leur version mobile, dveloppe spciquement pour iPhone, pour Android, pour iPad. Le dveloppement sur chaque plateforme ncessite des outils, des langages, du matriel spcique, et par consquent, sa propre quipe de dveloppement. La multiplication des appareils augmente donc les temps, la complexit, et donc les cots des projets. Ne peut-on alors rendre le portage dun jeu dune plateforme lautre moins contraignant, par exemple, en vitant au maximum le code spcique chaque appareil ?

1.2.2

Le dveloppement dapplications informatiques mobiles aujourdhui

Le dveloppement dune application informatique est dcoup en plusieurs tapes : - lidentication du besoin (par exemple la demande dun client, une part de march, une ide) - lanalyse (les moyens mettre en place, le choix du langage, la plateforme de dveloppement) - la programmation proprement dite - les tests et les corrections. - la mise sur le march - la maintenance et la mise jour Pour dvelopper un logiciel sur plusieurs plateformes certaines de ces phases sont mutualisables. Lexpression du besoin et lanalyse sont toutes deux ralises une seule fois par projet. Ce nest pas le cas de la partie programmation. En eet, une fois les deux premires tapes ralises les quipes de dveloppement se mettent au travail. Pour chaque plateforme il faut donc une quipe de programmeurs, qui ralise lintgralit du logiciel.

5. http://www.journaldunet.com/cc/05_mobile/mobile_marche_mde.shtml 6. Wikipdia

Prenons lexemple du jeu vido Need For Speed(gure 1.5) dElectronique Arts qui est prsent sur toutes les consoles et appareils mobiles actuels. Le site de lditeur 7 fait dailleurs une place importante la prsence de son jeu sur toutes les consoles et appareils daujourdhui. Il possde en interne des quipes de dveloppement pour les consoles nouvelles gnrations et PC. Il sous-traite les dveloppements sur mobiles des studios externes comme la socit londonienne Slightly Mad Studios. Les ressources humaines pour couvrir tous ces dveloppements dun mme jeu sont donc importantes. Cependant on peut penser que certaines parties de code, comme la routine de gestion des vhicules, des routes et des scores, na pas tre rcrite autant de fois que de plateformes. De plus la multiplication des lignes de programmation augmente dautant le risque derreurs dans le code du logiciel.

Figure 1.5 Le jeu Need for Speed sur PS3

Le mme sur plateforme mobile de type Android Figure 1.6 Le mme sur plateforme mobile de type Android Cette fuite en avant en terme de dveloppement est ncessaire quand de nouvelles architectures font leurs apparitions par exemple les nouvelles cartes graphiques. Mais sur des architectures similaires comme celles prsentes dans les smartphones et tablettes, le code redondant pourrait tre rendu portable et compatible dun appareil un autre. La notion de portabilit du code nest pas nouvelle. Ds sa cration en 1972 par D. Ritchie et B. W. Kernighan le langage C intgre cette particularit. Un programme crit en C en respectant la norme ANSI est portable sans modication sur nimporte quel OS ou/et architecture disposant dun compilateur C : PC sous Windows, station de travail sous UNIX. Cependant la portabilit du C est limite, elle ncessite de recompiler le code source en C pour chaque plateforme ce qui implique la cration dun programme particulier pour chaque architecture.

7. http://www.needforspeed.com

Le Java a t cr en 1992 et corrige le problme de la recompilation. Ce langage sappuie sur lide dintroduire une machine virtuelle (Java Virtual Machine) spcique chaque architecture qui excute un code gnrique. Le code est compil une seule fois, cependant cette approche ncessite la prsence dune JVM spcique larchitecture. Par exemple un code Java compil sexcute indiremment sur Linux ou Windows, qui disposent chacun de leur JVM, mais pas sur les plateformes mobiles dApple, qui nen disposent pas. Les constructeurs de plateformes mobiles fournissent des kits de dveloppement appel SDK (Software Development Kit) qui dnissent la ligne directrice pour le dveloppement dapplications. Ainsi Android a choisi de raliser un SDK bas sur le langage Java. Dans le cadre du iPhone le SDK oblige le dveloppeur programmer en Objective C. Ces choix sexpliquent par la volont de rendre les accs la machine plus simple mais aussi de scuriser sa plateforme. En eet en terme de concurrence il est indispensable de conserver le plus possible lexclusivit de sa technologie pour forcer un dveloppement spcique, voir unique dune application. Cest une force de vente relle qui amplie la place dun appareil par rapport un autre. Dans le cadre de ce stage nous avons voulu dmontrer quil tait possible de repenser le dveloppement dapplications en dnissant : - les facteurs communs chacune de ces machines (du point de vue matriel et logiciel) - en choisissant une mthode de programmation la plus portable possible avec lutilisation dun langage natif de type C ou C++ - en trouvant des solutions de prises en main des SDK pour intgrer du code natif.

1.3

Les objectifs dnis pour cette tude : un dveloppement multiplateforme

En programmant avec le langage C, le dveloppement informatique devrait ressembler un code unique et un compilateur qui crerait un excutable dirent pour chacune des plateformes(gure 1.7 page 10).

Figure 1.7 Gnration dun programme partir dun code C

10

Figure 1.8 Gnration dun programme partir dun code Java Pour un projet en Java le code est ralis une fois et excut sur chaque machine par un programme appel machine virtuelle (gure 1.8 page 11). Le Java nest pas une technologie disponible sur le iPhone pour des raisons historiques, lObjective C tant le langage de programmation de rfrence chez Apple, mais galement pour des raisons de contrle et de limitation des applications disponibles sur leur plateforme. En eet, la prsence dune JVM sur leurs plateformes, introduirait la possibilit de lancer des applications tierces. Le C nest pas disponible de base sur lOS Android. Le choix de Google sest port sur le Java pour des raisons douvertures aux plus grands nombres de projets et dveloppeurs. On remarque des restrictions similaires sur lensemble des plateformes mobiles. Il y a toujours une raison quelle soit technique ou commerciale qui empche dutiliser des solutions gnrales. Il faut donc concevoir une mthode qui soit transversale en sappuyant sur les techniques dj existantes, et qui soit exible pour que des adaptations mineures rendent lexcution du programme possible sur toutes plateformes. Le LIFO, au sein de lquipe PRV, eectue des recherches sur les calculs parallles et distribus. Dans le cadre de cette tude, les mthodes alternatives de dveloppement pourraient tre appliques aux plateformes mobiles pour mobiliser leurs processeurs, avec dautres plateformes, sur la base dun mme algorithme mathmatique et donc un mme code. Pour raliser ces objectifs, sur les 10 semaines de ltude jai eu ma disposition : - un Mac Book Pro - un tablette Archos IT 5 - des PC sous environnement Linux - de la documentation technique - un accs Internet trs rapide. Le cahier des charges respecter tait le suivant : - faire des tests de programmation sur la tablette Archos IT5 et liPhone et sur PC/Mac - dnir une mthode de travail permettant de dvelopper en dehors des outils existants (SDK) - faire un projet multiplateforme A - raliser les documents, dont ce rapport, avec L TEX.

11

Chapitre 2

Analyse des mthodes de dveloppement pour Android et iPhone


Avec une prvision de vente pour 2012 de plus de 150 millions dexemplaires, les smartphones Android ou iPhone sont les acteurs principaux du march. Nous avons donc port notre tude sur ces deux plateformes en particulier. En prenant le temps de lanalyse de chacune de ces plateformes nous mettrons en vidence les particularits de chaque appareil, les mthodes de dveloppements traditionnels en suivant les SDK avec un exemple. Puis dans un dernier point nous exposerons une mthode plus gnraliste de dveloppement rendant le code portable sur les 2 appareils concurrents.

2.1

Android : la plateforme Open Source mobile

Le LIFO a mis ma disposition tout au long de ces 10 semaines une tablette Archos IT 5. Cette tablette est de conception franaise et Archos possde, depuis un certain temps dj, une bonne exprience des appareils mobiles, notamment les lecteurs MP3. Elle a la particularit dtre installe avec un systme dexploitation Android qui a t dvelopp par Google.

2.1.1

La tablette Archos IT5

LIT5(gure 1.4) est quipe dun processeur ARM Cortex A8, en 32 bits avec une frquence dhorloge 800 MHz. Elle possde 256 mo de ram, un DSP (digital signal processor) additionnel cadenc 430 MHz. Elle est quipe de base avec un disque dur de 160 500 gigas. Elle dispose dun cran tactile de 4,8 pouces avec une rsolution de 800*480 pixels. Elle est prsente comme un ordinateur personnel miniature, car elle embarque les fonctionnalits que lon retrouve dans nos PC : - Wi-Fi intgr - ports USB disponibles via un adaptateur - GPS prsent - lecteur de carte mmoire - tuner tlvision par adaptateur. LIT5 est capable de lire des vidos au format Mpeg 4 HD (720p) et dcode facilement les chiers audios MP3. Grce son disque dur elle fait galement oce denregistreur audio et vido. Lappareil photo nest pas disponible, lArchos IT5 possde pourtant un programme de visualisation dimage.

12

2.1.2

Installation de lenvironnement de programmation

LIT5 est livre sous Android Cupcake 1.5. Elle a t mise jour (1.6 Donuts). Ce nommage est particulier Google qui donne chacune de ces versions dOS un nom de gteau, Eclair pour la version 2.0 par exemple. Chaque nouvelle version amliore les outils de dveloppement et apporte des fonctionnalits supplmentaires. Le tlchargement du SDK sur le site ociel est la premire tape pour dvelopper sur les plateformes sous Android 1 . Il faut ensuite se munir de lenvironnement de dveloppement (IDE : Integrated Development Environment) Eclipse 2 , cr par IBM. Les ordinateurs sous Windows, Linux ou Mac OS peuvent accueillir lensemble de cette chaine doutils, Google et IBM ayant fourni leurs outils SDK sur chacun de ces OS (Operating System, systme dexploitation). Pour tester nos projets il faut utiliser un simulateur de tlphone Android qui nest pas intgr Eclipse. Il faut linstaller et informer Eclipse de son existence pour quil traite lexcution du projet au travers de celui-ci, pour cela il convient de : - dmarrer Eclipse : - dans le menu Help slectionner Install New Software - cliquer sur Add site - une barre de navigation souvre - inscrire https ://dl-ssl.google.com/android/eclipse/ - le tlchargement sexcute et le plugin sinstalle. - dans la page suivante le plugin apparaitra avec linscription Developer Tools - aprs lavoir coch il faut cliquer sur Next - aprs lecture de la licence Android et acceptation, selectionner Finish - enn redmarrer Eclipse. Nous venons dinstaller Android Development Tools (ADT) qui est un plugin pour Eclipse IDE pour linstallation du simulateur et bien plus. Il tend la capacit de lIDE pour lOS de Google, permettant de compiler, dexcuter du code Android, de crer des interfaces graphiques et dexporter le tout sign pour une mise en vente sur lAndroid Market. Lenvironnement de travail est maintenant prt lemploi.

2.1.3

Le dveloppement sous environnement Android

Le langage de programmation utilis dans le cadre de projet Android est le Java qui est trs rpandu dans les dveloppements informatiques actuels.. En ouvrant un premier projet sous Eclipse un certain nombre de chiers sont dj prsents sans mme quune seule ligne de code nait t crite. On y trouve (gure 2.2 page 15) : - un dossier src qui regroupe toutes les classes Java du projet - un dossier Android Library avec toutes les bibliothques utilises - un dossier assets qui contient des donnes de type licence qui seront charges en mme temps que lapplication lors de lintgration de celle-ci dans le tlphone - un dossier res pour toutes les ressources annexes : images, chiers XML, son etc... - le chier AndroidManifest.xml dnit le comportement de lapplication au systme Android. Ce chier dnit par exemple, le nom, licone (par dfaut drawable/icon.png), le thme, la version minimale du systme ncessaire lexcution de lapplication, les activits, les services.

1. http://developer.android.com/sdk/index.html 2. http://www.eclipse.org/

13

Figure 2.1 MVC http://www.symfony-project.org/images/jobeet/1_2/04/mvc.png Le dveloppement des applications sous Android est associ la notion de modle-vue-contrleur (MVC, gure 2.1 page 14). Lapproche MVC vise dcomposer un programme en trois parties : - la vue constitue la couche graphique, intgrant les boutons, les zones de textes, les images - le modle est la reprsentation code du comportement dun bouton par exemple - le contrleur agit comme une liaison entre la vue et le modle. Ce dcoupage permet de simplier le dveloppement en isolant le code mtier (le modle), de linterface graphique (vue) et de leurs intractions (contrleur). Ainsi la modication de lun nimpose pas la rcriture des autres optimisant ainsi la ralisation et la maintenance des projets. Avec larrive des plateformes mobiles ce type de programmation est devenue un standard destin faciliter la conception. Il permet de distinguer la notion dinterface graphique, qui peut tre par exemple dlgue un graphiste, des interactions (appui sur un bouton etc.) et des actions lies aprs intervention de lutilisateur. Les interfaces graphiques sont ralises laide de chiers XML (eXtensible Markup Language). Le XML est un langage informatique qui sert essentiellement stocker/transfrer des donnes de type texte structures en champs arborescents. Ce langage est quali dextensible car il permet lutilisateur de dnir des marqueurs (balises) qui facilitent le parcours au sein du chier et donc la lecture de linformation. On dnira, par exemple un bouton, et ses proprits dans une balise Monpremierbouton. Lors de son utilisation on appellera le chier XML avec comme marqueur Monpremierbouton, lensemble des informations ncessaires se trouveront alors la suite. Ce langage est couramment utilis aujourdhui, et son apprentissage est ais.

// Exemple de code XML <textView a n d r o i d : t e x t ="@ s t r i n g / h e l l o " a n d r o i d : t e x t C o l o r ="@ c o l o r / w h i t e " a n d r o i d : t e x t S i z e ="@dimen/ dim_hello " />

14

Figure 2.2 Arborescence dun projet Android sous Eclipse Pour bien comprendre lensemble des tapes de dveloppement dun programme sous OS Android nous allons dtailler un exemple simple et traditionnel : le Hello World.

2.1.4

Mise en oeuvre : Hello World sous Android

Ce programme consiste acher le message Hello World lcran. Pour ce faire, commenons par crer le projet dans lenvironnement Eclipse pour cela il faut : - cliquer sur File > New > Other > Android Project - une boite de dialogue souvre : - inscrire textitHello World dans le champ project name - cocher Create new project in workspace - choisir Android 1.6 comme Target - donner un nom lapplication, celui-ci sera ach sous licne de lapplication - donner un nom au package Java (ex : com.unnom.android) - donner un nom lActivity (le point dentre dans le code) - dnir le SDK minimum utiliser pour ce programme (dans notre cas 1.6) - cliquer sur Finish.

Figure 2.3 Sous Eclipse - cration dune string XML Pour changer la valeur du texte acher, ici Hello World , il faut, dans larborescence du projet(gure 2.2) : - ouvrir le chier strings.xml - une fentre (Android Ressource) va souvrir (gure 2.3 page 15) - changer la valeur de la chaine hello - enregistrer la modication.

15

An dacher la chaine il faut dnir lcran un espace susant pour cela, dans notre cas vingt pixels 3 susent. Pour cela il faut crer un chier dimensions.xml (en slectionnant loption Add) dans lequel inscrire le couple :
" dim_hello " / " 20 px "

Pour nir il faut sauvegarder : Save. Toutes les ressources sont maintenant prtes. Il faut ajouter celles-ci linterface graphique. Aprs avoir cliqu sur main.xml lditeur layout sache. Celui-ci permet de crer les interfaces qui vont servir de conteneur notre texte. Nous allons directement taper le code XML suivant et le sauvegarder :
<?xml v e r s i o n ="1.0" e n c o d i n g="u t f 8"?> <l i n e a r L a y o u t xmlns : a n d r o i d="h t t p : / / schemas . a n d r o i d . com/ apk / r e s / a n d r o i d " a n d r o i d : layout_width="wrap_content " a n d r o i d : l a y o u t _ h e i g h t="wrap_content " a n d r o i d : l a y o u t _ g r a v i t y=" c e n t e r _ v e r t i c a l | c e n t e r _ h o r i z o n t a l " a n d r o i d : o r i e n t a t i o n =" v e r t i c a l "> <textView a n d r o i d : layout_width="wrap_content " a n d r o i d : l a y o u t _ h e i g h t="wrap_content " a n d r o i d : l a y o u t _ g r a v i t y=" c e n t e r _ h o r i z o n t a l " a n d r o i d : t e x t ="@ s t r i n g / h e l l o " a n d r o i d : t e x t C o l o r ="@ c o l o r / w h i t e " a n d r o i d : t e x t S i z e ="@dimen/ dim_hello " /> </ l i n e a r L a y o u t >

Linterface graphique tant maintenant congure, il nous reste crer le programme Java permettant de lacher. Il sut de se rendre dans HelloWorld.java. Ce chier contient le code suivant :
package mettez i c i v o t r e package ; import a n d r o i d . app . A c t i v i t y ; import a n d r o i d . o s . Bundle ; p u b l i c c l a s s HelloWorld e x t e n d s A c t i v i t y { / C a l l e d when t h e a c t i v i t y i s f i r s t c r e a t e d . / @Override p u b l i c v o i d onCreate ( Bundle s a v e d I n s t a n c e S t a t e ) { s u p e r . onCreate ( s a v e d I n s t a n c e S t a t e ) ; setContentView (R. l a y o u t . main ) ; } }

Lobjet HelloWorld hrite dActivity ce qui permet dacher une interface graphique pour lutilisateur. La mise en place de notre interface graphique seectue simplement en rednissant la mthode onCreate. On applique la vue cre laide de la mthode setContentView qui prend en paramtre notre layout. Notre code pour le Hello World est prt, il ne reste plus qu gnrer le paquet. Pour cela il sut de cliquer sur licne Build & Run prsent dans la barre. En utilisant les outils fournis avec le SDK, et en restant dans le cadre habituel dun projet Android avec lutilisation de chiers XML et dEclipse, le dveloppement est facilit car on ne code par les interfaces graphiques qui sont gnres automatiquement par le chier XML. Les outils de compilation et dexcution, ainsi que le simulateur, sont grs par Eclipse de manire transparente pour lutilisateur.

3. Nous utilisons les pixels (px) comme mesure mais dautres dimensions sont disponibles comme les pouces (inch) ou les points (pt)

16

2.2

Le iPhone

Le iPhone est un accessoire la mode mais cest un tlphone qui, technologiquement, est assez proche de ses concurrents. Le dveloppement seectue sur la base du langage Objective C(gure 2.6 page 18) avec lIDE XCode(gure 2.5 page 18) et avec lInterface Builder(gure 2.7 page 19) pour grer le MVC. Nous verrons au travers dun exemple que la syntaxe de lObjective C est assez particulire, et quun projet sous iPhone se construit autour du MVC.

2.2.1

Les caractristiques techniques du iPhone

Au coeur liPhone 4 on trouve un processeur ARM Cortex-A8 1 GHZ avec technologie Non (gure 2.4 page 17). Construit sur une architecture prouve il dispose de mmoire cache, dinstructions pour le traitement dimage (Non), dune gestion des conomies dnergie puissante.

Figure 2.4 ARM Cortex A8 Il intgre : - un tlphone GSM 3G - un GPS - une boussole numrique, - les rseaux sans-ls Wi-Fi et BlueTooth - un cran tactile dune rsolution de 320X480 pixels, triple avec la dernire gnration.

2.2.2

Installation de lenvironnement de programmation

La premire tape pour dvelopper sur cette plateforme est lachat dun ordinateur Apple, comme un MacMini ou un Imac, soit environ un investissement de 1000 euros 4 . Avec lachat dun iPhone 400 euros le budget est de minimum 1400 euros pour commencer dvelopper sur cette plateforme. Les fondateurs dApple ont favoris le dveloppement dapplications dans leurs gammes dappareils, il ny a donc pas de kit de dveloppement iPhone disponible sous Windows ou encore sous Linux. Il faut ensuite, aprs inscription obligatoire sur le site, tlcharger le SDK Apple 5 et linstaller. En lassociant lIDE XCode(gure 2.5 page 18) qui est fourni avec lOS Snow Leopard on obtient un environnement de dveloppement complet.
4. http://www.apple.com/fr/imac/design.html 5. http://www.apple.com/fr/ipad/sdk

17

Figure 2.5 Ouverture de projet Xcode

2.2.3

Le dveloppement sous environnement iPhone

Lobjective C est le premier lment de la chaine outils ncessaire la cration dapplications sous iPhone.

Figure 2.6 Objective C - Exemple de code - Sprites Ce langage est propre Apple et surtout utilis pour le dveloppement dapplications sous MAC OS ou encore dans la gamme iPhone et Ipad. Il peut cependant aussi tre utilis sous Linux ou Windows (avec un compilateur appropri sous ces plateformes). Cr par lamricain Brad Cox, au dbut des annes 80, il hrite du C et du SmallTalk, un des premiers langages objet. Il intgre de nouvelles composantes dans le cadre du dveloppement de lOS NextStep par la socit Next. Les typages les plus utiliss en Objective C portent les initiales NS car structurs comme cet OS. Ce langage a une syntaxe dirente des langages objets plus rpandus. Il ncessite un vrai investissement de la part du dveloppeur et la lecture de nombreux ouvrages pour se familiariser avec sa conception.

18

En ouvrant un nouveau projet sous Xcode loption projet pour iPhone est alors disponible. Lutilisation de lInterface Builder (gure 2.7 page 19) est fortement conseille, il est toujours prsent dans les tutoriels disponibles sur le site du constructeur. IB est un utilitaire qui permet de gnrer facilement des interfaces graphiques en quelques clics de souris. Il gnre le code associ et lintgre dans le programme.

Figure 2.7 Interface Builder sous Imac Le dveloppement des applications sous iPhone est associ la notion de MVC avec lutilisation dIB linstar des plateformes Android. Lors de la premire utilisation sous Xcode on aperoit la structuration du projet pour une application iPhone(gure 2.8 page 19). Elle est propre aux projets iPhone sous XCode. Elle regroupe lensemble des informations et contenus du projet.

Figure 2.8 Dossier de dveloppement sous Xcode pour un projet iPhone Comme nous lavons vu, lensemble de la chaine de dveloppement sous univers Mac est trs spcique et impose lutilisation de certaines ressources (Objective C, IB).

19

2.2.4

Premires lignes de code pour iPhone : Hello world

Pour mieux comprendre la construction dun projet sous cette plateforme nous allons analyser le dveloppement dun HelloWorld. Il faut dabord ouvrir un nouveau projet sous Xcode, puis choisir la plateforme iPhone et enn un projet en cliquant sur licone View-BasedApplication. Il faut nommer le projet HelloWorld. Xcode cre alors des chiers dont HelloWorldViewController.h et .m, ils constituent le contrleur de la vue. Il faut intgrer ce code cet endroit. Pour raliser un HelloWorld il va nous falloir un label o inscrire du texte, y inscrire le message, associer le label la vue, demander la vue de sacher aprs rafrachissement. Mais avant tout dnissons la cible pour dbugger : soit le simulateur, soit le iPhone (il faut possder une licence). Maintenant il faut crer un nouvel objet : - faire Files/New les/ - puis Objective C Class et UIview. Un objet de type vue vient dtre cr dans le MVC : - nommer le Mavue - lintrieur de celui-ci il faut intgrer les labels et autres boutons ncessaires au projet - ajouter le code dans MaVue.h :
@ i n t e r f a c e Mavue : UIView { I B O u t l e t UILabel monlabel ; } @end

Une classe de type view est cre et un label est intgr et gr par IB pour y associer du texte. Dans le chier Mavue.m il faut ajouter ce code :
i n i t { [ monlabel s e t T e x t :@" H e l l o world " ] ; } ( void ) d e a l l o c { [ super d e a l l o c ] ; [ monlabel r e l e a s e ] ; }

On gre ici la destruction de lobjet et de ses composantes cest--dire la libration de la mmoire quils occupent. Il faut ensuite sauver, et double cliquer sur MainWindow.xib. Cela va produire louverture de IB. Dans le menu Tools : - ouvrir Library(gure 2.9 page 21) - prendre un objet view dans la librairie - il faut lajouter dans Window qui reprsente le iPhone, il peut tre redimensionn si besoin.

20

Figure 2.9 Objet disponible dans IB pour ajouter une vue Il faut ensuite aller dans lInspecteur(gure 2.10 page 21) : - dans longlet View Identity changer le nom de la classe en Mavue. La vue cre sous IB vient dtre associe la vue implante sous Xcode.

Figure 2.10 LInspecteur sous IB

21

Il faut maintenant retourner dans Library : - choisir cette fois un objet de type Label - le dposer dans Window - relier le label monlabel (dans le code prcdemment implant) llment graphique que nous venons de positionner - cliquer sur "Mavue" dans la navigation hirarchique de nos vues(gure 2.11 page 22) - dans linspecteur se rendre dans longlet "Mavue connections". - relier(gure 2.12 page 22) en cliquant dans le rond vide ct de monlabel - glisser le tout en maintenant le clic jusquau label dans Window. - une liaison entre le code et linterface graphique(gure 2.13 page 23) vient dtre cre - sauver le chier - quitter IB

Figure 2.11 Navigation hirarchique des vues

Figure 2.12 Relier une dclaration de label son interprtation graphique sous IB

22

Figure 2.13 Rsultat dune liaison code et lment graphique sous iB Sous Xcode il faut se rendre dans HelloWorldAppDelegate .h pour importer Mavue.h et dclarer un objet de type Mavue.
#import <UIKit / UIKit . h> #import "Mavue . h" @ i n t e r f a c e HelloWorldAppDelegate : NSObject <U I A p p l i c a t i o n D e l e g a t e > { UIWindow window ; I B O u t l e t Mavue vue ; } @property ( nonatomic , r e t a i n ) I B O u t l e t UIWindow window ; @property ( nonatomic , r e t a i n ) Mavue vue ; @end

Dans HelloWorldAppDelegate .m il faut ajouter :


#import " HelloWorldAppDelegate . h" @implementation HelloWorldAppDelegate @ s y n t h e s i z e window ; @ s y n t h e s i z e vue ; ( void ) applicationDidFinishLaunching : ( UIApplication ) a p p l i c a t i o n { [ window addSubview : vue ] ; [ window makeKeyAndVisible ] ; } ( void ) d e a l l o c { [ vue r e l e a s e ] ; [ window r e l e a s e ] ; [ super d e a l l o c ] ; } @end

Une fois revenu sous IB il faut : - relier cette vue Window comme prcdemment - sauver - cliquer sur Build and Run dans Xcode. - le texte apparat lcran du simulateur. Lutilisation dIB ncessite un temps dadaptation. Pass ce dlai il facilite la cration des interfaces graphiques, notamment le placement et le dimensionnement des objets. Cest un logiciel propritaire Apple, les chiers Xib ne sont utilisables que sur Mac ou iPhone/Ipad. On ne peut donc pas simplement reprendre tout, ou une partie, du programme et lintgrer dans un environnement Android si on respecte les mthodes de dveloppement du SDK Apple. Il nous faut donc repenser nos mthodes et trouver les moyens de la factorisation du code et de son implantation sur les deux plateformes.

23

2.3

Dnir un mode de dveloppement multiplateforme

Les avantages dun mode de dveloppement multiplateforme sont nombreux : - un code est ralis une seule fois - il est facile maintenir et adapter sur une nouvelle plateforme - les quipes spcialises sur chaque plateforme sont rduites. Dans notre tude nous avons deux plateformes aux architectures similaires (gure 2.14 24) mais avec des environnements de dveloppement non compatibles(gure 2.15 ?? ). Plateforme Processeur Ecran Archos IT 5 ARM 800 Mhz 800x480 iPhone 4 ARM 1 Ghz 960x640

Figure 2.14 Lenvironnement matriel Tablette Archox IT5 et iPhone 4 Plateforme Langage de programmation IDE Interface graphique Execute du code natif Archos IT 5 Java Eclipse XML Oui via JNI iPhone 4 Objective C Xcode IB Oui

Figure 2.15 Lenvironnement logiciel Tablette Archox IT5 et iPhone 4 Le Java nest pas disponible sur le iPhone. et rciproquement lObjective C nest pas disponible sous Android. Pour permettre un dveloppement multiplateforme il faut donc trouver un autre langage qui soit exploitable sur les deux architectures. LObjective C permet dutiliser des portions de code en C/C++ en intgrant ceux-ci dans un projet iPhone. Lappel du code se fait alors nativement, en respectant la syntaxe du C/C++. De son ct Google en plus du SDK fourni un NDK (Native Development Kit) qui permet lutilisation de code en C ou C++ de manire native. Pour lutiliser il faut installer le NDK aprs lavoir tlcharg 6 . On pourrait donc dvelopper tout, ou une partie, du code en langage natif C et appeler ce code selon les besoins. Il nous faut donc dnir les mthodes pour intgrer du code natif sous Android et sous iPhone puis dterminer jusquo mutualiser le programme et extraire ainsi les parties propres chacune des plateformes qui ne pourraient tre factorisables.

6. http://developer.android.com/sdk/ndk/index.html

24

2.3.1

Intgration du C/C++ sous Android

Lutilisation du NDK ntant pas compltement supporte par Eclipse, il nous faut repenser la chaine de compilation du projet avec le NDK. Pour cela Google fourni des outils en ligne de commande comme alternative lIDE Eclipse. Nous allons dcrire, sur le principe, lutilisation des dirents outils. Cration du projet Android Nous allons aussi nous servir du SDK pour gnrer les chiers ncessaires un projet Android :
a n d r o i d c r e a t e p r o j e c t t a r g e t <target_ID> name <your_project_name> path path / t o / your / p r o j e c t a c t i v i t y <your_activity_name> package <your_package_namespace >.

Construction du projet intgrant le code natif partir de Java Nous allons utiliser linterface JNI (Java Native Interface) qui est un canal de communication utilis par le Java pour sinterfacer avec du code en C. Nous allons utiliser cette mthode sous Android pour permettre notre code Java de communiquer avec notre code en C natif. Cest le rle du NDK. Dans notre projet nous allons crer un dossier jni dans lequel nous allons placer notre code en C. Avant de lancer une compilation classique du code Java, il nous faut dabord compiler le code natif, qui sera ensuite intgr au code Java. Pour cela nous utilisons la commande ndk-build fourni par le NDK. Le code C sera alors compil sous forme dune bibliothque dynamique en .so et linterface de communication permettant dappeler le code natif partir de Java, appele aussi Wrapper, va tre cre. On la retrouve sous la forme dun chier .h inclu dans le dossier du projet. Cette premire passe ralise, nous compilons le programme avec Ant install. Le projet est alors cr aprs intgration du .so issu du code natif.

Figure 2.16 Etapes de compilation pour un projet JNI sous simulateur Android 25

Conguration et installation dun simulateur An de tester le code ralis il nous faut crer une instance dmulateur. Pour cela, on utilise la commande :
a n d r o i d c r e a t e avd n <name> t <t a r g e t I D > avec comme argument l e nom e t l e numro de l mulateur .

Il faudra avant dexcuter ce code lancer une session de cet mulateur avec la commande : emulator @name. Nous venons de dcrire lintgration dun code natif sous Android qui ncessite de prendre la main sur la procdure de compilation. Sous iPhone le code natif est plus simple mettre en oeuvre.

Figure 2.17 Une session dmulateur Android sous Linux

2.3.2

Intgration du C/C++ sous iPhone

Pour intgrer du code natif dans un projet iPhone il sut de prendre le chier .c (ou cpp quil alors renommer en .mm) et le chier .h et linsrer dans le projet sous Xcode. Dans le chier source Objective C (un chier avec lextension .m) il faut importer le .h du code natif :
// en o b j e c t i v e C : #import " ma_fonction_nativeC . h"

Puis la fonction (ou objet) peut tre alors appele avec la syntaxe traditionnelle du C ou du C++.
// en o b j e c t i v e C : ma_fonction_nativeC ( a , b ) ;

On constate que lintgration du code natif est transparente pour lutilisateur sous iPhone.

26

2.3.3

Elments dun projet pouvant tre factoriss dans le cadre dun dveloppement multiplateforme

Dans le cadre du MVC le modle est, comme nous lavons vu prcdemment, transfrable. Mais la vue et son contrleur restent typiques la plateforme o ils sexcutent. En eet la vue est constitue par un chier XML sous Android et Xib sous iPhone. Il ny a pas de concordance entre les deux, ni de conversion possible. Le chier XML ne comporte que les lments constituant la vue et leurs placements dans celle-ci. Il attribue un index chaque composante pour quelle soit ensuite utilisable dans le code proprement dit. Le chier Xib, issu de lutilisation dIB, contient lui aussi les objets graphiques, leurs styles et leurs emplacements. Mais il intgre en plus le lien avec la vue dans lequel ils doivent tre utiliss. Ce chier doit tre inclus dans le code via une dclaration de chacune de ses variables (boutons, champ texte etc.) dans un header avec un format particulier (IBOutlet). Ce nest pas le cas pour Android. Un lment graphique doit tre simplement dclar dans la classe o il va tre utilis. La gestion du comportement de ces objets est aussi dirente dune plateforme lautre. Pour le iPhone chaque lment graphique est autonome dans sa gestion dvnement. Il dclenche lui-mme les appels aux fonctions grce un selector (son couteur dvnement).
// G e s t i o n d un bouton s o u s iPhone [ monbouton addTarget : s e l f a c t i o n : @ s e l e c t o r ( buttonPressedmonbouton ) ( v o i d ) buttonPressedmonbouton { [ l i s t e C h i f f r e a p p e n d S t r i n g :@" 3 " ] ; [ l i s t e T o u c h e a p p e n d S t r i n g :@" 3 " ] ; [ monLabel s e t T e x t : l i s t e T o u c h e ] ; }

Sous Android cette gestion se fait au travers dun Listener (couteur dvnement) qui lance une fonction void onClick(View v) qui prend comme attribut la vue actuelle. Dans cette fonction nous allons ensuite faire un travail dextraction pour connaitre llment graphique dclencheur de lvnement pour lui attribuer enn une action.
// D c l a r a t i o n du bouton Button c a s e q u i t = ( Button ) findViewById (R. i d . t q u i t ) ; casequit . setOnClickListener ( this ) ; // F o n c t i o n g r a n t l e s vnements p u b l i c v o i d o n C l i c k ( View v ) { i f ( v==(Button ) findViewById (R. i d . t q u i t ) ) f i n i s h ( ) ; }

Linterface graphique est un lment propre chacune des plateformes. Elle semble donc peu ou pas transfrable. Le reste du code, calcul, manipulation de donnes, semble pouvoir tre factoris. Nous venons donc didentier, dans le dveloppement dune application informatique pour plateforme mobile, les lments factorisables et donc rutilisables, et ceux qui seront spciquement dvelopps pour la machine. La vue et son contrleur reprsente 20% du code, le modle les 80% restant, nous pouvons donc optimiser les 4/5 du dveloppement. Pour valider lensemble de nos choix nous avons dvelopp un projet complet en utilisant le code natif. Nous allons maintenant appliquer la factorisation du code au code mtier dune application.

27

2.3.4

Factorisation du code mtier entre lAndroid et le iPhone

Lors de notre tude nous avons constat que le travail de factorisation du code est dirent selon les donnes manipules. Travailler en code natif avec des types primitifs Lorsque lon appelle une fonction en C partir de lObjective C on peut passer des arguments de types primitifs sans ajout de code :
// en o b j e c t i v e C : int i ; i n t a =2; i=f o n c t i o n e n C ( a ) // // du c o t n a t i f C : int fonctionenC ( a ) { r e t u r n a++; }

Appel de l a f o n c t i o n C

Ce code dclare une variable de type entier a, on lui aecte la valeur 2. On excute la fonction C qui retourne au programme en Objective C la valeur de a incrmente de 1. Si lon souhaite intgrer cette mme fonction sous Android la transmission de donnes du Java vers le C est plus complexe :
// en Java s o u s Android dans l a c l a s s e // d c l a r a t i o n de l a f o n c t i o n en C de type n a t i f public native int fonctionenC ( int a ) ; // chargement de l a f o n c t i o n C en mmoire pour a p p e l s t a t i c { System . LoadLibrary ( " f o n c t i o n e n C " ) } ; // a p p e l de l a f o n c t i o n i n t a =2; i n t i=f o n c t i o n e n C ( a ) // Appel de l a f o n c t i o n C // du c o t n a t i f C : j i n t nompackagejava_fonctionenC ( JNIEnv env , j o b j e c t t h i s , j i n t a ) { r e t u r n a++; }

Au sein du code Java nous mettons en place une mthode native sous le protocole JNI. Elle est dclare comme native et charge en mmoire pour tre appele. Cette mthode est dclare static car elle dpend de la classe (et non pas de linstance de lobjet). Une fois dclare on peut lappeler comme toute mthode de type Java. Dans le cadre du code natif C nous devons interfacer le passage des donnes. Le nom de la mthode change, car elle va tre appele en mode natif par le code Java et doit donc appartenir son package. Ensuite elle reoit un environnement de type JNI et un objet de type Java. On se servira plus tard de ce type JNIEnv pour des donnes plus complexes. Ce pointeur nous renseigne sur ladresse o va tre stock la srie de variables type string, array. Le type int tant primitif il est pass directement par la fonction. Lobjet java va assurer la capacit de la fonction native retourner des donnes. Comme nous le constatons le passage de type primitif est plutt simple. Le passage dune donne de type string (chaine de caractres) ou tableau est bien plus complexe raliser.

28

Problmatiques lies aux manipulations de chaine et tableau de donnes Lors de la rception des deux strings dans la mthode native on constate un traitement particulier cause du JNI mais aussi des limites du NDK Android. Celui-ci intgre la librairie string du C avec des modications. Le type string nexiste pas, mais lensemble des mthodes de la classe string sont disponibles. Ces mthodes fonctionnent partir dun const char * et le manipulent comme une string. Il nous faut donc la rception des donnes issues du code Java les convertir en const char *. On sappuie alors sur le pointeur env pour connaitre la zone mmoire o se trouve le contenu des strings. Il nous faut faire la mme manipulation pour un return de type string. Voici un exemple dutilisation :
// Sous Android mthode n a t i v e avec 2 s t r i n g s public native f l o a t a f f i c h e ( String l i s t e d e s c h i f f r e s , String listesdesoperandes ) ; s t a t i c { System . l o a d L i b r a r y ( " J n i c a l c " ) ; } // du c o t n a t i f C : j f l o a t p a c k a g e j a v a _ a f f i c h e ( JNIEnv env , j o b j e c t t h i s , j s t r i n g l i s t e d e s c h i f f r e s _ j a v a , jstri ng listedesoperandes_java ){ // On r e t r o u v e l e s 2 S t r i n g s mais on d o i t l e s t r a i t e r // c o n t r a i r e m e n t au i n t p r c d e n t c o n s t c h a r c h i f = ( env )>GetStringUTFChars ( env , l i s t e d e s c h i f f r e s _ j a v a ,NULL) ; c o n s t c h a r o p e r = ( env )>GetStringUTFChars ( env , l i s t e d e s o p e r a n d e s _ j a v a ,NULL) ; }

Du cot de lObjective C nous sommes confronts au mme type de problmes pour grer un objet de type string. Lobjet NSString remplace le type string natif. Il possde une terminaison dirente et bncie de trs nombreuses mthodes de manipulation et traitement. Nous utiliserons la mthode retournant un string de type UTF8 pour le convertir et le rendre utilisable dans la mthode native.
// Appel en O b j e c t i v e C NSString l i s t e O p e r a n d e = [ NSString A l l o c ] ; [ l i s t e O p e r a n d e i n i t W i t h S t r i n g :@" H e l l o world " ] ; f o n c t i o n e n C ( [ l i s t e O p e r a n d e UTF8String ] ) ; // Dans l a mthode n a t i v e v o i d moteur ( c o n s t c h a r l i s t e O p e r a n d e ) ;

Comme nous venons de le constater plus les lments interfacer sont complexes et plus le traitement est dicile. La mthode tant dnie, nous allons maintenant la mettre en pratique avec le dveloppement de projets multiplateformes.

29

Chapitre 3

Dveloppement dapplications multiplateformes Android/iPhone


Nous avons dvelopp plusieurs applications avec des objectifs dirents. Nous avons ralis des applications permettant de tester les capacits de chacune des machines en terme dachage en 2D et en 3D. Nous avons ensuite programm une calculatrice sur les 2 supports en intgrant un moteur de calcul en C. Nous avons galement tent dutiliser un jeu dinstructions spciques au processeur ARM quipant nos deux appareils. Pour chacun de ces programmes nous avons pu valider des niveaux de performances et des mthodes de dveloppement.

3.1

Etudes des performances en 2D et 3D de lArchos IT 5 et de liPhone

Les deux plateformes disposant du mme processeur (ARM) des cadences lgrement direntes, nous avons donc souhait comparer leurs performances en terme dachage graphique et de calcul 3D en temps rel. De plus, nous dvelopperons ces applications en utilisant un mthode classique, cest--dire pour chaque plateforme son propre code, pour valuer les temps de travail.

3.1.1

Analyse

Nous souhaitions tester la capacit de chacun dentre eux acher des sprites (un lment graphique qui peut se dplacer lcran) en 2D, en animation constante, avec un rafraichissement du fond chaque tour danimation. Cette mthode allait nous permettre de dterminer la vitesse dachage et les temps de raction. Les deux plateformes intgrent la bibliothque de programmation graphique OpenGL ES spciquement cre pour les machines portables. Similaires en terme de matriel, les deux appareils devaient nous prsenter des rsultats proches en terme de rendu 3D. Nous souhaitions ainsi vrier lapport des dirents OS sur les performances. Pour raliser ces tests nous avons utilis la mthode traditionnelle de dveloppement. Lensemble du code a t systmatiquement rcrit pour chaque plateforme, sans utilisation de code natif. Deux raisons cela : - ces applications sont graphiques et utilisent essentiellement des vues et un contrleur de vue - nous voulions obtenir des rsultats dans un cadre standard dutilisation.

30

3.1.2

Ralisation

Nous avons mis au point un programme qui ache des sprites de 88X82 pixels selon une courbe pour tester les capacits des appareils mobiles notre disposition. Lorsque lutilisateur appuie sur lcran un sprite supplmentaire est ajout la courbe, le compteur est incrment et le nombre de frames (temps dexcution) ncessaires lexcution de lensemble de lanimation est recalcul et ach(gure 3.1 page 31).

Figure 3.1 Test de performance dachage de sprite 88X82 sous simulateur iPad Nous avons aussi ralis une application utilisant lOpenGL ES pour tester les capacits de rendu de ces plateformes portables. Nous avons test le calcul et lachage de 3200 faces 3D en temps rel avec une rotation sur les axes et un total de 4800 vertex modis chaque nouvel achage(gure 3.2 page 31).

Figure 3.2 Test de performance tunnel en 3D

31

3.1.3

Rsultats obtenus

Nous navons pas pu tester lapplication de rendu de sprites en 2D sur une plateforme Apple car nous ne disposions pas de licence permettant dinstaller lapplication sur iPhone. Nous avons donc compar lArchos avec une autre plateforme Android ayant le mme processeur que le tlphone dApple. Dans le cadre dun rendu en 2D les capacits des machines sont les suivantes. Plateforme Processeur Ecran Nombre de sprites Archos IT 5 ARM 800 Mhz 800x480 72 HTC Desire ARM 1 Ghz 800x480 130

Figure 3.3 Performances ralises par plateforme - Sprites 88X82 - 25 FPS Dans le cadre dun rendu en 3D nous obtenons ces rsultats. Nous navons pas dvelopp cette application sous iPhone (le mme problme dinstallation que le prcdent test), aussi nous avons fait le choix de comparer deux plateformes Android ayant une dirence en terme de puissance de processeur assez proche de celle de liPhone. Plateforme Processeur Puce graphique Ecran Framerate/seconde Archos IT 5 ARM 800 Mhz SGX535 800x480 25 HTC Desire ARM 1 Ghz 800x480 60

Figure 3.4 Performances ralises par plateforme - Tunnel 3D - 3200 faces Les dirences sont trs importantes entre les deux machines. Cela sexplique par les faits suivants : - le HTC Desire bncie dun processeur fonctionnant une frquence plus leve - les deux plateformes nont pas la mme version dOS : lArchos IT 5 possde un Android 1.6 et le HTC Desire un Android 2.1 En eet les 200 Mhz de dirence entre les deux processeurs ne peuvent expliquer eux seuls le doublement du framerate ou du nombre de sprites achables. En faisant voluer son OS, Google le rend plus rapide dans lexcution des tches. En terme de temps de dveloppement les chires sont les suivants : Plateforme Temps pass Android 16 heures Simulateur iPhone 14 heures

Figure 3.5 Rpartition du temps de dveloppement sur le projet Sprites Nous avons ensuite dvelopp un projet entier en suivant une mthode de dveloppement multiplateforme incluant du code natif.

32

3.2

Un projet multiplateforme avec code natif : une calculatrice

Le choix de ce projet sexplique par : - une interface graphique utilisant plusieurs objets dirents - des intractions multiples - un moteur de calcul bien identi.

3.2.1

Analyse et mthodologie applique

Voici le schma de dveloppement de projet que nous avons mis en place(gure 3.6 page 33).

Figure 3.6 Gnration dun programme avec code natif et wrapper Nous avons dvelopp les interfaces graphiques et la gestion des choix de lutilisateur sur chacune des plateformes, dans leur langage, en XML et en Java pour Android, en Objective C sous iPhone. Nous avons ensuite ralis 2 wrappers, du Java vers le C et de lObjective C vers le C. Enn le moteur de calcul a t dvelopp en C, sur PC, et rutilis sur les deux plateformes.

3.2.2

Ralisation du projet

Le moteur de calcul de la calculette est une fonction qui prend en paramtre deux strings. La premire contient la liste des nombres insrs par lutilisateur spars par un caractre / , la seconde contient les oprandes associer chaque tape du calcul. Volontairement le moteur ne gre pas les priorits des oprations. Il ralise des calculs sur les 4 oprateurs de base, le plus, le moins, le diviser et le multiplier. A la rception des deux strings, il extrait de la chaine de caractres des nombres les premiers lments jusqu rencontrer le caractre sparateur. Il prend alors la premire oprande dans la chaine des oprandes et eectue lopration. Le rsultat est stock dans une variable de type oat. On passe ensuite au nombre suivant jusquau prochain sparateur, puis la deuxime oprande, et ainsi de suite jusqu ce que lon atteigne la n de la string des nombres.

33

\\ Code s o u r c e du moteur en C #i n c l u d e < s t r i n g . h> #i n c l u d e <s t d i o . h> i n t main ( ) { \\ Deux s t r i n g s pour s i m u l e r l a p p e l const char c h i f = " 2 4 / 2 . 5 " ; c o n s t c h a r o p e r = "++"; \\ C a l c u l d e s l o n g u e u r s d e s s t r i n g s int longueurchiffre ; i n t longueuroperande ; l o n g u e u r c h i f f r e=s t r l e n ( c h i f ) ; l o n g u e u r o p e r a n d e=s t r l e n ( o p e r ) ; \\ C r a t i o n d e s t a b l e a u x de c h a r de l a t a i l l e \\ d e s s t r i n g s char c h i f f r e [ l o n g u e u r c h i f f r e ] ; c h a r operande [ l o n g u e u r o p e r a n d e ] ; \\ Copie d e s s t r i n g s dans l e t a b l e a u de c h a r \\ c a r on p r v o i t l e t r a i t e m e n t d e s s t r i n g s \\ venant de format d i f f r e n t s v e r s un \\ f o r m a t p l u s a c c e s s i b l e au C strcpy ( chiffre , chif ) ; s t r c p y ( operande , o p e r ) ; \\ \\ Le r e s t e du code t r a i t e l e c a l c u l e t l e s t o c k e l e r s u l t a t ..... }

Ce code (version complte en annexe B page 46) fonctionne sous Linux et Windows. Nous allons maintenant le rendre utilisable par un appel en Java sous Android.
// // Code j a v a de l a c a l c u l a t r i c e s o u s Android // p u b l i c c l a s s J n i c a l c e x t e n d s A c t i v i t y implements O n C l i c k L i s t e n e r { S t r i n g f r a p p e =""; S t r i n g r e s u l t a t =""; TextView e c r a n ; S t r i n g l i s t e d e s c h i f f r e s =""; S t r i n g l i s t e d e s o p e r a n d e s ="+"; // D c l a r a t i o n de l a f o n c t i o n C en n a t i f // Chargement de l a f o n c t i o n n a t i v e public native f l o a t a f f i c h e ( String l i s t e d e s c h i f f r e s , String listesdesoperandes ) ; static { System . l o a d L i b r a r y ( " J n i c a l c " ) ; } ... ...

34

// // En t t e de l a f o n c t i o n en C // U t i l i s a t i o n du JNI pour l e t r a n s f e r t d e s donnes e t l a p p e l // j f l o a t Java_com_chuck_android_Jnicalc_Jnicalc_affiche ( JNIEnv env , j o b j e c t thiz , j s t r i n g l i s t e d e s c h i f f r e s _ j a v a , j s t r i n g listedesoperandes_java ){ c o n s t c h a r c h i f = ( env )>GetStringUTFChars ( env , l i s t e d e s c h i f f r e s _ j a v a ,NULL) ; c o n s t c h a r o p e r = ( env )>GetStringUTFChars ( env , l i s t e d e s o p e r a n d e s _ j a v a ,NULL) ; int longueurchiffre ; i n t longueuroperande ; l o n g u e u r c h i f f r e=s t r l e n ( c h i f ) ; l o n g u e u r o p e r a n d e=s t r l e n ( o p e r ) ; char c h i f f r e [ l o n g u e u r c h i f f r e ] ; c h a r operande [ l o n g u e u r o p e r a n d e ] ; // Aprs t r a i t e m e n t d e s s t r i n g au format Java // e l l e s d e v i e n n e n t d e s c o n s t c h a r l e r e s t e // de l a f o n c t i o n ne change p l u s . . . strcpy ( chiffre , chif ) ; s t r c p y ( operande , o p e r ) ; ... ... // V a r i a b l e de type f l o a t // l e s p r i m i t i v e s en C s e g r e n t s a n s m o d i f i c a t i o n // en JNI return r e s f i n a l ; }

Dans le projet java il faut compiler, la racine du rpertoire : - avec la commande ndk-build (pour le moteur en C) - puis avec la commande ant release - un chier app est ainsi cr puis install dans la tablette Archos.

Figure 3.7 Calculette avec moteur natif sous Archos IT 5

35

Maintenant prsentons la version pour liPhone.


// // Code en O b j e c t i v e C // // I m p o r t a t i o n du h e a d e r du moteur n a t i f #import " moteur . h" ... ... // Appel de l a f o n c t i o n n a t i v e // Avec r c u p r a t i o n du r s u l t a t [ monLabel s e t T e x t : [ NSString stringWithFormat :@"% f " , moteur ( [ l i s t e C h i f f r e UTF8String ] , [ l i s t e O p e r a n d e UTF8String ] ) ] ] ;

Quelques explications sont ncessaires. Lappel la fonction native se fait en lui transfrant deux strings. Ces strings sont lorigine des NSString. Elles sont converties par le biais dune fonction ([nomstring UTF8String]) au format natif C. On obtient ainsi une nouvelle string que lon passe la fonction native.
// Dans l a f o n c t i o n C d o u b l e moteur ( c o n s t c h a r c h i f , c o n s t c h a r o p e r ) { int longueurchiffre ; i n t longueuroperande ; l o n g u e u r c h i f f r e=s t r l e n ( c h i f ) ; l o n g u e u r o p e r a n d e=s t r l e n ( o p e r ) ; char c h i f f r e [ l o n g u e u r c h i f f r e ] ; c h a r operande [ l o n g u e u r o p e r a n d e ] ; strcpy ( chiffre , chif ) ; s t r c p y ( operande , o p e r ) ; ... .. return r e s f i n a l }

Lentte est modi pour rcuprer les strings maintenant au format const char *. On les intgre dans les tableaux de char et le reste de la fonction native nest pas modi.

Figure 3.8 Calculette avec moteur natif sous simulateur IPAD

36

3.2.3

Retours dexpriences

Les avantages de cette mthode de dveloppement sont multiples. En terme de temps de travail, la dcomposition du projet calculette est de : - 12 heures de code pour linterface graphique sous Android et 10 heures sous Objectif C - 4 heures pour le moteur en C - 4 heures pour les 2 wrappers Soit un total de 30 heures. En comparaison, pour un dveloppement spcique Android et tout en Java, le temps de travail ncessaire la ralisation de la calculette intgrant linterface graphique et le moteur est de 18 heures. De plus ce moteur natif fonctionne sur 5 plateformes : iPhone, Android, PC Linux, PC Windows, Mac. Une adaptation du code sous PC Linux avec du Java prendrait moins de 4 heures. Le facteur temps pass pour une adaptation sur une autre plateforme est de 30% au lieu de 60% pour une refonte complte du code. Ces chires ne tiennent pas compte de la gestion des erreurs quil faut corriger sur autant de programmes que de plateformes, alors que le moteur nest corrig, test quune seule fois. En terme de ressources humaines cette mthode de dveloppement ncessite : - une quipe spcialise dans le code natif pour faire les moteurs - une personne spcialise dans chaque plateforme pour les interfaces graphiques. Cependant nous avons encore des contraintes en terme dutilisation du code natif. En eet celui disponible grce au NDK sous Android est pour le moment limit. Des projets open-source travaillent actuellement la mise en place de la STL et autres bibliothques usuelles du C et du C++. En attendant il faut se limiter aux possibilits oertes par le NDK qui, comme nous avons pu le voir, fait des choix quand aux primitives disponibles et leurs utilisations (les strings par exemple). Avant de se lancer dans le dveloppement tout azimut il convient de lire les .h disponibles. Nous avons pass, par exemple, un aprs-midi essayer de comprendre une erreur en utilisant les strings dans la fonction native. En relisant le header de la bibliothque string disponible sous NDK nous nous sommes aperu que le type string ntait pas disponible mais que les mthodes de manipulations taient dnies au travers de const char *. Lutilisateur de code natif pourra toujours rajouter ses propres bibliothques et dnir un type string grce un #typedef.

3.3
3.3.1

Utilisation des instructions NEON


Lunit vectorielle NEON

Le NEON est une unit de calcul prsente dans les dernires versions des processeurs ARM actuellement disponibles dans les smartphones et tablettes. Cette unit, dite parallle, vise acclrer les calculs arithmtiques et logiques en les eectuant non pas sur une donne la fois comme dans les units de calculs standards des processeurs, dites scalaires, mais sur quatre donnes simultanment. En eet les calculs entrant en jeu dans le traitement multimdia ou dans les calculs scientiques consistent majoritairement eectuer les mmes oprations sur des donnes direntes. Des units parallles similaires nommes SSE (Streaming SIMD Extensions) sont galement prsentes dans les processeurs Intel et AMD du commerce. Des tests montrent que lutilisation de telles units permet dau moins doubler les performances et dans certains cas de dcupler les performances. Cependant la programmation de lunit NEON ncessite des connaissances approfondies en architecture des processeurs ainsi quune programmation de bas niveau an dobtenir de tels gains de performance. Nous allons maintenant montrer comment exploiter lunit NEON partir de la plateforme Android et iPhone.

37

3.3.2

Exemple de mise en oeuvre sur les deux plateformes

Nous avons utilis lexemple fourni dans le SDK Android : Helloneon. Celui-ci utilise du code natif, via un wrapper. Ce code en C utilise le chier arm_neon.h. Il ralise dans un premier temps un calcul en C sans utilisation du Non, puis avec. Il calcul le temps pass et ache le rsultat. Lensemble du code est disponible dans le rpertoire sample dans le dossier android-sdk-linux. Sur iPhone nous avons utilis un calcul de matrice entirement ralis en assembleur pour le Non. Il utilise le mme chier arm_neon.h. La fonction est appele en code natif et renvoie le rsultat sous forme dun oat.
// Code u t i l i s s o u s iPhone // E x t r a i t du b l o g de J e f f Wolfgang s // h t t p s : / /www. b l o g g e r . com/comment . g ? blogID =398682525365778708 v o i d NEON_Matrix4Mul ( c o n s t f l o a t a , c o n s t f l o a t b , f l o a t output ) { _asm v o l a t i l e ( // S t o r e A & B l e a v i n g room a t top o f r e g i s t e r s f o r r e s u l t ( q0q3 ) " vldmia %1, { q4q7 } \n\ t " " vldmia %2, { q8q11 } \n\ t " // r e s u l t "vmul . f 3 2 "vmul . f 3 2 "vmul . f 3 2 "vmul . f 3 2 // r e s u l t " vmla . f 3 2 " vmla . f 3 2 " vmla . f 3 2 " vmla . f 3 2 // r e s u l t " vmla . f 3 2 " vmla . f 3 2 " vmla . f 3 2 " vmla . f 3 2 // r e s u l t " vmla . f 3 2 " vmla . f 3 2 " vmla . f 3 2 " vmla . f 3 2 = first q0 , q8 , q1 , q8 , q2 , q8 , q3 , q8 , column o f B x f i r s t row o f A d8 [ 0 ] \ n\ t " d10 [ 0 ] \ n\ t " d12 [ 0 ] \ n\ t " d14 [ 0 ] \ n\ t "

+= s e c o n d column o f B x s e c o n d row o f A q0 , q9 , d8 [ 1 ] \ n\ t " q1 , q9 , d10 [ 1 ] \ n\ t " q2 , q9 , d12 [ 1 ] \ n\ t " q3 , q9 , d14 [ 1 ] \ n\ t " += q0 , q1 , q2 , q3 , += q0 , q1 , q2 , q3 , third q10 , q10 , q10 , q10 , column o f B x t h i r d row o f A d9 [ 0 ] \ n\ t " d11 [ 0 ] \ n\ t " d13 [ 0 ] \ n\ t " d15 [ 0 ] \ n\ t "

l a s t column o f B x l a s t row o f A q11 , d9 [ 1 ] \ n\ t " q11 , d11 [ 1 ] \ n\ t " q11 , d13 [ 1 ] \ n\ t " q11 , d15 [ 1 ] \ n\ t "

// output = r e s u l t r e g i s t e r s " vs tmia %0, { q0q3 }" : // no output : " r " ( output ) , " r " ( a ) , " r " ( b ) // i n p u t n o t e v a l u e o f p o i n t e r doesn t change : "memory " , " q0 " , " q1 " , " q2 " , " q3 " , " q4 " , " q5 " , " q6 " , " q7 " , " q8 " , " q9 " , " q11 " // c l o b b e r ); }

38

3.3.3

Les problmes et limitations rencontrs

Les rsultats sont inexistants sur cette partie du projet. En eet nous navons pas pu faire fonctionner le moindre code sous Non que ce soit sur Android ou iPhone. Cette unit de calcul est pourtant bien prsente sur les deux plateformes en notre possession mais malgr plusieurs essais nous navons pu utiliser les exemples fournis par les 2 constructeurs. Nous ne pouvons donc pas acher de performances. Cependant cet exemple est signicatif de la dicult de faire un code multiplateforme qui soit facilement abordable. Malgr de nombreuses recherches nous navons pas pu rgler les problmes de compilation que nous ache lArchos IT5 (program not compiled with ARMv7 support) ou encore le HTC. Nous ne pouvons donc que nous er aux rsultats trouvs sur Internet ou donns par le constructeur. Lutilisation du Non permettrait une multiplication par sept des performances. Plateforme Temps pass Rsultat Bilan Archos IT5 16 heures Compilation et excution Pas de reconnaissance du Non Simulateur iPhone 24 heures Pas de compilation possible en mode simulateur Obligation de signer lapplication

Figure 3.9 Le Non sous Android et iPhone

3.4

Mthode de dveloppement multiplateforme : un premier bilan

Au cours de la construction du code de test pour lachage 2D et 3D nous avons pour le calcul des courbes dupliqu le code dune plateforme lautre en ladaptant. En eet les rsultats de calculs ne pouvaient tre stocks dans le mme type demplacement sous Android ou en Objective C, dans un canvas pour la premire plateforme, dans une structure pour la seconde. Nous avons alors pens quil devait tre possible dexporter la partie calcul dune application vers du code natif. En ralisant la calculatrice, nous avons donc cod le moteur de calcul en premier et en code natif. Une fois que celui-ci fonctionnait nous avons programm les interfaces graphiques en adaptant le passage des informations dun code vers lautre. Cest donc un autre mode de dveloppement qui ncessite un autre type danalyse dans un projet. Quest ce qui est factorisable ? Les plateformes peuvent-elles utiliser du code natif ? Ces questions doivent tre poses, et les rponses techniques apportes avant de se lancer dans ce type de programmation. Une priode danalyse est donc indispensable. En eet, comme nous lavons vu, tout ne peut pas tre pens en multiplateforme pour des multiples raisons : - pas les mmes intractions dune plateforme lautre - pas les mmes mthodes pour lachage. Donc dans le cahier des charges, les dveloppeurs doivent extraire les codes factorisables, les dvelopper en intgrant les contraintes de passage des donnes. Cest pour cela que, dans le cadre du MVC, le modle semble tout fait natif, de mme on peut aussi facilement imaginer appeler une base de donnes dans les mmes conditions avec le passage des champs via JNI sous Android, ou encore pour le LIFO raliser une rpartition des calculs sur des plateformes compltement direntes, via du code natif, pour proter de leurs spcicits, et retourner les rsultats. Nanmoins comme ce type de dveloppement nest pas habituel, il semble complexe mettre en oeuvre, notamment au niveau du transfert de donnes. Il ncessite une trs bonne pratique du C (ou du C++) et une bonne connaissance des machines en terme de structuration des variables.

39

Au nal, cette mthode de ralisation de projet informatique fonctionne. Elle permet, et sans contestation possible, doptimiser les temps de dveloppement en vitant la redondance des codes, la gestion de correction des bugs. Elle permet aussi de faire cohabiter des technologies direntes, on peut sans peine imaginer un iPhone qui envoie, au travers dun code natif des signaux une plateforme sous Android. La prochaine tape pourrait alors tre de crer une chaine doutils avec un makele gnrique qui selon une option de compilation crerait du code pour une plateforme, avec son wrapper, et son code natif.

40

Chapitre 4

Des objectifs aux ralisations : retours dexpriences et bilan


Aprs 10 semaines de travail au sein du LIFO dans un nouveau domaine professionnel le bilan en terme dacquis professionnels et personnels est positif.

4.1

Lapprentissage technique et professionnel : 10 semaines de formation intensive

La formation acquise lIUT visait me rendre capable de programmer avec tous types de langage ou outils de dveloppement. Les fondamentaux qui mont t enseigns devaient me permettre dapprhender un nouveau langage, de comprendre sa structuration, sa syntaxe. En n danne javais suivi des cours en Java sur une priode, malheureusement, assez courte. Cest ce langage que jai retrouv sur la plateforme Android. Jai ainsi pu acqurir davantage de pratique sur des projets longs crits dans ce langage. En terme dadaptation lusage de la documentation a t dterminant et ma permis de (re)trouver les fonctions ncessaires la ralisation des dirents projets. Le dveloppement sur les plateformes mobiles sappuie sur le MVC. Ce concept mtait parfaitement inconnu. Les tutoriels prsents dans les dirents SDK en plus dtre faciles dapproche, car peu techniques, sont aussi trs documents. Aprs de nombreuses recherches (notamment sur Internet) et la lecture de nombreux documents en anglais comme en franais, jai aujourdhui une bonne comprhension du rle de chacune de ses composantes. Mes connaissances actuelles dans ce domaine me permettent de crer des scnarios dans lesquels chaque vue est gre comme un objet un moment donn, de passer de lune lautre etc. Dans le cadre de mes recherches sur Android jai appris construire une chaine doutils complte, de lcriture du code jusqu sa compilation et son installation sur un simulateur ou un appareil mobile. Jai rencontr de nombreuses dicults pour trouver des solutions chacune des tapes. Les recherches en ligne, une connaissance des systmes (acquise en cours) et des processus de compilation ont permis de naliser lensemble de la procdure de cration de lapplication. Le tout tant ralis sous Linux jai d complter ma pratique de cet OS que je nutilisais pas en dehors des travaux dirigs lIUT.

41

Lutilisation du JNI a t une priode assez complexe en terme technique. Ce concept de passage des informations, au travers dun wrapper, est peu documente, toujours en anglais, et les exemples fonctionnants sont rares. Du point de vue thorique on retrouve une explication dans la documentation Java pour une utilisation simple. Le site de Roger Astier 1 de lIUT dOrsay, est la seule ressource franaise que jai pu trouver dans laquelle est dcrit le passage de donnes du Java vers du code natif (C ou C++). Cest sur la base de ses exemples que jai pu mettre en place le projet de la calculatrice sous Android. Jai aussi acquis de nouvelles connaissances en Open GL ES. Cette version dOpen Gl est spcique au portable. Jai ainsi pu mettre en oeuvre un tunnel 3d qui est un des codes que jutilise pour apprhender une machinerie 3D dune plateforme une autre. En travaillant sur iPhone jai appris utiliser MAC OS et surtout lObjective C. Ce langage est trs particulier en terme de syntaxe, et sa comprhension aux premiers abords est vraiment complexe. Aprs immersion dans le code du projet Sprite et ensuite de la calculette je suis maintenant assez laise avec les concepts particuliers comme la gestion de la mmoire (retain et release) ou encore le passage de messages au receveur. La documentation que jai utilise sur ce point est uniquement en anglais. Pour programmer dans ce langage il ma fallu aussi me servir de lIDE fourni par Apple nomm Xcode. Comme il est assez proche dEclipse, que nous avions vu lIUT, sa prise en main fut aise. Jai aussi dcouvert tout lunivers du iPhone, ses frameworks, le projet Cocos 2D (une bibliothque pour faire des jeux), la gestion des intractions avec lutilisateur etc. Jai depuis peu commenc dvelopper des projets personnels sur cette plateforme. Enn, jai appris utiliser tout lenvironnement de Latex et Beamer. Ce rapport de stage a dailleurs entirement t conu avec Latex et sa distribution sous Mac TexShop. Trs dirent lusage, par rapport Word ou Open Oce, il ma permis daborder la rdaction avec une autre mthode. Lcriture du texte sest faite sans aucune prsentation. Celle-ci a t applique ensuite, en respectant des standards de parution comme dans les rapports ou les thses. Lintgration des images a t unie (un seul style pour toutes les images) comme pour les extraits de code, ou des tableaux. Son apprentissage nest pas simple, il est mme frustrant car il faut un temps certain avant de russir faire un document prsentable. Mais avec une certaine pratique il savre trs rationnel et ecace. Du point de vue technique ces 10 semaines ont t riches en terme dapprentissage. Mais lenjeu du stage cest aussi dapprendre sur soi-mme.

4.2

Apprendre se connaitre : un bilan personnel encourageant

Lors de ma rorientation professionnelle il y a deux ans je me suis appuy sur lune de mes passions pour la transformer en mtier. Linformatique que je pratiquais tait celle que javais appris en autodidacte. La formation lIUT mayant permis de me mettre niveau jtais press de mettre en application ce que javais appris pour valider ma capacit tre productif, apporter un plus un projet. Jai pu naliser les projets demands par mon tuteur dans les dlais que nous avions dnis. Tous sauf un, je nai pas russi tester les capacits de lunit de calcul appel NEON prsente sur Android et iPhone. Malgr de nombreux essais, la lecture de plusieurs documentations, la prise de contact avec des programmeurs ayant ralis des programmes sur ce type de matriel, je nai jamais russi faire fonctionner me moindre code : problme de compilation, non-excution ou refus dinstallation. Je me pose alors la question de la raction dun employeur face ce genre de situation et de ma capacit ragir. Je nai pas de rponse actuellement.

1. http://www.iut-orsay.fr/dptinfo/Pedagogie/Roger.Astier/app_java/javaJni.html

42

Javais une apprhension quand au fait de madapter des nouvelles plateformes, de nouveaux langages. Javais besoin de savoir si je pouvais apprendre vite, dans des dlais dtermins. En 10 semaines jai pu travailler sur deux plateformes direntes que je ne connaissais pas, programmer en Objective C que jai compltement appris sur place avec de la documentation, des tests et les mthodes qui mavaient t enseign lIUT. Je programme maintenant en Objective C, sous iPhone, un jeu que jespre mettre en vente sur lApple Store en dcembre. Je souhaitais aussi valider ma capacit travailler toute la journe devant un clavier, rchir en terme dalgorithme, de code. Javais besoin de vivre des journes de travail au sein dune quipe, dans un espace ouvert, pour tester ma concentration et mon aptitude rchir et trouver des solutions. Sur ces points il ma fallu rapidement trouver un moyen de menfermer pour xer ma rexion. Jai donc apport un casque et un lecteur mp3 que jai pu utiliser quand je ne me sentais plus capable de rester indirent ce qui se passait autour de moi. Je dois encore travailler ce point. Jai retrouv, en travaillant sur des plateformes mobiles, le mme got du challenge qui me fait aimer la programmation. En eet du point de vue matriel ces appareils sont gs, il ny a pas de moyens techniques pour rendre un Archos IT 5 plus rapide. Le programmeur doit donc optimiser son code pour quil puisse faire faire la tablette le plus de choses possibles en un minimum de temps an de ne pas user lutilisateur. Le choix de continuer dvelopper sur ces architectures particulires est donc quasi obligatoire mes yeux. En travaillant au LIFO jai pu ctoyer des chercheurs, voir leur travail. Jai valid le choix de mon Master IRAD cette occasion. Je pense aussi, si je valide lensemble de mon diplme, postuler une thse dans le domaine de la recherche informatique en continuant le travail que jai commenc dans les nouveaux modes de dveloppement informatique.

4.3

Savoir conclure 10 semaines de stage

Le stage est une priode intense en terme dapprentissage et de travail. Malgr un investissement important il semble dicile de proter de lensemble des connaissances notre porte. Au LIFO les stagiaires sont un peu plus privilgis car les chercheurs, qui sont aussi des enseignants, sont pdagogues et prennent le temps de nous rpondre pour que lon puisse continuer avancer. Aussi aprs cette priode nous sortons renforcs en terme dacquis et de capacit mettre en oeuvre. De plus en faisant notre stage au LIFO nous avons appris mieux connatre le secteur de la recherche informatique. Si celui-ci est moins mdiatis que dautres, il nen reste pas moins que les volutions rendues possibles par le travail des chercheurs sappliquent ensuite au quotidien comme nous avons pu le constater (travail sur le traitement de gros chiers, calculs parallles distribus, scurisation etc.). Nous avons donc pu transposer nos travaux en terme dapplications futures pour les rendre plus concrets. Ainsi en travaillant sur les appareils mobiles et la recherche dune mthode permettant doptimiser le dveloppement nous avons dmontr quil tait possible doptimiser le temps de travail et les lignes de code. En rendant lapplication fonctionnelle sur les deux supports, Android et iPhone, nous avons ralis les objectifs dnis. Enn titre plus personnel, jai pu valider mon projet professionnel et continuer le construire. Je souhaite maintenant proter des connaissances que jai acquis pour faire des jeux vidos sur un mode de dveloppement mixte (plateforme ddie et code natif) pour le iPhone tout en continuant mon cursus universitaire.

43

Annexe A

Glossaire
Algorithme : Un jeu de rgles ou de procdures bien dni quil faut suivre pour obtenir la solution dun problme dans un nombre ni dtapes. Un algorithme peut comprendre des procdures et instructions algbriques, arithmtiques, et logiques, et autres. Un algorithme peut tre simple ou compliqu. Cependant un algorithme doit obtenir une solution en un nombre ni dtapes. Les algorithmes sont fondamentaux dans la recherche dune solution par voie dordinateur, parce que lon doit donner un ordinateur une srie dinstructions claires pour conduire une solution dans un temps raisonnable. ANSI (American National Standard Institute) : Commission amricaine charge de valider et de normaliser des applications techniques, entre autres dans les domaines de linformatique. Ainsi, les fabriquants de disques durs, par exemple, font des propositions visant intgrer de nouvelles technologies, que lAnsi se charge de valider ou non. Si cela est le cas, on dit quune caractristique est la norme Ansi. En revanche, le fait quune technologie ne soit pas normalise par cette commission nempche nullement un constructeur de lintgrer ses nouveaux produits. ASCII (American Standard Code for Information Interchange) : Dvelopp en 1968 an de normaliser la transmission de donnes entre logiciels et quipements disparates, le code ASCII est incorpor dans la plupart des mini-ordinateurs et ordinateurs personnels. ASCII est lacronyme de American Standard Code for Information Interchange (code amricain normalis pour lchange dinformations). Il sagit dun systme de codage sur 7 ou 8 bits qui aecte des valeurs numriques 256 caractres : lettres, chires, signes de ponctuation, caractres de contrle et autres symboles. Base de donnes : Ensemble de donnes organis en vue de son utilisation par des programmes correspondant des applications distinctes et de manire faciliter lvolution indpendante des donnes et des programmes. Anglais : data base. Bibliothque : Les bibliothques regroupent un ensemble de fonctions de base utilises par de nombreux programmes. De nombreuses bibliothques sont dsormais intgres aux systmes dexploitations (DirectX est une bibliothque de Microsoft spcialise dans le multimdia). Les programmes doivent tre optimiss pour pouvoir tirer parti des bibliothques additionnelles. Browser : En anglais, dsigne les navigateurs Internet qui vous permettent de vous connecter. Netscape est le browser Internet le plus rpandu dans le monde. Franais : Navigateur Internet C : Langage gnral de programmation oriente objets, trs populaire, invent en 1960 par Dennis Ritchie pour AT&T DLL : Bibliothque de liens dynamiques, autrement dit programme qui seconde une application Windows pour des tches prcises. DSP : Composant qui traite un signal audio et le numrise. Anglais : Digital Sound Processor.

44

Ecran tactile : cran muni dun dispositif qui permet de slectionner certaines de ses zones par contact. FPU (Floating Point Unit) : Coprocesseur arithmtique. Ce module est intgr tous les processeurs depuis le 486 dIntel. Il soccupe de tous les calculs virgule ottante dchargeant ainsi le CPU de cette tche. Grappe : Ensemble dappareils de mme type (terminaux, ordinateurs, etc.) rattach une mme unit de contrle. Anglais : cluster. HTML (HyperText Markup Language) : Langage de description de pages adopt par la communaut Internet. Java : Langage de dveloppement cr par Sun. Driv du C++ dont il nen possde pas la complexit, Java est un langage orient objet. Les programmes crs partir de Java ont la proprit de fonctionner sur nimporte quelle plateforme matrielle grce un systme nomm "Machine virtuelle" (voir JVM). Pour cette raison, Java est trs employ dans la communaut Internet. JPEG (Joint Picture Expert Group) : Procd de compression dimages dont de nombreuses pages Web usent dans leurs illustrations. Groupe dexperts communs au CCITT et lISO responsable de la normalisation dans le domaine de la compression dimages xes. Par extension, dsigne la mthode de compression normalise par ce groupe. JVM (Java Virtual Machine) : La JVM est la base de la "portabilit" de Java. Elle est la partie de Java qui permet aux applications programmes dans ce langage de fonctionner sur nimporte quelle plateforme. Le code Java est en fait interprt et excut par la JVM qui agit alors comme une machine virtuelle au sein de la machine relle (un PC, par exemple). Machine virtuelle : Couche logicielle au sein dun systme dexploitation qui permet dmuler le fonctionnement dune machine au sein de la machine physique. Objet : Unit structure et limite. On le dnit toujours par la tche ou la fonction quil accomplit. Il doit contenir en lui- mme tous les lments dont il a besoin. En informatique, on peut crer un objet par exemple laide dun enregistrement compos de champs de donnes (voir champ de donnes) dnissant ses proprits. Pour le programmeur, un objet est un ensemble ferm, compos de donnes et dun code. On ne peut manipuler les donnes de lobjet quau moyen de ce code. Sous Windows, le terme "objet" dsigne aussi un ensemble de donnes dni dans une Application source et transfr dans un document dune Application cible. Portabilit : Aptitude dun programme tre utilis sur des systmes informatiques de types dirents. Programmation par objet : Mode de programmation dans lequel les donnes et les procdures qui les manipulent sont regroupes en entits appeles objets. Script : Programme simple consistant en un ensemble dinstructions destines excuter ou automatiser des tches ou fonctions spciques. Systme exploitation (Operating System.) : Logiciel qui contrle laectation et lutilisation de ressources matrielles telles que la mmoire, le temps processeur, lespace disque et les priphriques. Un systme dexploitation est la base sur laquelle sexcutent les logiciels (applications). XML (eXtended Markup Language.) : Driv du HTML, ce langage destin Internet est beaucoup plus puissant notamment pour la ralisation de mises en page complexes.

45

Annexe B

Moteur de calcul en code natif pour le projet calculatrice


\\ Code s o u r c e du moteur en C #i n c l u d e < s t r i n g . h> #i n c l u d e <s t d i o . h> i n t main ( ) { \\ Deux s t r i n g s pour s i m u l e r l a p p e l const char c h i f = " 2 4 / 2 . 5 " ; c o n s t c h a r o p e r = "++"; \\ C a l c u l d e s l o n g u e u r s d e s s t r i n g s int longueurchiffre ; i n t longueuroperande ; l o n g u e u r c h i f f r e=s t r l e n ( c h i f ) ; l o n g u e u r o p e r a n d e=s t r l e n ( o p e r ) ; \\ C r a t i o n d e s t a b l e a u x de c h a r de l a t a i l l e \\ d e s s t r i n g s char c h i f f r e [ l o n g u e u r c h i f f r e ] ; c h a r operande [ l o n g u e u r o p e r a n d e ] ; \\ Copie d e s s t r i n g s dans l e t a b l e a u de c h a r \\ c a r on p r v o i t l e t r a i t e m e n t d e s s t r i n g s \\ venant de format d i f f r e n t s v e r s un \\ f o r m a t p l u s a c c e s s i b l e au C strcpy ( chiffre , chif ) ; s t r c p y ( operande , o p e r ) ; int cptchiffre ; i n t cptoperande ; char l i g n e [ l o n g u e u r c h i f f r e ] ; double r e s ; double r e s f i n a l ; double v i r g ; c p t c h i f f r e =0; c p t o p e r a n d e =0; r e s f i n a l =0; w h i l e ( cp t operande <l o n g u e u r o p e r a n d e ) { r e s =0; v i r g =0; w h i l e ( c h i f f r e [ c p t c h i f f r e ] ! = / && c h i f f r e [ c p t c h i f f r e ] ! = . && c p t c h i f f r e <l o n g u e u r c h i f f r e ) { r e s=r e s 1 0 ; r e s=r e s +( c h i f f r e [ c p t c h i f f r e ] 48) ; c p t c h i f f r e ++; } i f ( c h i f f r e [ c p t c h i f f r e ]== . ) { c p t c h i f f r e ++; w h i l e ( c h i f f r e [ c p t c h i f f r e ] ! = / && c p t c h i f f r e <l o n g u e u r c h i f f r e ) {

46

v i r g=v i r g +( c h i f f r e [ c p t c h i f f r e ] 48) ; v i r g=v i r g / 1 0 ; c p t c h i f f r e ++; } } r e s=r e s+v i r g ; i f ( c h i f f r e [ c p t c h i f f r e ] = / ) c p t c h i f f r e ++; i f ( operande [ c p t o p e r a n d e ]== / && r e s ==0) p r i n t f ( " E r r o r \n " ) ; ; i f ( operande [ c p t o p e r a n d e ]== + ) r e s f i n a l=r e s f i n a l+r e s ; i f ( operande [ c p t o p e r a n d e ]== ) r e s f i n a l=r e s f i n a l r e s ; i f ( operande [ c p t o p e r a n d e ]== / ) r e s f i n a l=r e s f i n a l / r e s ; i f ( operande [ c p t o p e r a n d e ]== ) r e s f i n a l=r e s f i n a l r e s ; c p t o p e r a n d e++; } p r i n t f ( " R e s u l t a t f i n a l %l f \n " , r e s f i n a l ) ; }

47

Annexe C

Prsentation des plateformes de tlchargement lgal pour Android et iPhone

Figure C.1 Itunes - LInstallation de ce logiciel est obligatoire pour pouvoir tlcharger sur lApple Store

Figure C.2 LAndroid Market accessible avec un simple navigateur internet http://http://www.android.com/market/#app=com.handson.deadliestcatch

48

Annexe D

Aide mmoire pour lObjective C


// Appel d une mthode p a r t i r d une i n s t a n c e de l a c l a s s e [ o b j e c t method ] ; // Appel d une mthode p a r t i r d une i n s t a n c e de l a c l a s s e avec p a s s a g e de v a r i a b l e [ o b j e c t methodWithInput : i n p u t ] ; // Appel d une mthode de c l a s s e e t a f f e c t a t i o n un o b j e t // dont l e t ype n e s t pas connu i d myObject = [ NSString s t r i n g ] ; // D c l a r a t i o n d un o b j e t de type s t r i n g c o n s t a n t NSString myString = [ NSString s t r i n g ] ; \\ P r o t o t y p e d une mthode r e n v o y a n t un b o o l e n \\ avec p a s s a g e de paramtre (BOOL) w r i t e T o F i l e : ( NSString ) path a t o m i c a l l y : (BOOL) u s e A u x i l i a r y F i l e ; \\ Appel de l a mme mthode BOOL r e s u l t = [ myData w r i t e T o F i l e :@"/tmp/ l o g . t x t " a t o m i c a l l y :NO ] ; // A f f e c t a t i o n d une s t r i n g l a p r o p r i t c a p t i o n ( l g e n d e ) de l o b j e t photo // Accder l a p r o p r i t c a p t i o n de l o b j e t photo [ photo s e t C a p t i o n :@"Day a t t h e Beach " ] ; output = [ photo c a p t i o n ] ; // ou output = photo . c a p t i o n ; // C r a t i o n d un o b j e t de type s t r i n g NSString myString = [ NSString s t r i n g ] ; // D f i n i t i o n du h e a d e r d une c l a s s e f i c h i e r . h #import <Cocoa / Cocoa . h> @ i n t e r f a c e Photo : NSObject { // A t t r i b u t s de l o b j e t NSString c a p t i o n ; NSString p h o t o g r a p h e r ; } // Mthode de l o b j e t ( NSString ) c a p t i o n ; ( NSString ) p h o t o g r a p h e r ; @end

49

// Code s o u r c e de l a c l a s s e #import " Photo . h" @implementation Photo ( NSString ) c a p t i o n { r e t u r n c a p t i o n ; } ( NSString ) p h o t o g r a p h e r { r e t u r n p h o t o g r a p h e r ; } @end \\ C o n s t r u c t e u r de l o b j e t ( id ) i n i t { i f ( s e l f = [ super i n i t ] ) { [ s e l f s e t C a p t i o n :@" D e f a u l t Caption " ] ; [ s e l f s e t P h o t o g r a p h e r :@" D e f a u l t Photographer " ] ; } return s e l f ; } // D e s t r u c t e u r de l o b j e t ( void ) d e a l l o c { [ c a p t i o n r e l e a s e ] ; // [ p h o t o g r a p h e r r e l e a s e ] ; // [ super d e a l l o c ] ; } // A f f i c h e r un message dans l a c o n s o l e i n t nombre = 5 ; NSLog (@" Message %d " , nombre ) ;

50

Annexe E

Installer une chaine doutils pour dvelopper sous Android avec Linux
Tlcharger et installer le SDK et le NDK pour Android
Pour tlcharger le SDK Android : http://developer.android.com/sdk/index.html Pour tlcharger le NDK Android : http://developer.android.com/sdk/ndk/index.html Dcompresser les deux dossiers. Mettre jour les chemins sous Linux

Crer son projet et gnrer les dossiers automatiquement


android cr e at e p r o j e c t \ t a r g e t <target_ID> \ name <your_project_name> \ path path / t o / your / p r o j e c t \ a c t i v i t y <your_activity_name> \ package <your_package_namespace>

Explications : - target : de 1 7, il correspond la plateforme Android choisie pour tester lapplication 1 - name : nom du projet - path : chemin o crer le dossier - activity : nom de la classe qui est le point dentre dun programme sous Android - package : nom du package comme pour Java

1. Pour voir la liste des plateformes disponibles : android list targets dans le chier Tools du rpertoire du SDK Android

51

Liste des chiers cres : - AndroidManifest.xml - chier de conguration de lActivity (nom de lapplication) - build.xml - chier de conguration pour la compilation sous ANT - default.properties - proprits par dfaut pour Android, il ne doit pas tre modi - build.properties - Fichier pour ajout de proprits pour la compilation (signatures par exemple) - src/your/package/namespace/ActivityName.java - Le main - bin/ - Regroupe les chiers binaires crs par la compilation - gen/ - Regroupe les chiers gnrs automatiment comme R.java. - libs/ - Les bibliothques - res/ - Les chiers annexes comme les images, les sons, les XML - src/ - Les sources du programme - tests/ - Conserve une copie de tout le projet pour test

Mettre jour un projet


Il arrive parfois quil faille changer le nom dun projet, ou encore la plateforme de test. La commande update du SDK permet de mettre jour les dossiers.
a n d r o i d update p r o j e c t name <project_name> t a r g e t <target_ID> path <path_to_your_project>

Compiler un projet
A la racine du rpertoire du projet pour une version debug excute sous simulateur :
ant i n s t a l l

A la racine du rpertoire du projet pour une version release installer sous appareil mobile :
ant r e l e a s e

Dans le cas dune version release, il faut signer lapplication.

Signer une application


Il faut dabord crer une cl publique :
$ k e y t o o l genkey v k e y s t o r e my r e l e a s e key . k e y s t o r e a l i a s alias_name k e y a l g RSA k e y s i z e 2048 v a l i d i t y 10000

Explications : - my-release-key.keystore : le nom du chier contenant la cl cre - alias_name : le nom de la cl - validity : nombre de jours de vie de la cl Dans le chier build.properties ajouter :
key . s t o r e =/ p a t h t o f i l e k e y /my r e l e a s e key . k e y s t o r e key . a l i a s=a l i a s y o u c h o o s e

52

Crer et dmarrer un mulateur pour tester en mode debug


Dans un terminal aller dans le rpertoire du SDK puis Tools et lancer la commande :
a n d r o i d c r e a t e avd n <name> t <t a r g e t I D > avec comme argument l e nom e t l e numro de l ? mulateur .

Il faudra avant dexcuter du code lancer une session de cet mulateur : emulator @name. Il restera ainsi en arrire plan et lors de la compilation dune application la commande install trouvera un simulateur o placer le chier .apk.

53

Annexe F

Installer le SDK iPhone pour un ordinateur sous Mac OS


Tlcharger et installer le SDK sous Mac OS
Il faudra senregistrer pour obtenir un IDApple sur le site dApple (http://www.apple.com) puis telecharger le SDK (http://www.apple.com/fr/ipad/sdk).

Crer un projet pour Iphone sous Xcode

Figure F.1 Crer un projet Iphone sous Xcode

Compiler sous simulateur

Figure F.2 Choisir le device o installer et lancer lapplication

54

Annexe G

Bibliographie et liens
Liens pour les plateformes sous Android
Installer le SDK Android sous Linux : http://wiki.smartphonefrance.info/%28X%281%29S%28rd5peqnhbisdhv45vkyhil55%29%29/Default. aspx?Page=sdk-androidlinux&AspxAutoDetectCookieSupport=1 Tutoriel pour un Hello world sous Android http://developer.android.com/guide/tutorials/hello-world.html Installation du SDK sous Android http://android.cyrilmottier.com/?p=3 Programmer pour Android sans Eclipse http://developer.android.com/guide/developing/other-ide.html Faire de lOpen GL sous Android http://www.anddev.org/colored_3d_cube-t4.html JNI sous Java http://www.iut-orsay.fr/dptinfo/Pedagogie/Roger.Astier/app_java/javaJni.html Tutoriel pour utiliser Ant sous Linux http://forum.korben.info/topic/1656-developpement-android-sans-eclipse/page__p__26060? s=57ab17a1d1723baefcc19b5b954624c5#entry26060 Tutoriel pour apprendre lOpenGL ES sous Android http://blog.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/ Les couteurs dvnements sous Android http://wiki.frandroid.com/wiki/Ev%C3%A8nements_de_l%27interface_utilisateur Sprites et gestion 2D http://www.helloandroid.com/tutorials/how-use-canvas-your-android-apps-part-2

55

Liens pour les plateformes sous iPhone


Utiliser du code C ou C++ avec Objective C http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ ocCPlusPlus.html Bloc note pour lObjective C http://cocoadevcentral.com/d/learn_objectivec/ Tutoriel Hello world http://iphonesoft.fr/tutoriel-developpement-01-hello-world

Autres documents
Un article sur les parts de march des deux concurrents http://www.mac4ever.com/news/54257/plus_de_telephones_android_vendus_que_d_iphone_aux_ usa_ce_trimestre/ Tutoriel Latex http://www.tuteurs.ens.fr/logiciels/latex/ Classement des applications sous iPhone http://www.unsimpleclic.com/classement-des-applications-pour-iphone_934.html FAQ pour Latex http://www.grappa.univ-lille3.fr/FAQ-LaTeX/

Liens Non
Non sous iPhone http://wanderingcoder.net/2010/06/02/intro-neon/ http://monkeystylegames.com/?p=82

Les livres utiliss


Programmation Cocoa sous Mac OS X, 3me dition, Edition Pearson, Aaron Hillegass Beginning iPhone 3 Dvelopment, exploring the iPhone SDK, Edition Apress, Dave Mark et Je LaMarche

56

Anda mungkin juga menyukai