Conseils pour développer une application Android : Mes leçons apprises
Publié: 2022-03-11Salut! Je m'appelle Ivan et je suis développeur d'applications Android depuis un certain temps maintenant. Ou alors il semble. À l'époque (nous parlons de 2009), Android n'était qu'un bébé et j'ai vu grandir le petit homme vert depuis. J'ai peur qu'il y a quelque temps, Android ait réussi à me dépasser.
De nos jours, Android n'est pas seulement présent sur des dizaines de milliers de téléphones et de tablettes différents. C'est à votre poignet, dans votre salon, dans votre voiture, et dès que nous commencerons à attribuer des adresses IP à des objets inanimés, ce sera à peu près partout autour de nous. Beaucoup de terrain à couvrir, même pour un développeur Android expérimenté !
Il existe également plus d'un million d'applications uniquement sur Google Play, sans compter Amazon AppStore ou les marchés qui ne nous intéressent généralement pas, comme la Chine. N'oublions pas les innombrables sociétés de développement d'applications mobiles qui génèrent des milliards de revenus chaque année.
Alors, comment un développeur indépendant peut-il créer une application performante sur cet immense marché avec de grands acteurs ? Je n'en ai aucune idée, je n'ai pas fait d'application réussie ! Mais, j'en ai fait un mignon, et j'aimerais partager mon histoire avec vous.
Leçon 1 : Relier les points
Le succès (généralement) ne se produit pas du jour au lendemain et ce n'est pas ma première application. J'en ai des qui vont des succès de développement inattendus du week-end comme le calendrier orthodoxe macédonien , avec plus de 30 000 utilisateurs dans une langue que pas plus de 4 millions de personnes peuvent comprendre, à des échecs plus réussis comme TweetsPie , une application avec une forte couverture médiatique et un terrible base d'utilisateurs d'un peu plus de 600 utilisateurs actifs. Beaucoup de leçons là-bas!
Alors que ces applications m'ont aidé à comprendre un peu mieux l'esprit de la "créature insaisissable appelée l'utilisateur", celle qui m'a inspiré était un projet de deux heures. Développée à l'origine pour faire de moi un millionnaire, une fois que 1 428 571 utilisateurs ont acheté l'application alors que Google prélève 30 cents sur chaque dollar, l'application Dollar a été conçue pour tester mon compte marchand.
Je ne savais pas que des années plus tard, je recevrais un e-mail d'une maman heureuse indiquant que c'était le meilleur dollar qu'elle ait jamais dépensé depuis que son garçon souriait chaque fois que mon application lui faisait un câlin.
Et c'est ainsi qu'une idée est née ! Pourquoi ne pas utiliser le besoin humain fondamental d'un câlin et le rendre joli ? Faites-le pour un public spécifique, interactif, stimulant, amusant à utiliser et encore plus amusant à partager.
Leçon 2 : Comprendre l'Android Market
Toutes les choses que j'ai mentionnées ci-dessus se sont ajoutées à une application de fond d'écran en direct. Les bases ne sont pas si difficiles à deviner. Android a une plus grande part de marché qu'iOS, mais les utilisateurs d'iOS achètent plus. Les applications de messagerie sont extrêmement populaires, mais les jeux freemium sont en tête des gains. La Chine, l'Inde, le Brésil et la Russie sont des marchés émergents, mais manquent d'habitudes de dépenses. Vous pouvez lire l'App Annie Index pour plus d'informations.
Alors, comment une application de fond d'écran en direct s'intègre-t-elle dans cela? Tout d'abord, il élimine la plupart des plates-formes car un fond d' écran en direct est une chose Android. Deuxièmement, cette fonctionnalité a été ajoutée dans Android 2.1, elle a donc une grande communauté et quelques beaux exemples. Plus particulièrement Paperland et Muzei open source de Roman Nurik, probablement le meilleur point de référence pour le développement Android.
Bien qu'il existe de nombreux fonds d'écran animés, la plupart d'entre eux relèvent de la catégorie paysage/météo, et très peu relèvent de la catégorie surcharge de gentillesse. C'est quelque chose que nous voulions changer et offrir quelque chose qui vous donne le sourire chaque fois que vous déverrouillez votre téléphone, même si vous l'avez déverrouillé pour une raison complètement différente. Nous vous avons offert un joli petit paquet de joie pour vous serrer dans vos bras avant d'aller vous coucher le soir ou lorsque vous éteignez votre réveil le matin. Et encore mieux, rendez-le personnel et personnalisable.
Sans plus tarder, et avant d'entrer dans les détails techniques, je vous présente fièrement : Ooshies - The Live Wallpaper
Il comporte:
- application gratuite de fond d'écran en direct qui vous donne des câlins
- 12 ooshies uniques au choix
- contenu gratuit, déverrouillable et achetable
- mises à jour météo actuelles
- connexion sociale et synchronisation des données
- salutations saisonnières
- beaucoup de surprises
- un chat ninja
- avons-nous mentionné les câlins?
Leçon 3 : Essayez de faire en sorte que cela se produise
Ooshies semblait être une idée d'application Android assez simple. Peignez un arrière-plan, superposez des nuages et des étoiles, placez un ours avec un ballon sur le dessus, et vous êtes prêt à partir. Mais non, c'est Android ! Ce qui semble facile est souvent assez difficile et nous avons tendance à répéter les mêmes erreurs courantes encore et encore. Voici un bref aperçu des défis auxquels j'ai été confronté :
Accélération matérielle - pourquoi dessiner en utilisant le CPU alors que le GPU est tellement meilleur ? Eh bien, il s'avère que dessiner des bitmaps sur un canevas ne peut pas être accéléré par le matériel. Du moins pas pour le moment.
OpenGL - si nous voulons une accélération matérielle, nous devons utiliser OpenGL ES ou encore mieux un framework qui fait la plupart du travail pour nous.
Chargement de bitmap - un problème de consommation de mémoire bien connu. Nous devons allouer 1 octet [0-255] de mémoire, pour chaque canal dans le #ARGB, pour afficher un seul pixel. De plus, les images que nous utilisons ont souvent des résolutions plus élevées que l'affichage de l'appareil. Les charger tous entraînera rapidement OutOfMemroyException.
Lanceurs à domicile - le fond d'écran en direct sera hébergé dans le processus de lancement à domicile, et différents lanceurs ont tendance à donner des rappels différents au service de fond d'écran en direct (notamment Nova et TouchWiz).
Autonomie de la batterie - si ce n'est pas fait correctement, les fonds d'écran animés et les widgets peuvent épuiser beaucoup de batterie. Avec tout le buzz autour de la terrible autonomie de la batterie de Lollipop (Android 5.0), la première application à utiliser sera le fond d'écran en direct.
Donc, superposer un bitmap, le peindre sur une toile, puis changer d'image au toucher pour faire un câlin, ne semble pas être un gros problème, même si cela se fait sur le processeur, n'est-ce pas ? C'est vrai, ce n'est pas un problème. Mais qui veut un fond d'écran animé statique ? Il bat le but. Le fond d'écran doit répondre à vos touches, il doit bouger lorsque vous faites défiler vos écrans d'accueil, il doit effectuer des actes de gentillesse aléatoires et vous rendre heureux.
Et il existe une astuce de développement Android pour cela. Il existe un terme appelé effet de parallaxe pour ajouter de la profondeur dans un espace à 2 dimensions. Imaginez-vous au volant d'une voiture. La maison la plus proche de vous se déplace plus vite que la montagne au loin. Le même effet peut être obtenu en déplaçant des objets à différentes vitesses sur une toile. Bien qu'ils soient tous dans le même plan, votre cerveau perçoit les objets se déplaçant plus rapidement comme plus proches de vous. Tout comme l'ajout d'ombres portées, l'effet de parallaxe ajoute un axe z.
Et c'est là que tout l'enfer se déchaîne ! Sur la plupart des appareils déplaçant l'Ooshie, la superposition météo et l'arrière-plan, à différentes vitesses, entraînent une baisse significative de la fréquence d'images. Voici comment un seul cadre est dessiné :
canvas.drawBitmap(background, 0 - offsetX / 4, 0, null); canvas.drawBitmap(weatherOverlay, 0 - offsetX / 2, 0, null); if (!validDoubleTap) { canvas.drawBitmap(ooshieNormal, positionX - offsetX, positionY, null); } else { canvas.drawBitmap(ooshieTapped, positionX - offsetX, positionY, null); }
Le offset
est un pourcentage de la distance parcourue par l'utilisateur. C'est un rappel que le moteur de papier peint fournit :
@Override public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset){ super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset); // athe current offset should be a fraction of the screen offset to achieve parallax if (!isPreview()) { float newXOffset = xOffset * 0.15f; wallpaperDrawHelper.setOffsetX(newXOffset); if (isVisible() && hasActiveSurface) { wallpaperDrawHelper.drawFrame(false); } } }
Je dois préciser que tout cela serait inutile si je savais travailler avec OpenGL ! C'est sur ma liste TODO , car tout ce qui est plus complexe que ce que nous avons maintenant nécessitera une accélération matérielle. Mais, pour le moment, je dois travailler plus dur, pas plus intelligemment (je suis ouvert aux suggestions dans les commentaires). Alors voici ce que nous avons fait :
Leçon 4 : Travaillez avec ce que vous avez
En tant que grands partisans de l'initiative minSdk=15
, nous avons dès le départ éliminé tous les appareils 2.x. L'effort pour maintenir la rétrocompatibilité est plus important que les revenus possibles des utilisateurs qui ne peuvent pas/ne veulent pas mettre à niveau leurs téléphones. Ainsi, dans la plupart des cas, nous pourrons obtenir une expérience fluide avec une option supplémentaire pour désactiver la parallaxe si vous le souhaitez.

