Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année...

25
Rapport de stage Développement d’une application Android Jules Dourlens Aout Decembre 2011

Transcript of Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année...

Page 1: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Rapport de stage

Développement d’une application Android

Jules Dourlens

Aout – Decembre 2011

Page 2: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 1

Table des matières :

Introduction 2

Présentation de l’entreprise 3

Le projet : Karafun Android

Introduction

Visite guidée

Fonctionnement général

Fonctionnement détaillé de l’application

Organisation du travail et de l’équipe

Vers le futur

4

5

6

10

11

17

18

Bilan personnel

Résumé chronologique

Conclusion

22

22

23

Glossaire

24

Page 3: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 2

Introduction

Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité

effectuer mon stage dans des technologies que je ne connaissais pas en privilégiant un

rapport avec le multimédia et les jeux vidéo, de plus je voulais découvrir le monde du

travail en préférant une entreprise de taille moyenne. Ces critères de recherche m’ont

donné l’opportunité d’effectuer un stage d’une durée de 6 mois dans la société Recisio

située à Lille.

L’objectif principal du stage était le développement d’un client Android permettant aux

usagers de Karafun (service de karaoké en ligne) de profiter du service sur leur

téléphone mobile. L’intérêt de ce stage de première année est une toute nouvelle

expérience en entreprise dans le domaine informatique et plus particulièrement, dans le

développement mobile. L’adaptation au monde de l’entreprise ainsi que l’apprentissage

et l’utilisation de nouvelles technologies m’ont permis de mettre en application la

méthode apprise à Epitech mais aussi d’apprendre et de découvrir de nouvelles

techniques et méthodes de travail grâce au projet réalisé lors de mon stage.

Ce rapport commence par une présentation de l’entreprise, suivie d’une description

technique de l’application qui permettra de comprendre le projet et d’en étudier des

points précis. Pour finir ce rapport nous verrons les points à améliorer, comment

procéder aux suivis, enfin nous conclurons sur un bilan à la fois personnel et technique.

Remerciements

Je tiens avant tout à remercier l’ensemble de l’entreprise sans qui ce stage n’aurait

pas eu lieu. Je souhaite particulièrement remercier Jean-Baptiste et Barthélemy

Defossez ainsi que Marion Di Giacomo pour m’avoir fait confiance en me permettant de

réaliser ce formidable stage chez Recisio et de m’avoir guidé pendant toute sa durée.

Page 4: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 3

Présentation de l’entreprise

Recisio est une entreprise basée à Lille dont l’activité principale est la publication de deux sites internet: Karafun et Version-Karaoke. Fondée en 2005 par deux frères:

Jean-Baptiste et Barthélemy Defossez, Recisio est spécialisée dans le karaoké et plus généralement dans la musique d’accompagnement. L’entreprise a su développer au fil du temps des services pour satisfaire aux mieux les afficionados de karaoké comme les personnes aimant la musique. en passant du logiciel de lecture de karaoké, à la vente de musique en version instrumentale et un logiciel de création de karaoké. Aujourd’hui, c’est avec 1,5 millions de visites par mois et un chiffre d’affaires de 3,5M € que Recisio s’impose grâce à son équipe jeune, dynamique et surtout spécialisée dans son domaine. Recisio est composée d’une vingtaine de personnes qui travaillent à la fois pour la gestion du catalogue musical, le service clientèle ainsi que dans le domaine de l’informatique (système, développement web et développement mobile). Afin de produire ses titres et assurer une qualité irréprochable, l’entreprise travaille en collaboration avec des musiciens, artistes et studios du monde entier. Cette collaboration avec différents studios permet de faire produire la musique country dans le sud des Etats-Unis, la variété française en France et la britpop au Royaume-Uni pour atteindre une qualité qui n’a pas cessé de plaire à ses clients. Version-Karaoké est un site de vente en ligne de musiques d’accompagnement, avec un catalogue riche, les reprises de chansons sont proposées en plusieurs versions, avec ou sans voix ou personnalisables. Karafun est un service de lecture de karaoké en ligne qui permet grâce à un abonnement d’animer vos soirées entre amis ou en famille.

Vie de l’entreprise

Les locaux sont ouverts toute la semaine sauf le samedi et dimanche. Chaque mois,

la matinée du premier lundi est consacrée à une réunion permettant de tenir tous les

employés au courant des actions en cours, planifier les actions à faire mais aussi de

faire remonter d’éventuels problèmes.

Page 5: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 4

Afin de mieux comprendre les services proposés par Recisio, Voici un tableau récapitulatif des deux principaux services qu’offre l’entreprise à ses clients:

Nom :

Adresse :

www.karafun.com

www.karaoke-version.com

Service :

Service de lecture de Karaokés multiplateforme.

Vente de chansons en versions instrumentales.

Comment :

Abonnement par mois ou pour 48h.

Achat par titre.

Plateforme :

Karafun Online (Web)

Karafun player (Windows)

Karafun Mobile (IPhone/Android)

Site de e-commerce.

