Vous êtes sur la page 1sur 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 4


1.1 Le Laboratoire dInformatique Fondamentale dOrleans . . . . . . . . . . . . . . . . . . 4
1.2 Dveloppement dapplications mobiles multiplateformes, tat des lieux . . . . . . . . . 6
1.2.1 Etude du march des appareils et des applications mobiles . . . . . . . . . . . . 6
1.2.2 Le dveloppement dapplications informatiques mobiles aujourdhui . . . . . . . 8
1.3 Les objectifs dfinis pour cette tude : un dveloppement multiplateforme . . . . . . . 10

2 Analyse des mthodes de dveloppement pour Android et iPhone 12


2.1 Android : la plateforme Open Source mobile . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.1 La tablette Archos IT5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.2 Installation de lenvironnement de programmation . . . . . . . . . . . . . . . . 13
2.1.3 Le dveloppement sous environnement Android . . . . . . . . . . . . . . . . . . 13
2.1.4 Mise en oeuvre : Hello World sous Android . . . . . . . . . . . . . . . . . . . . 15
2.2 Le iPhone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.1 Les caractristiques techniques du iPhone . . . . . . . . . . . . . . . . . . . . . 17
2.2.2 Installation de lenvironnement de programmation . . . . . . . . . . . . . . . . 17
2.2.3 Le dveloppement sous environnement iPhone . . . . . . . . . . . . . . . . . . . 18
2.2.4 Premires lignes de code pour iPhone : Hello world . . . . . . . . . . . . . . . . 20
2.3 Dfinir un mode de dveloppement multiplateforme . . . . . . . . . . . . . . . . . . . . 24
2.3.1 Intgration du C/C++ sous Android . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.2 Intgration du C/C++ sous iPhone . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.3 Elments dun projet pouvant tre factoriss dans le cadre dun dveloppement
multiplateforme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3.4 Factorisation du code mtier entre lAndroid et le iPhone . . . . . . . . . . . . 28

3 Dveloppement dapplications multiplateformes Android/iPhone 30


3.1 Etudes des performances en 2D et 3D de lArchos IT 5 et de liPhone . . . . . . . . . . 30
3.1.1 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1.2 Ralisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1.3 Rsultats obtenus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2 Un projet multiplateforme avec code natif : une calculatrice . . . . . . . . . . . . . . . 33
3.2.1 Analyse et mthodologie applique . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.2 Ralisation du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.3 Retours dexpriences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3 Utilisation des instructions NEON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.1 Lunit vectorielle NEON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.2 Exemple de mise en oeuvre sur les deux plateformes . . . . . . . . . . . . . . . 38
3.3.3 Les problmes et limitations rencontrs . . . . . . . . . . . . . . . . . . . . . . . 39
3.4 Mthode de dveloppement multiplateforme : un premier bilan . . . . . . . . . . . . . 39

1
4 Des objectifs aux ralisations : retours dexpriences et bilan 41
4.1 Lapprentissage technique et professionnel : 10 semaines de formation intensive . . . . 41
4.2 Apprendre se connaitre : un bilan personnel encourageant . . . . . . . . . . . . . . . 42
4.3 Savoir conclure 10 semaines de stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

A Glossaire 44

B Moteur de calcul en code natif pour le projet calculatrice 46

C Prsentation des plateformes de tlchargement lgal pour Android et iPhone 48

D Aide mmoire pour lObjective C 49

E Installer une chaine doutils pour dvelopper sous Android avec Linux 51

F Installer le SDK iPhone pour un ordinateur sous Mac OS 54

G Bibliographie et liens 55

2
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 Ra-
lit virtuelle et Vrification (PRV) du Laboratoire Informatique Fondamentale dOrlans (LIFO). Son
tutorat durant mon stage ma permis de finaliser lensemble des objectifs que nous nous tions fixs.

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.

