Deuxième chronique de “dans les coulisses d’une app”. Après l’introduction de la semaine dernière, attaquons les choses sérieuses avec une première chronique consacrée au développement, et que nous avons découpée en deux parties. Et chose promise, chose due, cela commence tout nu sous la douche.
Alors que l’eau coulait sur sa peau diaphane et nue..
Juin 2013 : alors que je conseille et développe en entreprise, je bricole depuis presque deux ans des applications Android dans mon coin. J’ai débuté plusieurs projets mais ils sont tous trop gros pour être terminés rapidement.
Il me faudrait quelque chose d’assez simple pour être développé en quelques jours ou semaines, afin de tester et mettre en place tout ce dont j’aurai besoin pour de futurs projets.
Je vais prendre ma douche et, alors que l’eau coule, je me dis que je n’ai jamais trouvé une appli qui me fournisse mes statistiques CPU et mémoire comme sur mon PC.
HOLY MOTHER OF GOD ! Je n’ai qu’à m’en programmer une !
Grosso modo, l’idée originale
48 heures chrono
L’idée me plaît tellement que je prends à peine le temps de me sécher pour me ruer sur mon PC. Je fais alors une petite recherche sur stackoverflow pour vérifier la faisabilité du bouzin.
C’est le site sur lequel tous les développeurs vont. Il se présente comme une immense FAQ bien plus pratique que de la documentation classique. Vous tapez votre problème ou ce que vous voulez faire, et il y a une chance sur une pour qu’un développeur vous apporte une réponse satisfaisante avec pile les 10 lignes de code qui vont bien ! En 5 minutes à peine, j’ai la confirmation : Android étant basé sur Linux, il suffit de taper deux ou trois commandes hyper connues.
Dix minutes de vélo et je suis au Node, mon espace de coworking : en 2 h le prototype est plié ! À moi la gloire et la richesse ! À cette allure, ma petite appli va sortir dans quelques semaines (et encore je vois large).
Il a fallu en effet quelques semaines : 35, pour être précis…
8 mois !
Mais comment peut-on mettre 8 mois pour afficher 42 sur un écran ?
D’abord, évacuons tout de suite deux trois contraintes dues à ma situation personnelle. Depuis juin, j’ai, quitté mon entreprise et rejoint une coopérative d’indépendants, travaillé sur d’autres projets Android (qui eux aussi devraient sortir “rapidement”), été papa pour la deuxième fois, conseillé des entreprises. Il y a tout simplement des semaines où je n’ai pas touché au projet et d’autres où je travaillais sur un autre aspect que le code. Au doigt mouillé, cela fait perdre trois à quatre mois.
Oui, mais il en reste quatre !
Certes, être développeur est bien plus facile qu’être illustrateur, mais il est quand même difficile de faire comprendre que des choses très simples côté utilisateur peuvent être très complexes côté développement. C’est un des objectifs de cette chronique.
Quand on fait toutes les trois secondes une opération qui en prend cinq…
L’exemple tout simple : on est vers juillet-août, et mon prototype est assez avancé. Mais il y a un souci. Les résultats sont incohérents ; parfois, ça pédale dans la choucroute… Bref, c’est bizarre. Je me lance pour ce que je crois une demi heure de tests pour voir d’où cela peut venir…
Eh bien, cela m’a pris 8 heures ! 8 heures ! De quoi finir avec les yeux rouges devant le PC à 23 h pour savoir d’où cela venait !
J’ai été obligé d’ajouter des tonnes de lignes spéciales un peu partout dans le code pour que l’app soit en mode “verbose”, c’est-à-dire qu’elle me détaille tout ce qu’elle fait.
Tout cela est hyper long et frustrant : si on met trop de lignes, on a tellement d’informations que l’on s’y perd, si on en met pas là où il en faut, on manque de ce qu’on veut.
Il m’a donc fallu l’équivalent d’une journée de travail pour comprendre que la commande qui permettait d’obtenir l’occupation processeur (le fameux 42) prenait environ 5 secondes à s’exécuter. Or, selon la configuration, on la lance toutes les 1, 3 ou 5 secondes.
Et les effets sont dévastateurs :
- Avec 3 secondes, la valeur par défaut, le système s’encroûte tranquillement en cachette. D’où les huit heures pour trouver le problème.
- Avec 5 secondes, il y une chance pour que vous lanciez un nouveau calcul au moment où le dernier se finit, ce qui…donne des résultats rigolos du type : CPU 122 %…
- Avec une seconde comme paramètre, le système est très rapidement surchargé. Au bout d’une minute, vous avez lancé le calcul 60 fois et il ne s’est exécuté que 12.
48 sont en attente et cela va en empirant… C’est ce qui m’a permis de voir d’où venait le problème.
Et encore, heureusement pour moi, une fois le problème repéré, il ne m’a fallu qu’une demi journée pour changer de méthode et vérifier que tout se passait mieux. J’ai eu de la chance, la nouvelle méthode ne prend que quelques millisecondes de calcul et ne demande pas de tout recommencer à zéro…
Cet exemple est évidemment extrême mais il n’est pas rare de passer plusieurs heures pour localiser et corriger précisément un problème. Et ce plusieurs fois par semaine !
Cent fois sur le métier tu remettras ton ouvrage
Depuis que j’ai commencé à travailler sous Android, le système a connu la bagatelle de 26 mises à jour, dont trois majeures.
L’Action Bar (la seule partie nette de l’image ci dessous) que vous avez maintenant sur 90 % des applications est apparue il y a 3 ans avec Android 3.0.
Sauf que Google n’avait pas fourni de code pour les versions antérieures qui représentent encore 30 % du marché.
Pour assurer la compatibilité, j’ai donc dû utiliser une librairie nommée ActionbarSherlock (développée par Jack Wharton) et recommencer suite à la version fournie par Google : ActionbarCompat.
Avec le temps, cela s’arrange et les nouvelles versions chamboulent de moins en moins ce qui a été fait. Mais on a toujours un peu l’impression de construire un château de sable sur une plage : il faut tout refaire à chaque nouvelle vague/version d’Android.
Bref, le métier de développeur peut être l’enfer mais aussi le paradis ; on en reparle la semaine prochaine !
BONUS STAGE 1 : Au fait, avec quoi développe-t-on une application sous Android ?
On en parle assez peu ,mais quels outils utilise-t-on pour développer une application sous Android ?
Première bonne nouvelle, vous pouvez parfaitement utiliser des outils entièrement gratuits.
Si vous dégottez un PC /Mac milieu de gamme d’il y a deux ou trois ans, vous n’aurez en tout et pour tout qu’à débourser 25 dollars (moins de 20 euros) pour diffuser votre appli mondialement (oui, oui mondialement) via le Google Play. Sans vouloir troller, ce n’est pas vraiment le cas sous iOS (c’est 80 euros…par an et vous devez absolument avoir un Mac).
Vous avez donc votre ordinateur, vous avez créé un compte développeur, il vous reste à choisir l’environnement de développement. Kézako ? Un logiciel qui vous fournit tout ce dont vous avez besoin pour programmer : de quoi écrire le code, le débugger, l’installer sur un téléphone portable ou l’exporter sur le Google play, des émulateurs, des outils pour tester votre code en profondeur, etc.
Google n’en fournit pas moins de deux pour Android. Rien ne vous empêche de travailler avec autre chose mais l’écrasante majorité des développeurs Android utilise un de ces deux environnements.
Le tendance du moment, c’est Android Studio qui est en version bêta. Si vous voulez briller en société, dites que vous travaillez avec : il marque beaucoup de points dans la communauté notamment grâce à son implémentation native de Maven, un outil très prisé de gestion de projets informatiques complexes.
J’ai personnellement essayé deux fois et je n’ai jamais accroché mais un de mes camarades du BAUG est beaucoup plus enthousiaste. J’utilise le “vieil” ADT (Android developper Tools) qui se télécharge (gratuitement donc) ici. C’est historiquement le premier environnement de développement proposé par Google.
Il est basé sur Eclipse et je l’ai configuré pour correspondre à mes besoins.
Il n’est pas parfait, il y a encore de vilains bugs, mais il dispose d’une telle communauté que si vous tombez sur un bug, une requête sur Google et le problème est réglé en dix secondes.
La java du développement
En ce qui concerne le développement en lui même, Android a été conçu pour que les applications soient développées en Java. C’est un langage Objet de la même famille que le C et le C++ qui sont utilisés massivement par les développeurs depuis plus de 40 ans.
Si vous voulez avoir une idée de ce qu’est la programmation, je ne peux que vous conseiller d’essayer ce jeu dans lequel vous devez diriger un chevalier avec du code javascript, très proche du java. Cela vaudra toutes les explications du monde.
Pour en revenir à nos moutons, Google fournit toute une série de librairies de fonctions (on se contente de dire librairies) pour travailler avec vos smartphones. L’objectif de ces librairies est de vous faciliter le travail en appelant leurs fonctions pour les tâches les plus communes et essentielles : afficher du texte à l’écran, donner la date et l’heure, savoir si le WiFi est allumé, prévenir quand un appel est en cours, etc.
Pour information, ces librairies ne sont pas parfaites. Il manque des fonctionnalités essentielles, certaines fonctions ont un comportement bizarre, la documentation est perfectible. On trouve par exemple des fonctions sans… aucune explication : cette fonction compare, d’accord, mais comment ?
L’auteur de cette chronique, Pierre Benayoun, est président du Bordeaux Android User Group ; il développe et conseille sur Android depuis la sortie du HTC G1 (qu’il possède toujours !). Vous pouvez le joindre sur Twitter à cette adresse !
Utilisez-vous Google News (Actualités en France) ? Vous pouvez suivre vos médias favoris. Suivez Frandroid sur Google News (et Numerama).
Cette trouille ! Je me suis relu pour vérifier que je n'avais pas dit d'énormité. Et si on me relit bien, j'ai précisé que le java était un langage objet de la même famille que le C...Nuance ! :p
Au fait, le C n'est pas un language orienté objet, le C++ c'est du C orienté objet !
Super chronique faite par un bordelais en plus. J'essaierai d'apprendre Java cet été et peut être que je me mettrai à développer ensuite avec Eclipse + ADT ou Android Studio que j'ai déjà installés (mais AS a un problème avec Gradle, c'est plus une version alpha qu'une bêta). Sinon j'arrive sur aucun des deux à faire "My first App" du site Google car il décrit des trucs que je n'est pas.
J'ai adoré ce jeu ! Je le conseil à tout le monde !
J'ai bien peur que si malheureusement :P Je viens de refaire le test et j'ai importé... pardon, ouvert un ancien projet sans problème. Merci pour SeriesAddict. Je suis justement en train de la refaire entièrement sous AS.
Tu serais pas en train de me dire qu'il suffit d'ouvrir le projet ? je suis tellement habitué aux solutions capillotractés... Sinon sympa ton app seriesAddict : https://play.google.com/store/apps/details?id=com.zenstyle.seriesaddict
Humm. Je l'avais fait lorsque j'ai changé pour Android Studio. Dans mes souvenirs, j'ai ouverts le projet avec Android Studio (Open project -> sélectionner ton projet) et tada. AS détecte automatiquement quel système de versionning tu utilises en se basant sur les dossiers qu'il trouve (.git, .hg, .svn, etc) et retrouve donc tout l'historique sans problème. Apres, si tu veux passer sous gradle, tu peux garder l'ancienne structure mais il faudra ajouter quelques lignes dans le build.gradle (http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure) :)
Le problème c'est que j'ai déjà un repo Git que j'utilise déjà avec Eclipse. J'aimerait bien pouvoir le partager avec Android Studio...
C'est marrant, j'ai eu des problèmes avec plein d'autres choses sous Android Studio mais pas avec le module VCS. Tu peux toujours créer ton repository et faire ton premier commit à la mimine, ça devrait rouler tout seul ensuite. Si jamais tu as des problèmes avec la configuration de gradle, n’hésite pas à me demander. Je ne prétends pas être un expert, loin de la, mais j'ai quand même appris quelques trucs au fil des mois ;)
http://java.developpez.com/cours/
Je m'y remet et ca commence mal. Je n'arrive pas à importer un projet dans un repos git local....
bravo de prendre soin de nous les béotiens. je recherche un bon cours ou bon bouquin pour me mettre à java avant d'aborder le développement sous Android Studio.<i>-------<a href="https://play.google.com/store/apps/details?id=com.frandroid.app">Envoyé depuis l'application FrAndroid pour tablette</a></i>
Super la chronique, cela décrit exactement ce qui se passe pour moi et je pense, une bonne partie des développeurs. Concernant ADT vs Android Studio, j'ai fait le switch il y a 3 mois. J'ai eu beaucoup de mal (surtout les raccourcis clavier qui sont complètement différents) mais ça vaut vraiment le coup, je ne pourrais plus revenir en arrière maintenant. Je pense notamment à l'intégration en natif de gradle, ça facilite tellement la vie pour la gestion des dépendances (même des librairies graphiques) ainsi que les build / release process.
je pense que c'est même conseiller ! plus tu commence jeune est mieu c'est ! par contre faut pas le forcer sa pourrait l'echoeuré . Donc faut lui faire faire sa en douceur :-)<i>-------<a href="https://play.google.com/store/apps/details?id=com.frandroid.app">Envoyé depuis l'application FrAndroid pour smartphone</a></i>
C'est sympathique ce genre d'article. Et si ça peut faire comprendre à certains que ce n'est pas facile de faire une app, car quand je lis les commentaires du PlayStore (et je ne suis pas dev, je n'y connais rien d'ailleurs), des fois je fume. Entre ceux qui crient au scandale (et mettent la note minimale bien sûr) quand le jeu n'est pas totalement gratuit et qu'il faut payer deux petits euros pour débloquer la version complète, ou d'autres pour un bug (qui sera de toute façon corrigé à la prochaine màj) alors que l'app est totalement gratuite. Au point que les notes et les commentaires deviennent inutiles. Et sans vouloir troller ;-), ce n'est pas le cas sur iOS (ou beaucoup moins). Hâte de lire la suite dimanche prochain.
Ça dépend ce qu'on veut dire par micro développement. S'il veut se mettre au code deux petites idées à peu près abordablse à son âge : 1) Pour savoir si on a la fibre : code combat (comme sité dans l'article) http://codecombat.com/ 2) Si on aime le jeu vidéo il y a aussi stencil qui est très simple à prendre en main : https://www.frandroid.com/developpement/98615_creez-votre-jeu-android-sans-connaissances-avec-stencyl-2-0-beta
sinon sympa l'article -------Envoyé depuis l'application Humanoid pour smartphone
tu crois qu'un petit de douze ans peut commencer à faire des micro développements ? j'aimerai mettre mon petit dessus car il est passionné de jeux... et autant qu'il essaie... Vous recommandez quoi ? -------Envoyé depuis l'application Humanoid pour smartphone
merci pour le commentaire ! Je viens de m'y remettre pour la troisième fois. Sur les 30 minutes repassées dessus l'impression est bien meilleures que les dernières fois. Je compte faire mon prochain projet dessus. On verra bien si eclipse me manque...ou pas !
Super article, j'ai adoré l'anecdote pour le CPU :) En effet un petit problème peut t'arracher les cheveux pendant plusieurs heures voir jours. Pour l'IDE, j'ai migrer récemment sur Android Studio. Il a beaucoup plus évolué qu'Eclipse et il est beaucoup agréable à utiliser. Maintenant je ne pourrais plus revenir sur Eclipse. Par contre en effet, il n'est même pas en Beta mais en Preview. Donc pour la stabilité c'est pas encore ça, mais il est aujourd'hui en version 0.5.1 et je n'ai pas de soucis.
Merci pous ces chroniques, c'est très bien écrit, intéressant et on en veut encore ! A dimanche prochain :-)
CodeCombat est une merveille !
Ce contenu est bloqué car vous n'avez pas accepté les cookies et autres traceurs. Ce contenu est fourni par Disqus.
Pour pouvoir le visualiser, vous devez accepter l'usage étant opéré par Disqus avec vos données qui pourront être utilisées pour les finalités suivantes : vous permettre de visualiser et de partager des contenus avec des médias sociaux, favoriser le développement et l'amélioration des produits d'Humanoid et de ses partenaires, vous afficher des publicités personnalisées par rapport à votre profil et activité, vous définir un profil publicitaire personnalisé, mesurer la performance des publicités et du contenu de ce site et mesurer l'audience de ce site (en savoir plus)
En cliquant sur « J’accepte tout », vous consentez aux finalités susmentionnées pour l’ensemble des cookies et autres traceurs déposés par Humanoid et ses partenaires.
Vous gardez la possibilité de retirer votre consentement à tout moment. Pour plus d’informations, nous vous invitons à prendre connaissance de notre Politique cookies.
Gérer mes choix