Beruflich Dokumente
Kultur Dokumente
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
E Installer une chaine doutils pour dvelopper sous Android avec Linux 51
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
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.
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.
4
Figure 1.1 Le LIFO
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
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.).
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
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.
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 ?
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.
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.
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.
11
Chapitre 2
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.
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.
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
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.
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.
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 "
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.
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.
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
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.
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.
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).
Une classe de type view est cre et un label est intgr et gr par IB pour y associer du texte.
( 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
La vue cre sous IB vient dtre associe la vue implante sous Xcode.
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.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
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 ?? ).
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.
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.
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.
// 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.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.
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).
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.
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.
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.
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.
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.
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 ;
}
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.
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
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.
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.
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 += 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 += 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.
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
Aprs 10 semaines de travail au sein du LIFO dans un nouveau domaine professionnel le bilan en
terme dacquis professionnels et personnels est positif.
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.
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.
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.
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
\\ 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 ++;
47
Annexe C
Figure C.1 Itunes - LInstallation de ce logiciel est obligatoire pour pouvoir tlcharger sur lApple
Store
48
Annexe D
// 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 ;
// 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
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
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
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
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
54
Annexe G
Bibliographie et liens
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
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/
Liens Non
Non sous iPhone
http://wanderingcoder.net/2010/06/02/intro-neon/
http://monkeystylegames.com/?p=82
Beginning iPhone 3 Dvelopment, exploring the iPhone SDK, Edition Apress, Dave Mark et Jeff
LaMarche
56