Catalogue :

9.000 chansons

32.712 chansons avec possibilité de personnaliser ses chansons grâce à une interface intuitive permettant de régler le volume de chaque instrument.

Visiteurs par mois: (Google analytiques)

200.000 visites 140.000 visiteurs uniques

1.300.000 visites 760.000 visiteur uniques

Nombre d’inscrits:

100.000 inscrits 1.450.000 inscrits

Page 6: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 5

Le projet : Karafun Android

Introduction

Avant de parler de Karafun Android*, nous allons d’abord voir le fonctionnement général de Karafun. Karafun est un service permettant de lire des karaokés où que vous soyez. Il propose un large catalogue ainsi qu’une interface intuitive convenant à tout utilisateur. A l’heure actuelle, Karafun se décline en 4 applications: Karafun Online (Web), Karafun Player (Windows), Karafun IPhone et Karafun Android. Ces 4 applications sont natives, ce qui leur permet de s’intégrer parfaitement à la plateforme et d’assurer à l’utilisateur un confort d’utilisation tout en favorisant de bonnes performances. Bien que pour chaque application, le langage de programmation ainsi que les librairies utilisées sont différentes, toutes communiquent avec les services de Karafun pour accéder aux chansons grâce à une API commune. Un abonné peut utiliser ces 4 applications pour s’adonner à la pratique du karaoké où et quand il veut grâce à un seul abonnement. Quelques mois avant cet état des lieux, Recisio souhaitant poursuivre et améliorer son service multi plateforme par abonnement, à la manière de Deezer ou de Last.fm qui permet à partir d’un abonnement de profiter de l’offre sur internet, sur un ordinateur ou encore sur téléphone mobile. C’était le juste moment de déployer Karafun sur mobile; En effet le marché du mobile est en pleine expansion comme nous pouvons le voir à l’aide de la mise en graphique du nombre de smartphones* vendus en France qui nous montre que ce marché devient de plus en plus important.

Apres avoir fait développer et publier l’application iPhone et iPad (déposé sur l’Apple store en avril et publié’ en aout 2011) en interne par Marion Di Giacomo (ma maître de stage). Il paraissait naturel de poursuivre cette chasse aux téléphones en développant une version dédiée à la plateforme Android qui ne cesse de prendre de l’importance. Ainsi ma mission de stage était de développer l’application Android sous la tutelle et en équipe avec Marion. Le développement de l’application a duré environ 4 mois. En premier lieu nous ferons une visite guidée de l’application. Ensuite, nous parlerons dans un premier temps de l’architecture du projet et du fonctionnement de l’application dans les grandes lignes. Ensuite nous verrons individuellement certains points clés de l’application. Cette partie n’abordera pas les difficultés au niveau personnel rencontrées au cours du stage. Ceci sera traite dans la seconde partie (voir à partir de la page 22). * Les mots suivis d’un astérisque sont définis dans le glossaire à la fin du rapport.

0

2

4

6

8

10

12

14

2008 2009 2010 2011

Nombre de smartphones vendus en France en millions. (source: Gfk)

Page 7: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 6

Au niveau de la concurrence, il n’existe pas encore de tel service sur l’Android market

mais le principal concurrent de Karafun : The Karaoke Channel qui a aussi son

application IPhone annonce la sortie imminente de son application Android.

Visite guidée de l’application.

Les menus :

En lançant l’application, un écran de chargement fait patienter l’utilisateur pendant l’ouverture de la session. Si l’utilisateur n’est pas inscrit, une session est quand même ouverte en mode anonyme. L’application nécessite une connexion internet. L’utilisateur peut utiliser l’application en mode anonyme (sans compte), en mode connecte avec ou sans abonnement.

Une fois la session ouverte, l’application propose une interface en onglet particulièrement pratique pour la navigation sur téléphone portable. L’interface est adaptée à la fois aux appareils Android mais aussi aux couleurs de Karafun. Les quatre onglets sont: Sélection, Style, Recherche et Mon compte. L’onglet sélection propose à l’utilisateur les chansons les plus populaires. Cette sélection s’adapte à ce que l’utilisateur a précédemment écouté.

Page 8: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 7

Si vous avez une tablette, Karafun Android vous propose une interface profitant du grand écran qui permet une navigation plus facile. Ainsi, la vue de sélection disparait des onglets pour être affichée à droite.

L’onglet Styles, laisse l’utilisateur la

possibilité de naviguer dans le catalogue en choisissant un style au travers de ceux proposés (Rock, Chansons d’amour, Jazz..). Une fois un style ouvert, la liste des chansons appartenant à ce style est affichée.

Dans la liste des chansons, l’icône de droite en forme de i amène l’utilisateur sur la page contenant les Informations sur la chanson sélectionnée. Les informations sont l’interpréteur de la chanson, l’année de publication, l’auteur de la chanson et les ayants droit.

Page 9: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 8

