Développeurs : d'iOS à Android

Anthony Nelzin-Santos |

Co-fondateur de Spotlight Mobile, Nick Farina a décidé de porter son application de micro-géolocalisation, Meridian [1.1.1 – US – Gratuit – Spotlight Mobile, Inc.], d'iOS vers Android. Ce faisant, il explique ce qu'il a apprécié dans le développement sur Android, et ce qu'il a moins apprécié, du point de vue d'un développeur iOS.

skitched

Farina a pris une décision dès le début du projet : puisqu'il code de manière native sur iOS, il n'a aucune raison de faire autrement sur Android. Il a donc décidé de ne pas utiliser d'outils de développement multiplateforme, de coller au plus près des canons d'interface Android, et de coder en Java. Une décision importante qui conditionne de nombreux choix.

La première question a été celle du choix d'un IDE (environnement de développement intégré) : celui d'iOS est Xcode sur Mac, point — éditeur de code, SDK, outils de test, simulateurs, tout est inclus. Google fournit le SDK Android, le développeur ayant le choix de l'éditeur. Farina a pris le parti d'utiliser la solution recommandée, Eclipse, avec le plug-in ADT (Android Development Tools pour Eclipse).

skitched

« Vous allez tout simplement détester Eclipse. », assure Farina : « Vous allez brûler de haine envers lui comme un millier de soleils en furie [NdT : une phrase de développeurs en forme de référence à Cheers]. Il est lourd, et plus lourd encore que lourd […] ». Ce premier contact négatif doit cependant être surpassé pour découvrir la puissance de cet IDE monolithique : « un bon moyen de s'y retrouver dans Eclipse est de passer quelques heures, et je suis extrêmement sérieux à ce sujet, à bidouiller avec les centaines d'options, de cases à cocher et de petits bidules dans la section préférences. » Cette manière de se forcer à découvrir Eclipse, à comprendre sa logique, est le prix à payer pour développer plus facilement pour Android : « [Eclipse] va tout simplement coder à votre place ».

Nick%20Farina%20-%20An%20iOS%20Developer%20Takes%20on%20Android

La version Objective-C.

Cette manière d'approcher les choses est en fait la clef, selon Farina, pour que le développement sous Android se passe dans les meilleures conditions possibles : plutôt que de partir avec des idées préconçues sur Eclipse ou Java, il faut comprendre comment Android utilise Eclipse et Java, pourquoi, et s'y tenir. Ce serait la manière la plus simple d'éviter de nombreuses sources de frustrations : « en général, les frameworks d'Android sont plutôt bien conçus et cohérents, et les API s'intègrent parfaitement au langage Java. En fait, […] notre application a presque la même structure de classes sur Android et sur iOS. Le code lui-même est incroyablement similaire sur les deux versions ».

skitched

La version Java.

L'émulateur Android, destiné à tester les applications, n'a pas les faveurs de Farina : comme tous les émulateurs, il est lent. Le simulateur iOS a l'inconvénient de passer par une compilation x86/64 (Intel x86 et non ARM, ce qui signifie que vous pourrez passer à côté de bogues qui seront présents dans l'application sur un appareil réel), mais a l'énorme avantage d'être rapide. Selon lui, la solution est simple : il suffit de tester l'application sur un smartphone, voire sur plusieurs smartphones aux configurations différentes. Le nombre de configurations possibles est évidemment beaucoup plus grand avec Android, mais il faut de toute manière tester son application iOS sur plusieurs profils (iPod touch, iPhone, génération actuelle, génération précédente), donc autant se plier à l'exercice sur toutes les plateformes.

skitched

Farina critique aussi bien iOS qu'Android en matière de création d'interfaces. Côté iOS, Interface Builder n'est pas une solution miracle, et le développement entièrement personnalisé est parfois particulièrement complexe pour des choses finalement très simples. Même chose côté Android : on ne peut utiliser seulement Java ou seulement le système de layouts XML. Il y a cependant en matière d'animations une différence fondamentale entre les deux OS : Android a été conçu comme un concurrent de Windows Mobile et BlackBerry OS, et reprend leur logique de rendu logiciel, ce qui permet de se passer d'une puce graphique très puissante. iOS au contraire a été conçu avec l'accélération OpenGL en tête, et le système similaire dans Android 3.0 est limité. Dans un OS comme dans l'autre, il faut donc à nouveau se poser la question de la pertinence des choix techniques : suis-je près à perdre un peu de fluidité dans cette vue contre une manière un peu plus simple de coder (iOS) ? est-ce que je dois utiliser le rendu CPU à cet endroit, avec le risque de l'occuper un peu trop parce que pendant ce temps il doit aussi parser mon flux (Android) ?

