Bye Android. Bonjour Android.

Après presque 10 ans de développement natif pour Android, je ne veux plus perdre de temps inutilement. Et je veux être certain que ceux qui me font confiance (ça c'est vous) profitent de la meilleure voie possible.

Depuis plusieurs mois j'explore d'autres solutions que le Kotlin et le natif pour créer des apps Android.

Nous reviendrons bientôt sur ces solutions, mais voici déjà les raisons de mon choix.

J'utilise au quotidien 2 kits de développement (SDK) natifs : celui d'iOS et celui de Android. Je crée des apps avec ces kits, mais je suis aussi un enseignant en développement mobile, qui doit les expliquer à des étudiants de tous niveaux.

Des outils complexes en perpetuelle évolution

Comme beaucoup de développeurs Android j'ai commencé en Java, avant même qu'Android Studio existe. Les outils étaient austères et depuis ils se sont améliorés, sans cesse. Avec l'arrivée du Kotlin et des dernières versions d'Android Studio, il est devenu enfin possible de débuter la programmation sur Android.

Pourtant à chaque fois que j'enseigne Android à des débutants, tout semble compliqué :

  • l'installation de l'IDE, des émulateurs et des drivers spécifiques à chaque mobile de tests
  • les concepts de bases à maîtriser pour créer des apps simples (Activity, Fragments, Intents, Layout, Notifications, Gradle, etc.)
  • les API de bases, complexifiées dès leurs première utilisation : pensez à la première fois que vous avez découvert le RecyclerView...

Et même en tant que développeur expérimenté, je suis épuisé à l'idée de gérer les problèmes courants :

  • la fragmentation des versions, qui va toujours de pair avec sa meilleure amie : rétrocompatibilité
  • les multiples solutions pour un même problème : bibliothèques intégrées, Jetpack, Material Design, etc.
  • les réorganisations annuelles ou tout doit être redécouvert (Jetpack, Fragments, Compose, etc.)

Chaque nouvelle fonctionnalité est pensée pour faire plaisir à tous les types de développeurs et à tous les cas d'utilisation. Tant pis pour les réglages par défaut qui conviendraient à 80% des applications. Tout porte à croire que Pareto est le pire ennemi des concepteurs du SDK d'Android.

Des ressources éparpillées aux 4 coins du web

Naïvement j'ai longtemps pensé que tout ce dont j'avais besoin pour apprendre et me tenir à jour en tant que developpeur Android se trouverait sur https://developer.android.com.

Il y a beaucoup de ressources sur le site officiel des développeurs Android, mais pour des raisons que j'ignore, il n'est qu'un des moyens utilisés pour répandre la bonne parole. Il faut aussi découvrir et surveiller d'autres sites pour trouver des annonces officielles :

Et il y en a probablement d'autres que je n'ai pas encore découvert.

Un marché étrange

Le PlayStore est tellement particulier : il y a beaucoup d'utilisateurs, mais peu qui acceptent de payer pour des applications ou des services.

Regardez ces statistiques de AppAnnie, concernant les dépenses générés sur iOS (AppStore) et Android (PlayStore) en 2019 :env

Dépenses utilisateurs pour les apps mobiles du Top 250 US (hors jeux). Source AppAnnie.

Je ne suis pas un spécialiste des statistiques mais j'ai vraiment l'impression que les revenus sur Google Play sont largement inférieurs à ceux d'iOS sur l'AppStore.

Pourtant il y a beaucoup plus d'utilisateurs Android qu'iOS : en Septembre 2020, le ratio Android/iOS est de 80/20 en France, et de 58/42 aux USA selon Kantar Word Panel.

On est donc obligé de développer des version Android de nos solutions, mais elles doivent être gratuites pour la plupart.

Quelles solutions pour l'avenir ?

Lorsque je compare la complexité du développement avec le marché du mobile sur Android, je me demande si le développement natif se justifie vraiment sur cette plateforme.

Sur iOS, les utilisateurs sont prêts à payer pour avoir des apps de qualité qui exploitent chaque nouvelle fonctionnalité de leur iPhone.

Sur Android il semble que les utilisateurs privilégient les apps gratuites aux apps payantes même si elles sont de qualité.

Choisir de développer en 100% natif requiert plus de travail, mais permet de gagner en qualité sur chacune des plateforme.

Depuis quelques mois je me suis mis à tester plus sérieusement d'autres solutions pour mes élèves et aussi pour les apps de mes clients. J'apprécie de plus en plus Flutter qui me permet de créer simplement une app Android en Dart. Bien plus rapidement qu'avec le SDK natif en Kotlin.

Cerise sur le gâteau, le même code pourra être converti en site web par Flutter. Sans que j'ai à saisir une seule ligne de HTML, CSS ou Javascript. Le rêve pour moi.

Je suis encore en pleine réflexion, mais j'envisage sérieusement la solution suivante :

  • Swift + SwiftUI pour créer les version iOS, iPadOS et macOS de mes apps
  • Dart + Flutter pour créer les versions Android, Web et Windows de mes apps

Seulement 2 bases de code pour 6 plateformes. Et en plus ce sont 2 bases de code agréables à gérer 🤩

Et vous, qu'en pensez-vous ?