La page Mon compte permet à l’utilisateur de se connecter à son compte afin de profiter pleinement de l’application en mode abonné ou inscrit non abonné. En mode non abonné, l’utilisateur peut quand même accéder aux chansons disponibles sur Karafun mais en mode prévisualisation qui ne lui permet d’écouter que 30 secondes. En cliquant sur Créer un compte, l’utilisateur est redirige vers le site de Karafun où il peut créer son compte et s’abonner si il le désire. En bas à gauche, une capture d’écran, une fois connecté. En mode connecté, le bouton Mon compte permet de consulter les informations de son abonnement à partir du navigateur de votre téléphone (à droite).

Page 10: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 9

Le Lecteur

L’affichage du karaoké propose les mêmes effets que les autres déclinaisons de Karafun. La barre en haut contient le titre de la chanson ainsi que l’artiste. L’icône i donne plus d’informations sur la chanson. Dans la barre du bas nous retrouvons les boutons habituels d’un lecteur multimédia. Les boutons sont masqués ou montrés en fonction de l’appui ou non de l’utilisateur sur l’écran. Le lecteur comme le reste de l’application peut aussi être affiché en mode paysage. Le karaoké est mis à l’échelle ce qui offre à l’utilisateur une expérience encore plus riche (capture du bas). Sous tablette, vous pouvez afficher ou non les onglets à gauche afin de naviguer dans les menus pendant l’écoute d’une chanson.

Page 11: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 10

Fonctionnement général

L’application peut être décomposée en trois modules distincts:

L’API requester.

L’interface graphique.

Le Lecteur L’API Requester est l’adaptateur entre l’API Karafun et l’application. Il permet d’envoyer au serveur de Recisio des requêtes http et d’en recevoir le résultat au format XML*. Son rôle est aussi de parser* ces réponses au format XML pour les transformer en objets utilisables (sérialisation) par le reste de l’application. Il faut bien comprendre que l’API requester est utilisé pour recevoir des informations mais est aussi utilisé pour envoyer des informations. Par exemple dans le cas d’une demande de connexion, nous pouvons utiliser la requête suivante:

http://monWebService.fr/connect?login=Jules&motDePasse=test

Le serveur répondra ensuite oui ou non en fonction de la validité des informations de connexion. . L’interface graphique permet la navigation de l’utilisateur parmi les différentes sections afin de lancer la chanson souhaitée dans le lecteur. L’interface graphique utilise le système de vues et de fragments d’Android. Ils communiquent avec l’API Karafun afin d’ouvrir une session ou de lister les chansons ou les différents styles musicaux. Sur tablette, les vues s’adaptent automatiquement à la grande taille de l’écran en changeant leur composition pour permettre de mieux profiter de votre tablette. Le lecteur permet la lecture du karaoké. Celui-ci communique avec l’API afin de recevoir toutes les informations pour afficher le karaoké et l’adresse du fichier audio à lire. En effet Karafun ne repose pas sur du streaming de vidéo comme nous pourrions l’imaginer mais sur un affichage des informations à la main qui propose comme avantage de demander moins de transfert de données, nous détaillerons ce stockage des karaokés en XML plus tard (page 11). Afin d’afficher le karaoké nous utilisons les Canvas qui permettent l’affichage de texte, formes et d’images sur une surface de l’écran. L’affichage et la mise à jour du karaoké se fait d’une façon assez proche de celle d’un jeu vidéo. Nous en décrirons un peu plus les spécificités (page 13).

Page 12: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 11

Fonctionnement détaillé de l’application

Dans cette partie, j’ai choisi de présenter quelques points précis du projet. Nous commencerons d’abord par voir la manière dont sont stockes les fichiers karaokés, ensuite nous verrons comment l’affichage des karaokés est géré et nous finirons sur la personnalisation du player d’Android. Cette découverte de points précis ne couvre pas tous les aspects du développement de Karafun Android mais développe les points spécifiques de l’application. Le reste des notions à avoir pour comprendre le projet sont des bases du développement Android et l’utilisation de l’API de Karafun.

Comment sont stockés les karaokés ?