3
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 filire) 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 Fondamen-
tale). 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 efficacement en multiplateforme avec une prsentation des applications
ralises pendant le stage. Enfin 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(figure 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 scientifique vivant au plan rgional et europen. En tant ququipe daccueil il in-
tgre 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 Commis-
sariat lEnergie Atomique (CEA)
- et dans le monde, avec lEcole Polytechnique de Montreal, lUniversit Technique de Vienne (Au-
triche), 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 Vrification de systme (PRV) qui effectue des travaux
lis aux dveloppements de langages, logiciels, bibliothques pour la programmation parallle et dis-
tribue. Les domaines dapplications sont la ralit virtuelle, les bases de donnes, ou encore le calcul
scientifique.

Cest au sein de cette dernire quipe que jai effectu mon stage pendant une dure de 10 semaines.

5
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 maximi-
ser son march diffusera 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 dintel-
ligence ce nest pas raisonnable.

Cette tude est galement motive par lexplosion du march informatique de plus en plus nomade
et embarqu.

Enfin 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. Mat-
riellement, 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 financier, dconomie dnergie. Pourtant malgr une concep-
tion similaire, du processeur jusqu lcran, lensemble des constructeurs revendiquent des diffrences,
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 bnficiera de lengouement des clients, mme si les diffrences ne semblent que commer-
ciales. 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 spcifiques.

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 chiffre daffaire

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 spcifique 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 gnrale-
ment 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
profiter 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 chiffres semblent ne jamais
vouloir sarrter et ce nest que le dbut dun vrai phnomne.

Figure 1.3 iPhone 4 et Ipad - Apple.com


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

7
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 chiffre daffaires escompt pour la vente dapplications ex-
clusivement mobiles est de 6,7 milliards deuros. Pour 2013 les prvisions sont de presque 30 milliards
deuros 5 soit 2 fois le chiffre daffaire 2009 de Renault 6 .

Le march de lapplication informatique est donc en pleine volution. Le tlphone devient compa-
gnon 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, dve-
loppe spcifiquement pour iPhone, pour Android, pour iPad.

Le dveloppement sur chaque plateforme ncessite des outils, des langages, du matriel spcifique,
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 spcifique
chaque appareil ?

1.2.2 Le dveloppement dapplications informatiques mobiles aujourdhui


Le dveloppement dune application informatique est dcoup en plusieurs tapes :
- lidentification 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. Lex-
pression du besoin et lanalyse sont toutes deux ralises une seule fois par projet. Ce nest pas le cas
de la partie programmation. En effet, une fois les deux premires tapes ralises les quipes de dve-
loppement 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

8
Prenons lexemple du jeu vido Need For Speed(figure 1.5) dElectronique Arts qui est prsent sur
toutes les consoles et appareils mobiles actuels. Le site de lditeur 7 fait dailleurs une place impor-
tante 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 dve-
loppements 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 por-
table 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 modification 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

9
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) spcifique chaque architecture qui excute
un code gnrique. Le code est compil une seule fois, cependant cette approche ncessite la prsence
dune JVM spcifique larchitecture. Par exemple un code Java compil sexcute indiffremment 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 (Soft-
ware Development Kit) qui dfinissent 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 effet en terme de concurrence il est
indispensable de conserver le plus possible lexclusivit de sa technologie pour forcer un dveloppement
spcifique, voir unique dune application. Cest une force de vente relle qui amplifie 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 dfinissant :
- 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 dfinis pour cette tude : un dveloppement multi-