Une autre grande optimisation est la façon dont nous traitons les bitmaps. Un effet de parallaxe très similaire peut être obtenu en dessinant deux bitmaps au lieu de trois :
Superposition Ooshie - bitmap Ooshie découpée et soigneusement mise à l'échelle (peut être accessoirisée)
Superposition combinée - un bitmap d'arrière-plan et de météo combiné qui se déplace avec une fraction de la vitesse d'Ooshie
Cette astuce de développement Android économise de la mémoire et accélère le temps de dessin, pour une légère dégradation de l'effet de parallaxe.
Lors du défilement des écrans d'accueil, des cadres seront dessinés assez souvent (idéalement plus de 30 fois par seconde). Il est crucial de ne pas les dessiner lorsque l'écran d'accueil n'est pas visible (certains écrans de verrouillage, certains tiroirs d'applications, ouverture/changement d'applications, etc.) pour minimiser l'utilisation du processeur.
Tout cela est étroitement lié aux mises à jour météorologiques. Au départ, il y avait une tâche répétitive, exécutée toutes les heures ou deux, pour synchroniser la météo, mais c'était vraiment exagéré. Si l'utilisateur ne peut pas voir le fond d'écran, les informations météo ne sont pas pertinentes. Alors maintenant, les mises à jour météo ne se produisent que lorsque le papier peint est visible.
long lastUpdate = prefStore.getLong(SharedPrefStore.Pref.WEATHER_TIMESTAMP); if (System.currentTimeMillis() - lastUpdate > Consts.WEATHER_UPDATE_INTERVAL){ // update the weather if obsolete Intent intent = new Intent(getApplicationContext(), WeatherUpdateService.class); startService(intent); }
Donc, en gros, voici la liste de contrôle pour un dessin bitmap logiciel fluide et optimisé en mémoire :
- Combiner les bitmaps une fois
- Dessinez moins de bitmaps
- Redessiner uniquement sur demande
- Évitez les tâches en arrière-plan
- Offrir aux utilisateurs un certain contrôle sur le processus
Leçon 5 : Essai. Test. Test
Je ne peux pas souligner à quel point c'est important! Jamais, je répète JAMAIS , publiez votre application avant de l'avoir testée ! Et, je ne veux pas dire que VOUS devriez faire les tests. Vous avez écrit le code, vous savez comment cela fonctionne et vous influencez le résultat en connaissant les attentes. Je ne parle pas des tests JUnit (bien que recommandés), mais des déploiements par étapes, c'est-à-dire des tests alpha et bêta.
Si vous êtes dans le développement de logiciels Android, les termes sont simples, mais voici un bref aperçu :
Testeurs alpha - un petit groupe de personnes composé de vos coéquipiers et de personnes de l'industrie, de préférence des développeurs Android. Il y a de fortes chances qu'ils aient des appareils haut de gamme et joueront avec les options des développeurs. Ils vous enverront des traces de pile, des rapports de bogues et vous donneront même des conseils et astuces d'optimisation du code/interface utilisateur. Parfait pour les premières versions avec des fonctionnalités partielles/manquantes.
Bêta-testeurs - un public beaucoup plus large avec diverses données démographiques. Les versions stables doivent être publiées ici. Même si votre niveau de ninja est trop élevé, vous ne pouvez jamais prédire, et encore moins prendre en compte, toutes les distributions Android possibles et la façon dont les gens utilisent leur téléphone.
Une fois que nous avons passé l'alpha, je pensais que nous avions terminé. Mais, mon garçon, j'avais tort ? ! Il s'est avéré que tous les utilisateurs d'Android n'ont pas d'appareils Nexus avec le dernier logiciel ! Qui saurait ? :)
Voici quelques problèmes de développement Android basés sur cette révélation :
Différents lanceurs ont différents écrans d'accueil par défaut - généralement le premier ou celui du milieu, et, pour autant que je sache, il n'y a aucun moyen de connaître sa position.
Il est difficile de centrer l'Ooshie sans connaître la position par défaut de l'écran d'accueil - d'où le curseur des paramètres pour régler le décalage de parallaxe.
Un utilisateur moyen ne sait pas ce que signifie le décalage de parallaxe - une terminologie beaucoup plus simple devrait être utilisée sur la page des paramètres.
Un utilisateur aléatoire suggérera votre prochaine fonctionnalité.
Je tiens donc à remercier tous nos bêta-testeurs pour le travail acharné qu'ils ont accompli. J'espère que l'obtention de toutes les dernières fonctionnalités avant tout le monde est une récompense décente pour leur dévouement. Si vous le souhaitez, vous pouvez également faire partie de notre communauté bêta Google+.
Leçon 6 : Laisser parler les données
Créer une application Android qui se démarque aujourd'hui est un peu plus difficile que de créer une application de calculatrice, alors qu'il n'y en avait pas en 2009. Créer l'application parfaite est difficile. Principalement parce que la perfection est dans l'œil du spectateur. Ce qui est bon pour moi ne signifie pas nécessairement que c'est bon pour vous. C'est pourquoi il est important de laisser l'application grandir. Notre feuille de route pour les nouvelles fonctionnalités montre que nous avons suffisamment de travail pour l'ensemble de 2015. Entre autres choses, nous allons bientôt inclure :
- Des sons
- Arrière-plans saisonniers
- Personnalisations (couleur de fond, packs météo, skins ooshie, etc.)
- Ooshies spécifiques à la région (ex. babushkas)
- Beaucoup de nouveaux ooshies et des façons de les débloquer
Maintenant, nous aurions peut-être gardé l'application en version bêta jusqu'à ce que tout soit terminé, mais de cette façon, nous jetons des données précieuses. Tous les bêta-testeurs ne consacreront pas une partie de leur journée à vous envoyer leurs commentaires. C'est là que vous pouvez bénéficier de l'utilisation d'outils pour obtenir des commentaires. Vous pouvez utiliser Google Analytics, Flurry, Mixpanel, Crashalytics, ACRA, etc. pour collecter des données d'utilisation.
Par exemple, en analysant les données, nous avons remarqué que les utilisateurs ne cliquent pas souvent sur le bouton des paramètres. Nous l'avons donc rendu plus apparent et avons ajouté un didacticiel rapide pour peaufiner les paramètres.
Bien qu'il s'agisse d'un processus d'arrière-plan, il peut être utilisé pour améliorer encore l'expérience utilisateur. Pourquoi ne pas montrer à l'utilisateur combien de fois :
- il/elle a reçu un câlin
- combien de jours de pluie ont été égayés par un sourire
- combien de tapotements ont été nécessaires pour déverrouiller un Ooshie avec un mini-jeu
- combien d'amis ont installé l'application à cause de vous
Ceci est important car cela donne des conséquences à leurs actions. Ne commettez pas la même erreur que fait notre système éducatif, en faisant des utilisateurs des consommateurs de contenu passifs. Rendez-les responsables. Donnez-leur la possibilité de contrôler leurs propres appareils et de créer leur propre expérience personnelle. Si vous parvenez à regrouper tout cela dans un ensemble mignon qui vole un sourire dès le premier jet, il n'est pas trop exagéré de demander à l'utilisateur des faveurs spammy pour le déverrouillage du contenu.
En fin de compte, vous devez faire évoluer le développement de votre application Android en vous basant sur ces données comme guide. Bien que principalement destinée aux mamans/enfants, cette application peut devenir populaire dans d'autres groupes démographiques. Cela ne correspond peut-être pas à notre vision initiale, mais les besoins des utilisateurs doivent être satisfaits. Sinon, ils trouveront quelqu'un qui pourra.
Conclusion
Revenons à mon échec le plus réussi TweetsPie. Malgré quelques récompenses et une énorme couverture médiatique, l'application n'a pas réussi à retenir ses utilisateurs (les raisons pour lesquelles elles dépassent le cadre de cet article).
Le succès n'est pas toujours au rendez-vous. Grâce à toute cette expérience, j'ai beaucoup appris. J'ai donné au moins une douzaine de conférences sur Comment (ne pas) échouer en tant que startup lors de divers événements et hackathons, et j'ai réussi à obtenir quelques clients chez Toptal.
Plus important encore, j'essaie de ne pas répéter les mêmes erreurs de développement Android avec Ooshies en suivant les trucs et astuces de ce guide.
Pour conclure ce long guide, ce que nous définissons comme un succès est, à un stade ultérieur, étroitement lié à ce que nous nous sommes fixé comme objectif au début. La mesure de succès la plus courante est, bien sûr, de gagner beaucoup d'argent. Peu importe si votre application réussit ou non, vous devez essayer d'y arriver, et croyez-moi à la fin, vous deviendrez une meilleure personne (avec un peu de chance, une personne qui réussira à apprendre OpenGL). Vous vous ferez de nouveaux amis, peu d'ennemis, et si vous êtes assez chanceux/intelligent, vous rendrez beaucoup d'utilisateurs heureux.
Vous pouvez consulter notre site Web ou télécharger Ooshies pour l'essayer.