Dans cette partie, nous allons d’abord voir comment un karaoké est stocké et étudierons les avantages et les inconvénients de cette méthode. Nous avions vu précédemment que la communication avec le serveur de Karafun qui distribue aux différents lecteurs les karaokés reçoit des requêtes http et répond en utilisant le format XML. Les karaokés sont donc stockes dans un fichier XML. Certains éléments ne sont pas dévoilés dans le simple but de ne pas surcharger l’explication, ce sont par exemple les changements de couleur de fond, des effets comme les barres de progression qui sont affichés au début des chansons ou lors de parties instrumentales. Nous allons partir d’une vue générale pour découvrir pas à pas les différents éléments composant un fichier de karaoké. En premier lieu, on peut différencier le son et l’image. Le son est donné sous forme d’une adresse sur laquelle pointe le fichier sur les serveurs de Karafun. Le lecteur n’a qu’à lire en streaming le fichier audio. Le stockage de ce qui fera l’image est un peu plus complexe mais reste à la fois tout à fait naturel. En effet le karaoké est découpé en objets de plus en plus petits et précis. Le premier objet est le karaoké, celui-ci contient une liste de pages: - Les pages possèdent comme presque tous les autres objets, une date d’apparition et une date de disparition, ces datent permettent de faire un effet de fade in/fade out afin de faire apparaitre la page de manière fluide. De plus, les informations sur la couleur du texte sont aussi stockées dans les pages et non pour un karaoké. Ce qui permet par exemple dans le cas d’un duo, d’utiliser une couleur par chanteur. Enfin, une page contient une liste de lignes: -Les lignes possèdent elles aussi une date d’apparition et de disparition ainsi qu’une position à respecter pour l’affichage ce celles-ci. Une ligne possède également une liste de mots. -Les mots ne sont qu’une liste de syllabes: -Les syllabes contiennent du texte. Par exemple si le mot est bonjour, la liste de syllabes sera “bon” et “jour”. C’est au sein des syllabes que les indications de temps sont les plus importantes pour permettre un changement de couleur des paroles en coordination avec la musique. En effet, la gestion du défilement du texte serait trop grossière si elle était faite à un niveau supérieur.

Page 13: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 12

Voici, pour conclure, un schéma permettant de résumer cette structure :

Pour conclure cette partie, je vous propose un tableau comparatif de cette méthode à

une autre qui consiste à envoyer directement une vidéo au client en streaming*.

Avantages Inconvénients

Moins de données à transférer

(moins couteux pour des forfaits mobiles et économie de la batterie)

Quel que soit le format de l’écran, l’image sera toujours de bonne qualité. (Les machines sous Android n’ont pas de format d’écran impose.)

Possibilité d’ajouter de nouveaux effets et d’éditer les karaokés existants sans devoir régénérer une vidéo.

Pour proposer un client sous une

nouvelle plateforme, le cout de développement est plus fort.

Nous pouvons noter que cette méthode de stockage des données est non seulement

avantageuse pour n’importe quel client mais encore plus adaptée aux téléphones

mobiles.

Le choix du stockage en vidéo est utilisé par le concurrent : The Karaoke Channel sur

son application IPhone. Bien que les vidéos permettent des animations plus riches,

beaucoup d’utilisateurs sont mécontents à cause des chargements trop longs.

Page 14: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 13

L’affichage du karaoké

Pour la lecture ainsi que l’affichage du karaoké, nous retrouvons une architecture proche à celle utilisée lors de la programmation d’un jeu vidéo à la seule différence près que tout est en fonction de la position où l’on se trouve dans le fichier audio. Cette position est précise à la milliseconde près. En plus de devoir être la plus fluide possible et donc optimisée, cette partie est aussi la plus complexe du programme car pour son bon fonctionnement, elle utilise deux threads*. Le premier thread est celui servant à afficher les images, le second thread permet de charger les images en tâche de fond afin de ne pas perturber l’affichage. Le thread d’affichage compare les temps pour les pages et maintiens une liste de pages qui sont en cours d’affichage. Afin d’être affichée, une page a besoin d’être chargée en mémoire. Les pages ajoutées à la liste des pages courantes passent en fait avant dans une file d’attente pour qu’elles soient traitées par le thread de chargement. Ce thread de chargement, pour chaque page parcourt chaque ligne et chaque mot pour arriver à chaque syllabe afin de créer deux images du texte que contient la syllabe. Nous avons besoins de deux images de couleur différentes représentant le même texte afin de créer l’effet de défilement qui est fait grâce à l’affichage du texte en deux couleurs. Ce qui implique qu’une partie du texte sera la première image affichée et l’autre appartiendra à la seconde. En réalité le thread ne crée pas vraiment les deux images, car pour éviter toute allocation de mémoire pendant la lecture du karaoké, nous conservons une collection d’images vierges qui sont utilisées au fil du karaoké. L’opération de chargement d’une syllabe revient donc tout simplement à récupérer deux images libres dans la collection, s’assurer qu’elles sont transparentes et afficher le texte dessus. Une fois que les pages ne doivent plus être affichées, elles sont retirées de la liste courante des pages et remises dans la liste initiale des pages.

Ensuite, à chaque itération, le thread d’affichage parcourt toutes les pages présentes dans la liste des pages courantes et les affiche. En fait il redescend au niveau des lignes, des mots et des syllabes pour afficher les images que le thread de chargement avait précédemment chargées. Afin d’afficher la bonne progression sur les syllabes, il suffit tout simplement de réaliser un produit en croix. Nous connaissons la largeur de l’image, le temps de début et le temps de fin de la syllabe ainsi que la position actuelle dans la chanson. Il suffit donc de faire un produit en croix pour connaitre la largeur de l’image à afficher en mode “sélectionnée” et l’autre partie de l’image à afficher en mode “non sélectionnée“.

Page 15: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 14

Afin de garder une application agréable d’utilisation lors de la lecture d’un karaoké, voici quelques conseils à suivre obligatoirement :