plateforme
En programmant avec le langage C, le dveloppement informatique devrait ressembler un code
unique et un compilateur qui crerait un excutable diffrent pour chacune des plateformes(figure 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 (figure 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 effet, 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 flexible pour que des adaptations mineures rendent lexcution du programme possible sur toutes
plateformes.

Le LIFO, au sein de lquipe PRV, effectue 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
- dfinir une mthode de travail permettant de dvelopper en dehors des outils existants (SDK)
- faire un projet multiplateforme
- raliser les documents, dont ce rapport, avec LATEX.

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 An-
droid 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 particu-
larits 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 exp-
rience 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(figure 1.4) est quipe dun processeur ARM Cortex A8, en 32 bits avec une frquence dhor-
loge 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 fichiers
audios MP3. Grce son disque dur elle fait galement office 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 ver-
sion 2.0 par exemple. Chaque nouvelle version amliore les outils de dveloppement et apporte des
fonctionnalits supplmentaires.

Le tlchargement du SDK sur le site officiel est la premire tape pour dvelopper sur les plate-
formes 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
- enfin 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, permet-
tant 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 r-
pandu dans les dveloppements informatiques actuels..

En ouvrant un premier projet sous Eclipse un certain nombre de fichiers sont dj prsents sans
mme quune seule ligne de code nait t crite. On y trouve (figure 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, fichiers XML, son etc...
- le fichier AndroidManifest.xml dfinit le comportement de lapplication au systme Android. Ce
fichier dfinit par exemple, le nom, licone (par dfaut drawable/icon.png), le thme, la version mini-
male 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, figure 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 simplifier le dveloppement en isolant le code mtier (le modle), de lin-
terface graphique (vue) et de leurs intractions (contrleur). Ainsi la modification 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 fichiers 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 qualifi dextensible car il permet lutilisa-
teur de dfinir des marqueurs (balises) qui facilitent le parcours au sein du fichier et donc la lecture
de linformation. On dfinira, par exemple un bouton, et ses proprits dans une balise Monpremier-
bouton. Lors de son utilisation on appellera le fichier 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 afficher 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 affich sous licne de lapplication
- donner un nom au package Java (ex : com.unnom.android)
- donner un nom lActivity (le point dentre dans le code)
- dfinir 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 afficher, ici Hello World , il faut, dans larborescence du
projet(figure 2.2) :
- ouvrir le fichier strings.xml
- une fentre (Android Ressource) va souvrir (figure 2.3 page 15)
- changer la valeur de la chaine hello
- enregistrer la modification.

15
Afin dafficher la chaine il faut dfinir lcran un espace suffisant pour cela, dans notre cas vingt
pixels 3 suffisent. Pour cela il faut crer un fichier dimensions.xml (en slectionnant loption Add) dans
lequel inscrire le couple :
" dim_hello " / " 20 px "

Pour finir 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 saffiche. 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 configure, il nous reste crer le programme Java permet-
tant de lafficher. Il suffit de se rendre dans HelloWorld.java. Ce fichier 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 dafficher une interface graphique pour lutili-
sateur. La mise en place de notre interface graphique seffectue simplement en redfinissant 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 suffit 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 fichiers XML et dEclipse, le dveloppement est facilit car on ne code par les inter-
faces graphiques qui sont gnres automatiquement par le fichier 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 seffectue sur la base du langage Objective C(figure 2.6
page 18) avec lIDE XCode(figure 2.5 page 18) et avec lInterface Builder(figure 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 (figure
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-fils 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(figure 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 Win-
dows (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 diffrente 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. Lutili-
sation de lInterface Builder (figure 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 facile-
ment 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(figure 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 sp-
cifique 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 enfin un
projet en cliquant sur licone View-BasedApplication. Il faut nommer le projet HelloWorld.

Xcode cre alors des fichiers 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 safficher aprs rafrachissement. Mais avant tout dfi-
nissons 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 files/
- 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 fichier 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(figure 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(figure 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(figure 2.11 page 22)
- dans linspecteur se rendre dans longlet "Mavue connections".
- relier(figure 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(figure 2.13 page 23) vient dtre cre
- sauver le fichier
- 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 fichiers Xib ne sont utilisables que sur Mac ou iPhone/Ipad. On ne peut donc pas simple-
ment 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 Dfinir 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 (figure 2.14 24) mais avec
des environnements de dveloppement non compatibles(figure 2.15 ?? ).

Plateforme Archos IT 5 iPhone 4


Processeur ARM 800 Mhz ARM 1 Ghz
Ecran 800x480 960x640

Figure 2.14 Lenvironnement matriel Tablette Archox IT5 et iPhone 4

Plateforme Archos IT 5 iPhone 4


Langage de programmation Java Objective C
IDE Eclipse Xcode
Interface graphique XML IB
Execute du code natif Oui via JNI 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 pro-
jet 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 lutili-
sation 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 dfinir 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 diffrents outils.

Cration du projet Android


Nous allons aussi nous servir du SDK pour gnrer les fichiers 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 na-
tif, 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 fichier .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
Configuration et installation dun simulateur
Afin 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 suffit de prendre le fichier .c (ou cpp quil
alors renommer en .mm) et le fichier .h et linsrer dans le projet sous Xcode. Dans le fichier source
Objective C (un fichier 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 dveloppe-
ment 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 effet la vue est constitue
par un fichier XML sous Android et Xib sous iPhone. Il ny a pas de concordance entre les deux, ni de
conversion possible.

Le fichier 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 fichier 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
fichier 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 diffrente 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 enfin 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 didentifier, dans le dveloppement dune application informatique pour plateforme mo-
bile, les lments factorisables et donc rutilisables, et ceux qui seront spcifiquement 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 diffrent 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 ) // Appel de l a f o n c t i o n C

// du c o t n a t i f C :
int fonctionenC ( a ) {
r e t u r n a++;
}

Ce code dclare une variable de type entier a, on lui affecte 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 dcla-
re 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 modifications. 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 diffrente
et bnficie 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 traite-
ment est difficile. La mthode tant dfinie, 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 diffrents. Nous avons ralis des
applications permettant de tester les capacits de chacune des machines en terme daffichage 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 spcifiques 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 diffrentes,
nous avons donc souhait comparer leurs performances en terme daffichage 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 afficher des sprites (un lment gra-
phique 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 daffichage
et les temps de raction.

Les deux plateformes intgrent la bibliothque de programmation graphique OpenGL ES spcifique-


ment 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 vrifier lapport des
diffrents 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 affiche 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 affi-
ch(figure 3.1 page 31).

Figure 3.1 Test de performance daffichage 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 laffichage de 3200 faces 3D en temps rel
avec une rotation sur les axes et un total de 4800 vertex modifis chaque nouvel affichage(figure 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 Archos IT 5 HTC Desire


Processeur ARM 800 Mhz ARM 1 Ghz
Ecran 800x480 800x480
Nombre de sprites 72 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 diffrence en terme de puissance de
processeur assez proche de celle de liPhone.

Plateforme Archos IT 5 HTC Desire


Processeur ARM 800 Mhz ARM 1 Ghz
Puce graphique SGX535
Ecran 800x480 800x480
Framerate/seconde 25 60

Figure 3.4 Performances ralises par plateforme - Tunnel 3D - 3200 faces

Les diffrences sont trs importantes entre les deux machines. Cela sexplique par les faits suivants :
- le HTC Desire bnficie 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 effet les 200 Mhz de diffrence entre les deux processeurs ne peuvent expliquer eux seuls le
doublement du framerate ou du nombre de sprites affichables. En faisant voluer son OS, Google le
rend plus rapide dans lexcution des tches.

En terme de temps de dveloppement les chiffres sont les suivants :

Plateforme Android Simulateur iPhone


Temps pass 16 heures 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 multi-
plateforme 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 diffrents
- des intractions multiples
- un moteur de calcul bien identifi.

3.2.1 Analyse et mthodologie applique


Voici le schma de dveloppement de projet que nous avons mis en place(figure 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. Enfin 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 pre-
mire 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 l-
ments jusqu rencontrer le caractre sparateur. Il prend alors la premire oprande dans la chaine
des oprandes et effectue lopration. Le rsultat est stock dans une variable de type float. On passe
ensuite au nombre suivant jusquau prochain sparateur, puis la deuxime oprande, et ainsi de suite
jusqu ce que lon atteigne la fin 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 fichier 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 modifi 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 modifi.

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 spcifique 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 chiffres 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 effet celui dis-
ponible 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 at-
tendant il faut se limiter aux possibilits offertes 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 dfinies au
travers de const char *. Lutilisateur de code natif pourra toujours rajouter ses propres bibliothques
et dfinir un type string grce un #typedef.

3.3 Utilisation des instructions NEON


3.3.1 Lunit vectorielle NEON
Le NEON est une unit de calcul prsente dans les dernires versions des processeurs ARM actuel-
lement disponibles dans les smartphones et tablettes. Cette unit, dite parallle, vise acclrer les
calculs arithmtiques et logiques en les effectuant non pas sur une donne la fois comme dans les
units de calculs standards des processeurs, dites scalaires, mais sur quatre donnes simultanment. En
effet les calculs entrant en jeu dans le traitement multimdia ou dans les calculs scientifiques consistent
majoritairement effectuer les mmes oprations sur des donnes diffrentes. Des units parallles simi-
laires 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 afin 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 fichier 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 affiche 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 fichier arm_neon.h. La fonction est appele en code natif et renvoie le rsultat sous
forme dun float.
// 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 = first column o f B x f i r s t row o f A


"vmul . f 3 2 q0 , q8 , d8 [ 0 ] \ n\ t "
"vmul . f 3 2 q1 , q8 , d10 [ 0 ] \ n\ t "
"vmul . f 3 2 q2 , q8 , d12 [ 0 ] \ n\ t "
"vmul . f 3 2 q3 , q8 , d14 [ 0 ] \ n\ t "

// r e s u l t += s e c o n d column o f B x s e c o n d row o f A
" vmla . f 3 2 q0 , q9 , d8 [ 1 ] \ n\ t "
" vmla . f 3 2 q1 , q9 , d10 [ 1 ] \ n\ t "
" vmla . f 3 2 q2 , q9 , d12 [ 1 ] \ n\ t "
" vmla . f 3 2 q3 , q9 , d14 [ 1 ] \ n\ t "

// r e s u l t += third column o f B x t h i r d row o f A


" vmla . f 3 2 q0 , q10 , d9 [ 0 ] \ n\ t "
" vmla . f 3 2 q1 , q10 , d11 [ 0 ] \ n\ t "
" vmla . f 3 2 q2 , q10 , d13 [ 0 ] \ n\ t "
" vmla . f 3 2 q3 , q10 , d15 [ 0 ] \ n\ t "

// r e s u l t += l a s t column o f B x l a s t row o f A
" vmla . f 3 2 q0 , q11 , d9 [ 1 ] \ n\ t "
" vmla . f 3 2 q1 , q11 , d11 [ 1 ] \ n\ t "
" vmla . f 3 2 q2 , q11 , d13 [ 1 ] \ n\ t "
" vmla . f 3 2 q3 , 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 effet nous navons pas pu faire fonction-
ner 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 afficher de performances.

Cependant cet exemple est significatif de la difficult de faire un code multiplateforme qui soit fa-
cilement abordable. Malgr de nombreuses recherches nous navons pas pu rgler les problmes de
compilation que nous affiche lArchos IT5 (program not compiled with ARMv7 support) ou encore
le HTC. Nous ne pouvons donc que nous fier aux rsultats trouvs sur Internet ou donns par le
constructeur. Lutilisation du Non permettrait une multiplication par sept des performances.

Plateforme Archos IT5 Simulateur iPhone


Temps pass 16 heures 24 heures
Rsultat Compilation et excution Pas de compilation possible en mode simulateur
Bilan Pas de reconnaissance du Non 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 laffichage 2D et 3D nous avons pour le calcul
des courbes dupliqu le code dune plateforme lautre en ladaptant. En effet 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 pas-
sage 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 effet, 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 laffichage.

Donc dans le cahier des charges, les dveloppeurs doivent extraire les codes factorisables, les dve-
lopper 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 diffrentes, via du code
natif, pour profiter de leurs spcificits, 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 final, 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 diffrentes, 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 makefile 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 for-


mation 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 dap-
prhender un nouveau langage, de comprendre sa structuration, sa syntaxe. En fin 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 diffrents projets.

Le dveloppement sur les plateformes mobiles sappuie sur le MVC. Ce concept mtait parfaite-
ment inconnu. Les tutoriels prsents dans les diffrents 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 com-
prhension 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 mo-
bile. Jai rencontr de nombreuses difficults 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 finaliser 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 documenta-
tion 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 spcifique
au portable. Jai ainsi pu mettre en oeuvre un tunnel 3d qui est un des codes que jutilise pour appr-
hender 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 d-
velopper des projets personnels sur cette plateforme.

Enfin, 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 diffrent lusage, par
rapport Word ou Open Office, il ma permis daborder la rdaction avec une autre mthode. Lcri-
ture 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 unifie (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 efficace.

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 pas-
sions 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 pro-
jet. Jai pu finaliser les projets demands par mon tuteur dans les dlais que nous avions dfinis. 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 lan-
gages. Javais besoin de savoir si je pouvais apprendre vite, dans des dlais dtermins. En 10 semaines
jai pu travailler sur deux plateformes diffrentes 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, rflchir 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 rflchir et trouver des solutions.
Sur ces points il ma fallu rapidement trouver un moyen de menfermer pour fixer ma rflexion. Jai
donc apport un casque et un lecteur mp3 que jai pu utiliser quand je ne me sentais plus capable de
rester indiffrent 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 effet du point de vue matriel ces appareils sont figs, 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 afin 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 difficile de profiter de lensemble des connaissances notre porte. Au LIFO les
stagiaires sont un peu plus privilgis car les chercheurs, qui sont aussi des enseignants, sont pda-
gogues 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 ren-
dues possibles par le travail des chercheurs sappliquent ensuite au quotidien comme nous avons pu le
constater (travail sur le traitement de gros fichiers, 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 dfinis.

Enfin titre plus personnel, jai pu valider mon projet professionnel et continuer le construire.
Je souhaite maintenant profiter 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 dfini quil faut suivre pour obtenir la solu-
tion dun problme dans un nombre fini dtapes. Un algorithme peut comprendre des procdures et
instructions algbriques, arithmtiques, et logiques, et autres. Un algorithme peut tre simple ou com-
pliqu. Cependant un algorithme doit obtenir une solution en un nombre fini 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 nor-
maliser des applications techniques, entre autres dans les domaines de linformatique. Ainsi, les fabri-
quants 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 afin de norma-
liser 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 affecte des valeurs numriques 256 caractres :
lettres, chiffres, signes de ponctuation, caractres de contrle et autres symboles.

Base de donnes : Ensemble de donnes organis en vue de son utilisation par des programmes corres-
pondant 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 (Di-
rectX 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 Win-
dows 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 proces-
seurs depuis le 486 dIntel. Il soccupe de tous les calculs virgule flottante 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 com-
plexit, 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 fixes. 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 par-
tie 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 fonc-
tionnement dune machine au sein de la machine physique.

Objet : Unit structure et limite. On le dfinit toujours par la tche ou la fonction quil accom-
plit. 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) dfinissant 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 dfini dans une Application source
et transfr dans un document dune Application cible.

Portabilit : Aptitude dun programme tre utilis sur des systmes informatiques de types diffrents.

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 auto-


matiser des tches ou fonctions spcifiques.

Systme exploitation (Operating System.) : Logiciel qui contrle laffectation et lutilisation de res-
sources 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 fichier Tools du rpertoire du SDK
Android

51
Liste des fichiers cres :
- AndroidManifest.xml - fichier de configuration de lActivity (nom de lapplication)
- build.xml - fichier de configuration pour la compilation sous ANT
- default.properties - proprits par dfaut pour Android, il ne doit pas tre modifi
- build.properties - Fichier pour ajout de proprits pour la compilation (signatures par exemple)
- src/your/package/namespace/ActivityName.java - Le main
- bin/ - Regroupe les fichiers binaires crs par la compilation
- gen/ - Regroupe les fichiers gnrs automatiment comme R.java.
- libs/ - Les bibliothques
- res/ - Les fichiers 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 myr 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 fichier contenant la cl cre
- alias_name : le nom de la cl
- validity : nombre de jours de vie de la cl

Dans le fichier build.properties ajouter :


key . s t o r e =/ p a t h t o f i l e k e y /myr 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 fichier .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 Jeff
LaMarche

56