skitched

Bref, Farina essaye de faire passer un message simple : si l'on veut s'éviter bien des peines, sur iOS comme sur Android, il faut prendre du recul, peser ses choix techniques, comprendre la philosophie des plateformes. Choses qui ne peuvent être accomplies avec des frameworks multiplateforme. Mais tout cela demande des compétences, et du temps — donc de l'argent : le portage de Meridian a pris quatre mois. Tous les développeurs n'ont pas ce luxe.

avatar PtitRital67 | 
"si l'on veut s'éviter bien des peines, sur iOS comme sur Android, il faut prendre du recul, peser ses choix techniques, comprendre la philosophie des plateformes." Euh ouais on peut enlever iOs et Android de cette phrase genre "si l'on veut s'éviter bien des peines pour développer une application il faut prendre du recul, peser ses choix techniques, comprendre la philosophie des plateformes." c'est pour ça en fait qu'il y a des développeurs, ingénieur et autres architectes... on est pas juste là pour spammer toute la journée sur Facebook et MacGé (enfin un peu quand même...)
avatar -oldmac- | 
Je présume qu'il va mètre son App sur le store d'Amazon ;)
avatar R5555 | 
@toucan39 Et de l'argent sil a acheté un Mac :)
avatar tigre2010 | 
@ Marc Duchesne : Avec une quarantaine de constructeurs, c'est presque une case obligatoire. Que l'on veuille ou non développer sur Android.
avatar Hol-Rukka | 
@Marc Duchesne : il y a beaucoup d'applications payantes sur Android qui fonctionnent bien, et beaucoup d'applications gratuites avec pubs qui fonctionnent bien aussi (CF angry birds dont l'éditeur gagnait plus d'argent avec la version gratuite Android qu'avec la version payante iOS). Simplement sur Android quand les gens payent, c'est pour avoir un peu plus qu'une application coussin-péteur, c'est tout. EDIT: donc effectivement si tu bosses en freelance sur une ligne de produits liés aux coussins péteurs payants, passe ton chemin :)
avatar PtitRital67 | 
""Simplement sur Android quand les gens payent, c'est pour avoir un peu plus qu'une application coussin-péteur, c'est tout."" si t'as des sources pour étayer de tels propos ça serait sympa... (autant du coté d'android que d'ios) ou alors tu vas me sortir les exemples de ta voisine et de ton chien que tu as converti récemment à android
avatar simon | 
Sinon il y aussi le principe de la pub dans les applis gratuites...
avatar Lou117 | 
Excellent article, pour le coup ;)
avatar Hol-Rukka | 
@Marc Duchesne : avec de la pub bien entendu ! Ou avec un service avec abonnement, des achats in-apps, bref il y a des TONNES de moyens de gagner de l'argent avec une application apparemment gratuite. @toucan39 : iCoyote, Doodle Jump, quelques jeux, des versions "donation" d'applications payantes (comme quoi les utilisateurs sont prêts à payer sur Android), SwiftKey X (un clavier virtuel), et ça c'est dans le top payant du market. Il y a bien d'autres applications payantes qui ont trouvé des acquéreurs. @jodido : c'était de l'humour, mais l'idée est là, il y a plein d'applications Android qui se vendent très bien, simplement ce sont des applications de qualité. Un développeur qui se plaint de ne pas vendre sur Android est un développeur qui n'a pas visé le bon public, qui n'a pas fourni assez d'efforts pour fignoler son application, bref, ou qui n'a tout simplement pas eu de chance. Mais c'est pas pour autant qu'on ne peut pas se faire de thunes avec Android. EDIT: si vous voulez aller voir par vous même, vous pouvez ici : http://market.android.com
avatar AnthoNelzin | 
@Marc Duchesne Les pubs ne sont pas forcement pour des programmessur android... Regarde bien. Les pubs sont les meme que sur les programmes ios debile ( ou pas ^^)
avatar guiz913 | 
très bon article qui explique clairement ceci :" Android a été conçu comme un concurrent de Windows Mobile et BlackBerry "au cas ou les gens qui n'aurait toujours pas utilisé android de manière journalière nous baratine encore que c'est jsute une copie d'IOS...Ouais la façon d'utiliser ,et à voir , de developper android est bien differente qu'IOS...ouaip! En tout cas bravo pour son compte rendu sans partie pris!
avatar Abudah237 | 
Venant de Java, je ne trouve pas l'API Android si cohérente que ça. Par exemple, pourquoi avoir remplacé AWT et Swing pour farte la même chose en plus compliqué ? Au début je pensais que c'était pour pouvoir tourner sur des plateformes moins puissantes, mais quand je vois l'usine à gaz... Et le XML est aussi très complexe pour les interfaces sous Android, en fait plus que le code, ce qui est un comble. Quand aux activités pour tout, c'est une hérésie.
avatar Abudah237 | 
@ mithrandir : Et je ne parle pas de manques ahurissants comme l'absence de composant de sélection de fichier pour un système qui se vante de donner tout l'accès à son système de fichier.
avatar Hol-Rukka | 
Ca c'est vrai. Mais c'est très bien compensé par le mécanisme des intent. Si une personne dispose d'une application de navigation de fichier (et tu peux l'exiger à l'installation), tu peux utiliser cette application pour choisir un fichier. S'il ne s'agit que de fichiers images, musique ou vidéo, tu peux appeler une application native d'Android comme la Galerie pour aller les chercher.
avatar Abudah237 | 
@ ErGo_404 : Les intent, c'est une indirection de plus qui ne sert à rien, en tout cas dans pas mal de cas. En plus si par hasard tu oublie de référencer ton composant, l'erreur qui ressort au débug n'est pas du tout évidente. Quenf au XML, j'ai rarement vu un truc aussi mal foutu. Cela dit, XAML devient aussi très vite une usine à gaz. En plus j'aime bien le principe de refaire ce qui existait ailleurs dans le JDK: color, font, et j'en passe. Les classes Android ne font rien de plus que ce que font les classes Java, mais dans un autre package. C'est si bricolage.
avatar Abudah237 | 
@ mithrandir : Sans compter que le package java.awt.font existe, alors que AWT n'existe plus, et font est ailleurs. N'importe quoi. Des exemples comme ça, il y en a plein. C'est du portage fait à la va vite.
avatar Hol-Rukka | 
AWT et swing ont été créés pour faire des applications à base de fenêtre, ce qui n'est pas du tout le cas de la philosophie Android. Pourquoi dis-tu que le SDK d'Android est plus compliqué ? Pourquoi dis-tu que c'est une usine à gaz ? Beaucoup de développeurs se plaignent de Swing (et AWT n'en parlons pas) pour sa complexité quand il s'agit de faire des interfaces un peu soignées. L'usage du XML est justifié, ça permet en théorie aux non-développeurs de créer eux même leurs interfaces (ou des prototypes). C'est la même solution qu'avec le XAML de Microsoft. C'est un coup de main à prendre (surtout pour créer des "thèmes" en XML), mais globalement pour placer des éléments d'interface c'est assez efficace et ça n'a rien de "plus compliqué" qu'avec le code. Dans le code tu déclares ton élément, tu l'ajoutes à son parent, et tu déclares ses propriétés. Dans le XML, c'est la même chose, mais la hiérarchisation est automatisée puisque fait par l'imbrication des balises.
avatar imkl | 
Merci pour cet excellent article!
avatar R5555 | 
Moi c'est développer avec xcode que je trouve moins facile. Sous Android c'est gratuit et Eclipse est facile a utiliser et surtout cela évite d'avoir a apprendre un nouveau langage car je développe déjà en java sous Windows, Linux et Leopard. Il n'est pas de plus, obligatoire d'avoir un Mac pour coder.
avatar Thomson33 | 
Au sujet du XML, sur XCode c'est pareil, les fichiers xib ne sont autre que du XML... Mais bon c'est vrai que c'est plus simple à manipuler dans interface builder que le XAML dans Visual (partie GUI) par exemple... Moi ce que je reproche à ÉCLIPSE, sans parler du sdk d'android, c'est la lenteur de l'application...
avatar Abudah237 | 
@ marcle : Je ne comparais pas à XCode, mais au JDK. Et je soulignais l'incohérence des choix dans l'API, qui me fait penser à un bricolage par rapport à le instant initial.
avatar SimR69 | 
C'est amusant que personne n'ait remarqué que le bout de code sous-titré "La version Objective-C" soit en fait... un fonction C et non une méthode Objective-C. Certes cette fonction contient des messages Objective-C, mais ce bout de code n'est absolument pas représentatif d'une application iOS. Pour montrer la similarité Android/iOS, il aurait été plus pertinent de rappeler que l'architecture MVC (Model View Controller) passe très bien sous Android, ce qui permet de garder la même structure de code et facilite les portages.

CONNEXION UTILISATEUR