Eviter toute allocation mémoire. En Java, une allocation mémoire va de la simple instanciation d’un objet à la manipulation d’objets comme les chaînes de caractères (concaténation, remplacement..). Ainsi vous verrez que dans le lecteur, énormément d’objets sont initialisés avant le début de la lecture du karaoké et possèdent des méthodes prepare() qui leur permettent de mobiliser les ressources une seule fois au début du karaoké. Une allocation mémoire est une opération peu coûteuse mais favorise des passages du garbage collector (GC) qui lui est assez couteux en ressources. Le garbage collector permet de libérer la mémoire qui n’est plus utilisée pour permettre l’allocation de nouvelles ressources.

Eviter toute opération sur des nombres à virgule (float, double). Sur certaines machines Android, une opération sur un nombre à virgule peut être 4 fois plus longue que sur un entier. La fonction permettant de récupérer la position dans le fichier audio en lecture nous renvoyait un chiffre à virgule en secondes. Pour optimiser l’application, nous avons multiplié tous nos temps par 1000 pour les exprimer en entiers (int).

Cela dépend des cas, mais des optimisations sont possibles lors de la création d’images. En effet, par défaut Android crée les images en Bitmap ARGB-8888, ce qui signifie qu’un pixel sera stocké sur 32 bits. Si vous n’avez pas besoin d’une si belle qualité (votre image n’a pas de dégradés ou forte nuance) vous pouvez utiliser l’ARGB-4444 stocké sur 16 bits. Dans le cas où vous n’avez pas besoin de transparence, on préfèrera le RGB-565 qui conserve une bonne qualité mais ne permet pas de définir de transparence.

Afin d’éviter les allocations dues à l’utilisation de listes ou de collections que Java fournit nativement, il est essentiel de recoder des listes sous forme de tableau statique (règle 1).

Les itérations génériques sous forme de « for (type elem : liste) » sont à éviter car malgré leur côté pratique, ces itérations allouent un objet iterator (règle 1).

Ces règles s’ajoutent aux règles standards de l’optimisation dans n’importe quel environnement. En effet, il est naturel d’éviter des traitements lourds ou des traitements qui sont inutiles. Sur Android comme sur les autres plateformes mobiles, un programme lent repoussera l’utilisateur davantage qui peut la désinstaller en appuyant sur un seul bouton. En effet, l’utilisateur recherche avant tout de l’efficacité et de la rapidité lors d’une utilisation nomade. De plus, plus le programme est lourd et non optimisé, plus il consomme de la batterie.

Page 16: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 15

Le lecteur personnalisé

L’interface graphique du lecteur a dû être entièrement recodée afin de pouvoir ajouter facilement des éléments indispensables au lecteur. Par exemple le nom de la chanson ainsi que le nom de l’artiste et le bouton permettant d’afficher plus d’informations sur la chanson. Nous sommes donc repartis du code source du MediaPlayer d’Android disponible en ligne afin de recomposer notre propre interface graphique. De plus, nous avons aussi eu l’occasion de déplacer et redimensionner certains éléments du lecteur afin de mieux correspondre à l’univers de Karafun. Enfin, ayant supprimé des fonctionnalités dont nous ne nous servions pas de celui-ci, c’est aussi un gain de performances. Voici deux captures d’écran montrant, le lecteur de base à gauche, et celui que nous avons produit à droite.

Il est intéressant de voir que Deezer, Jambo et TinyShark ont aussi du remanier l’apparence du MediaPlayer d’Android.

Page 17: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 16

En plus de l’apparence que nous avons retravaillée, une autre chose que nous avons dû remanier pour notre utilisation était la précision à laquelle la méthode getCurrentTime() nous donne la position à laquelle nous sommes dans le fichier en lecture. La méthode getCurrentTime() renvois une position qui n’est pas exacte. En effet, celle-ci saute d’intervalle en intervalle ce qui donne une impression de saccade lors de la lecture d’un morceau. Afin de corriger le problème, nous démarrons un timer lors de la lecture d’un karaoké qui permet de vérifier la cohérence du résultat de la méthode getCurrenTime() et dans le cas d’un retard d’ajouter une petite valeur à chaque fois afin d’éviter ce phénomène d’escalier. Si le lecteur est-mis en pause ce timer s’arrête. Voici un graphique représentant la position en millisecondes au cours la lecture d’un fichier audio sous Android avec et sans notre correction. (Ces données ont était extraites à l’aide d’un HTC Sensation.) Sans notre correctif, nous pouvons bien constater la présence de plateaux qui rendent l’affichage du karaoké particulièrement désagréable. En effet la courbe de couleur clair (Sans correction) évolue bien en suivant le modèle d’un escalier contrairement à celle bénéficiant de la correction qui suit le trajet d’une ligne.

Ce phénomène d’escalier peut être expliqué facilement par le fait que lors de la lecture

d’un fichier audio: mp3 par exemple. Le fichier est encodé avec un framerate. Ce qui

signifie que X millisecondes d’audio seront encodées sur N bits. Pour lire le fichier, un

