Valentin Haudiquet


État actuel de Blade-Player

Blade Player. Projet commencé en avril 2018 (mon année de terminale), ayant pour but de réaliser un lecteur de musique pour Android, "liant" la bibliothèque locale, Spotify, Deezer, et SoundCloud. Un objectif annexe était pour moi d'avoir un client Spotify simple, car je déteste le client officiel (lag et interface). Depuis sa création, il est l'unique lecteur de musique que j'utilise sur mon téléphone.

Blade Screenshot

Problème : en 2018, je ne possédais qu'un smartphone sous Android 7.1 ; malgré mes tentatives de développer pour Android 8/9, les différences étaient telles que je n'arrivais pas à déboguer, surtout que les émulateurs ne fonctionnaient pas bien sur ma vieille machine, et certains cas de "race conditions" semblaient ne pas arriver dessus. En effet, un des changements majeurs d'Android 8 est l'amélioration de la sécurité par l'arrivée de startForegroundService() remplaçant startService() : un service Android ne peut plus être lancé complêtement en tâche de fond, il doit être présent comme une notification pour l'utilisateur. Une fois que j'ai eu un smartphone plus récent, j'ai pu m'adapter en ajoutant des "hacks", qui n'étaient pas forcément les manières recommandées de procéder aux changements.

Durant mes années de prépa (2018-2021), j'ai eu peu de temps et ai donc continué, au gré de l'évolution de mes téléphones, à essayer de maintenir Blade à jour. Aujourd'hui, avec Android 11 envahissant le marché et la sortie prochaine d'Android 12, ce vieux code écrit pour Android 7 doit malheuresement être changé entièrement. J'ai donc décidé de réecrire Blade de zéro, en profitant de mon expérience et en développant directement pour Android 11/12. Une version "Blade-Player v2.0" est donc prévue (pour bientôt ?).

Comme c'est la seule utilisation que j'en ai, j'ai commencé par écrire la partie Spotify. En utilisant directement des bibliothèques modernes un peu plus bas niveau que ce que j'utilisais auparavant, Retrofit (et Picasso) par exemple, j'ai pu obtenir un accès facile et rapide à la Spotify Web API. Lister la bibliothèques et les playlists de l'utilisateur est donc chose faite. Problème : la lecture de musique. Spotify ne développe plus l'ancien Playback SDK, que j'utilisais jusque là sur Blade. Ce SDK me cause déjà beaucoup de problèmes dans la version actuelle, j'espérais donc pouvoir le remplacer. Cependant, le nouveau SDK, App Remote SDK, ne sert qu'à contrôler l'application Spotify, et est donc inutilisable pour un lecteur de musique. Je me suis donc résolu à réintégrer l'ancien SDK, en essayant tant bien que mal de mitiger les problèmes en enrobant certaines fonctions de précautions comme des appels dans un nouveau thread ou en réinitialisant le lecteur à chaque lecture. Pour le moment, cette approche semble fonctionner, mais je retrouve déjà certains problèmes présent sur l'ancienne version... (erreurs de lecture incompréhensibles, arrêt du player sans raison apparente...)

La partie Spotify est encore en cours de développement ; la partie locale suivra bien vite, et il ne manquera plus que Deezer pour obtenir les mêmes fonctionnalités que sur la version précédente. Problème : là aussi, Deezer à arrêté de distribuer son SDK Android (à l'heure où j'écris ces lignes, le lien Deezer Android SDK pointe vers une erreur 404...). Il va donc falloir là aussi improviser.

Cependant, pour une note finale plus positive, les performances et la qualité de l'interface sont nettement améliorées pour cette deuxième version, ainsi que la qualité du code, me permettant à l'avenir d'ajouter de nombreuses fonctionnalités et de supporter de nouvelles sources. Blade Player devrait donc devenir de plus en plus intéressant avec le temps, ou, en tout cas, je l'espère.

Blade Screenshot 2

Projets, Blade-Player

29/05/2021