buffer se déplace de N bits en N bits afin de lire le fichier. Ainsi la valeur que renvoi la

fonction getCurrentTime() n’est pas la vraie valeur mais celle où commence le frame en

cours de lecture.

Ce problème n’est pas spécifique à la plateforme Android, en effet il a été rencontre lors

du développement de Karafun sous d’autres plateformes.

0

500

1000

1500

2000

2500

1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82

Avec correction Sans correction

Page 18: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 17

Organisation du travail en équipe et environnement de développement

Organisation de l’équipe

Deux personnes collaborant sur le projet ne constituent pas une grosse équipe, ce qui

facilite l’organisation du travail en équipe. Toutefois, la gestion des tâches à faire

(Implémentation d’une fonctionnalité, correction d’un bug) chez Recisio se fait depuis

peu grâce au logiciel JIRA*. Des tâches sont donc facilement assignables dans le cas

d’un bug découvert. De plus, JIRA propose une gestion des tâches par catégories ainsi

que par priorités. Ayant des postes de travail proches, au moindre soucis ou doute nous

pouvions facilement en parler. Afin de communiquer rapidement, le logiciel MSN est

aussi utilisé dans l’entreprise.

Logiciels utilisés

Afin de développer le projet, nous avons utilisé l’ÍDE Eclipse qui possède l’avantage

d’être multiplateforme. De plus, son architecture autour de plug-ins permet d’intégrer

parfaitement le SDK* Android ainsi que des outils pour le débogage, l’optimisation du

projet ou encore la gestion des versions du projet avec le plugin subclipse (SVN). Les

autres plugins intéressants à découvrir sont Eclipse MAT qui permet d’analyser les

allocations mémoires; Eclipse Color Theme qui permet de changer facilement les

couleurs de votre traitement de texte si vous êtes par exemple habitués aux consoles

blanc sur blanc. Adb monkey peut aussi être utile pour découvrir des

dysfonctionnements, c’est un programme disponible dans le SDK permettant de simuler

l’appui sur des touches du téléphone au hasard. L’ensemble de ces logiciels ont

l’avantage d’être gratuits et pour certains libres et open source.

Page 19: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 18

Vers le futur de Karafun Android

Bilan depuis la sortie

L’application a été publiée sur l’Android market le 14 novembre. En un mois, 3829

installations et au 14 décembre, plus de 1000 personnes ont l’application sur leur téléphone.

Voici l’évolution du nombre d’installation en fonction du temps. Ce graphique est directement

issu de l’Android market.

Une semaine après la sortie de l’application, nous avons mis à jour celle-ci suite à la

remontée de certains bugs. En effet, étant donné le nombre d’appareils différents ainsi que

l’instabilité des connexions mobiles, des bugs ont fait leur apparition. Nous n’avions jamais

constaté ces bugs auparavant.

L’Android market nous dévoile aussi les statistiques concernant les utilisateurs. Nous

pouvons par exemple connaitre la nationalité des utilisateurs, les appareils utilises, ainsi que

la version sous laquelle se trouve les machines. Ces informations peuvent être utiles pour la

correction de bugs. Il est aussi possible de voir ce que les gens pensent de l’application par

le biais des commentaires et des votes. Voici les résultats que Karafun possède

actuellement.

Page 20: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 19

Maintenir l’application

La première mission concernant Karafun serait le maintien de l’application. Comme nous

venons de le voir, grâce au système d’administration de la publication d’application sur

l’Android market vous pouvez voir les erreurs que rencontrent les utilisateurs avec

l’exception levée.

Par exemple, ce rapport nous montre de quel type d’erreur il s’agit et où elle a était

rencontrée dans le code.

Par exemple dans ce cas, nous pouvons voir que l’erreur est causée par l’accès à la valeur

d’un pointeur non initialisé. Nous retrouvons aussi le nombre de personnes ayant rencontrés

ce bug, ces utilisateurs peuvent aussi laisser des commentaires.

En plus des informations que nous donne l’Android market, il est possible de consulter

l’historique des connexions à l’api de Karafun. Ainsi on peut facilement connaitre ce qu’a fait

l’utilisateur avant de rencontrer un bug.

Page 21: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 20

Dans cette capture, on peut voir que l’utilisateur (moi-même) a dans l’ordre ouvert une

session en mode connecté, affiché la liste principale des chansons. Sur cette liste, j’ai

choisis de jouer la chanson ayant l’id 34797. Le paramètre bw spécifie la qualité du fichier

sonore demandé, dans le cadre d’une connexion edge elle est faible (50 kbps), moyenne

(200 kbps) pour une connexion 3G et élevée (600 kbps) pour une connexion en Wifi. Une

fois que l’on quitte une chanson, la liste de la sélection se mets à jour puis je suis allé sur

l’onglet style, affiché les chansons d’un style, puis j’ai écouté une chanson avant de quitter

l’application.

Ajouts de nouvelles fonctions

Voici une liste non exhaustive des améliorations de l’application dans le futur. Un point

important à garder en tête est que les différents clients ont l’obligation de rester uniforme. En

effet, il serait dérangeant qu’un client n’ai pas les mêmes fonctionnalités que les autres.

Enregistrement des performances

Comme le dis le deuxième commentaire que nous avons eu suite à la publication de

l’application sur le market.

Il serait intéressant de permettre à l’utilisateur de pouvoir s’enregistrer. Cet enregistrement

pourrait être simplement sonore mais aussi visuel à l’aide de la camera coté écran que

possèdent certains téléphones.

Page 22: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 21

Ecran externe

L’utilisation du terminal Android comme télécommande pour choisir les chansons et la

diffusion sur un écran de télévision pourrait être rendue possible par la popularisation

des sorties vidéos sur les appareils mobiles. Cette fonctionnalité est déjà implémentée

dans le client IPhone mais ne peut malheureusement pas encore être implémentée sur

les terminaux Android. En effet, aucune fonction ne permet encore au développeur de

choisir quoi afficher sur l’écran externe. Il est pour l’instant simplement possible de

cloner l’écran. Il existe quand même des librairies qui permettent de gérer un écran

externe mais elles sont spécifiques aux appareils des marques Motorola et HTC.

Rendre possible la création de compte depuis l’application

Pour l’instant, il est impossible de créer un compte directement depuis le terminal

Android, l’application redirige l’utilisateur vers le site de Karafun où il peut créer son

compte et s’abonner.

Cette intégration serait possible de deux manières différentes.

La première serait la création d’une version mobile de la page d’inscription et

d’abonnement de Karafun. Cette création pourrait se faire à l’aide du Framework

JQuery mobile qui permettrait de rendre l’affichage standard sur Android et

IPhone.

La seconde solution serait la création de requêtes dans l’API Karafun qui

permettraient de créer un compte. De cette manière le formulaire d’inscription

serait intégré à l’application.

Le scoring

Le scoring permet de savoir si l’utilisateur chante juste ou non. Ainsi, Karafun pourrait

prendre une dimension plus vidéo ludique à la manière du célèbre Singstar. Il est évident

que cette fonctionnalité pourrait attirer encore plus d’utilisateurs. Toutefois, cette

fonctionnalité obligera les fichiers de karaoké à contenir des informations concernant la

tonalité des paroles. A noter que Karaoke Party, un concurrent de Karafun propose à ses

abonnés ce service. Toutefois ils ne proposent leurs services que sur navigateur internet.

Page 23: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 22

Bilan personnel

Ce bilan personnel se compose de deux parties : Un bref résumé chronologique de ce

que j’ai fait au cours de mon stage qui permet de se représenter le reste du rapport d’un

point de vue chronologique. Ensuite, nous passerons à la conclusion générale, ce que

j’ai appris, ce que j’ai aimé.

Résumé Chronologique

Ce stage était pour moi une opportunité de découvrir le monde de l’entreprise. Avant

cette expérience, je n’avais qu’une idée approximative de l’entreprise et surtout de

comment le développement d’application pouvait s’y passer.

Ayant débuté mon stage en août, l’adaptation au Java et à la plateforme Android s’est

faite assez rapidement. La prise en main du projet s’est faite naturellement grâce à

l’accompagnement de Marion. J’ai eu la chance de ne pas arriver seul face à un projet à

créer de toute pièce. Certaines pièces maitresses comme la gestion des requêtes

avaient déjà étaient commencé. J’ai donc directement commencé à travailler sur les

menus et petit à petit j’ai eu l’occasion de retoucher les pièces déjà codées, pour les

ajuster, m’en inspirer ou les compléter. Un cahier des charges était présent en plus de

l’application déjà réalisée pour IPhone, ce qui permettait d’avoir une bonne visibilité des

choses à faire.

J’ai ensuite eu la chance de pouvoir choisir quelle librairie utiliser pour la réalisation du

lecteur. Cette période de deux semaines lors des vacances de mon maître de stage était

intéressante car j’ai eu la chance de pouvoir tester toutes les bibliothèques utiles à la

création de jeux vidéo sous Android et choisir celle qui conviendra le mieux au client

Karafun. En évaluant, à la fois les performances, les fonctionnalités, la pertinence de la

documentation et la stabilité des librairies, j’ai pu choisir celle avec laquelle nous avons

réussi à mener à bien le client Android.

Ensuite, l’intégration du lecteur était l’étape la plus enrichissante au niveau du code

car c’est une partie tournée vers le multimédia contrairement à la réalisation des menus.

L’optimisation ainsi que la standardisation de l’affichage à cause du grand nombre de

terminaux Android différents étaient les deux points importants.

Pour finir, la phase de vérification et publication de l’application était aussi importante

car il est important de sortir une application comportant le moins de bug possibles. Par la

suite, les rapports de certains bugs mystérieux nous ont permis de revoir certains points

de l’application et de sortir une deuxième version qui semble être vraiment stable.

Le développement de cette application était pour moi une expérience enrichissante qui

m’a permis d’apprendre de nouvelles technologies ainsi qu’un rythme de travail diffèrent.

De plus, programmer aux cotés de quelqu’un de plus expérimenté que soi permet de

facilement avoir des retours sur les choses que j’ai pu mal faire et de tirer des leçons

pour pouvoir progresser.

Page 24: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 23

Conclusion

Ce stage a été pour moi l’occasion de découvrir et d’apprendre énormément de

notions qui j’en suis sûr valoriseront mon projet professionnel. Il m’a permis d’acquérir de

la méthode, de la rigueur ainsi que les technologies permettant le développement sur

Android mais aussi sur le fonctionnement plus général d’une entreprise. De plus, ces 6

mois de stage m’ont donnés l’opportunité de découvrir au quotidien la vie d’un salarié

avec des horaires fixes tout en devant remplir les obligations de la vie en dehors du

travail.

D’un point de vue technique, j’ai pu apprendre le Java, l’utilisation d’une API avec un

échange de données en XML. J’ai aussi pu acquérir des notions de développement sur

mobile et en plus particulier le multimédia qui demande une organisation différente par

rapport aux plateformes moins limitées. De plus, j’ai eu l’occasion de me confronter à

des problèmes d’architecture due au caractère orienté objet du Java que je ne

connaissais sans jamais avoir vraiment pratiqué.

Ensuite l’organisation du projet était une partie intéressante. En effet je n’avais que très

rarement utilisé un gestionnaire de versions. De plus nous avons utilisé au début du

projet les services de Teamlab qui permet de gérer des tâches. Par la suite, nous avons

utilisé Jira qui permet une gestion du projet encore plus approfondie. Cette expérience

d’utilisation de solutions facilitant la gestion d’un projet m’a donné l’envie de poursuivre

l’utilisation de ces logiciels pour mes projets personnels mais aussi scolaires.

L’adaptation du logiciel au client ciblé est un point intéressant. Le fait de développer un

logiciel destiné au grand public est une expérience enrichissante. Comment l'utilisateur

va découvrir l’application ? Comment va-t-il s’en servir? Le logiciel doit être simpliste,

réactif et beau ce qui a était rendu possible grâce au travail de Quentin Lenne travaillant

comme graphiste chez Recisio. Par contre, la simplicité empêche l’ajout de petites

fonctionnalités bonus ou d’options de configuration qui sont chères aux yeux des

utilisateurs avancés.

Enfin, j’ai découvert les problématiques liées à la commercialisation d’un logiciel. En

effet, l’application doit être maintenue et suivie par l’entreprise pour ne pas délaisser le

client. Une entreprise comme Recisio, qui travaille dans le milieu de la musique est aussi

confrontée a des problèmes liés aux droits d’auteurs et ayants droits. Ces problèmes

soulignent le fait que les lois et la société actuelle ne sont pas encore adaptées aux

nouvelles technologies.

Ce stage fut donc pour moi la chance d’apprendre beaucoup et d’augmenter mon

ouverture d’esprit face au monde de l’entreprise et des nouvelles technologies. Je suis

sûre de garder un très bon souvenir de ces six mois de stage et j’espère pouvoir mettre

en application tout ce que j’ai appris dans mes futurs projets.

Page 25: Rapport de stage · Page 2 Introduction Dans le cadre du stage qui conclue notre première année à Epitech, j’ai souhaité effectuer mon stage dans des technologies que je ne

Page 24

Glossaire :

Nom Définition

Android C’est un système d’exploitation open source pour smartphone, tablette et téléviseur. La première version d’Android date de 2007.

API Application Programming Interface, permet l’interaction des programmes les uns avec les autres.

IDE Integrated Development Environment, c’est un programme regroupant un ensemble d’outils pour le développement de logiciels. Bien souvent, un IDE regroupe un éditeur de texte, un compilateur et un débogueur.

JIRA C’est un logiciel de suivi de bugs, et un système de gestion de projets développé par Atlassian Software Systems. JIRA n’est pas un acronyme mais une contraction de Gojira (le nom japonais de Godzilla).

Parser Aussi appelé l’analyse syntaxique. Permet à partir de règles définies de reconstruire un objet qui sera utilisable dans le programme.

SDK Software Developement Kit, c’est un ensemble d’outils permettant aux développeurs de créer des applications pour une plateforme précise.

Smartphone C’est un téléphone mobile disposant aussi des fonctions d’un assistant numérique personnel. Il peut aussi fournir les fonctionnalités d’agenda, de navigation sur le web, de GPS.

Streaming C’est la lecture en continu d’un fichier situé sur un serveur distant. Il n’est pas obligatoire d’attendre la fin du téléchargement avant de commencer la lecture du fichier.

Thread Un thread est l’exécution d’un ensemble d’instructions. Du point de vue de l’utilisateur ces exécutions semblent se dérouler en parallèle.

XML Extensible Markup Language est un langage informatique de balisage générique qui permet à l’utilisateur de stocker facilement ce qu’il veut dedans.