1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Études de lapproche dingénierie dirigée par les modèles pour le développement des applications mobiles

57 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 1,16 MB

Nội dung

Institut Francophone International MEMOIRE DE FIN D’ETUDES MASTER D’INFORMATIQUE Option : Reseaux et Systemes Communicants Annee academique : 2013 - 2014 Sujet : Etudes de l’approche d’ingenierie dirigee par les modeles pour le developpement des applications mobiles Auteur : SIRISANG Jariya Etudiant de l’Institut Francophone International Encadrant : HO Tuong Vinh, Ph.D L’Institut Francophone International (IFI) (IFI) 21 janvier 2015 REMERCIEMENTS Je voudrais tout d’abord remercier Monsieur Victor Moraru qui m’a conseill ce stage pour la n de mes etudes Je tiens a remercier Monsieur HO Tuong Vinh qui m’a propose ce sujet interessant et encadr pendant six mois de mon stage Je le remercie de son contact chaleureux, ses conseils, ses soutiens et ses encouragements Merci egalement toutes les reponses de mes amis qui m’aident beaucoup de nir ce travail Merci en n a mes parents pour leur soutien et leur encouragement a tout l’instant i RESUME Ce sujet du stage situe dans le domaine du genie logiciel Il vise a etudier l’approche d’ingenierie dirigee par les modeles pour le developpement des applications mobiles Puisque la consommation des appareils mobiles augmente rapidement, les societes des applications mobiles ont envie de pro ter cette situation Mais il n’est pas facile de developper une application qui peut fonctionner sur les plateformes di erentes telque iOS, Android, WindowsPhone, BlackBerry etc Il est necessaire de developper l’applica-tion separement pour chaque plateforme En general, pour developper une application, on suit l’etape d’interroger des exigences, de faire l’analyse, ensuite on concoit la concep-tion et commence a coder Ce processus prend beaucoup de temps et de co^uts Et il aurait un grand probleme lorsque le produit ne correspond pas aux exigences Dans le cadre de ce stage, on propose une solution qui applique le principe de l’approche d’ingenierie dirigee par les modeles pour le developpement des applications mobiles Celle-ci aiderait au developpeur de reduire le temps et le co^ut de developpement gr^ace aux avantages des modeles L’idee de l’approche d’ingenierie dirigee par les modeles est que le developpement de l’application est guide par les modeles Elle est tres bien adaptee avec l’approche Cross-platform a n de realiser les applications mobiles pour des di erences systemes d’exploitation Cela reduit le temps et des ressources pour le developpement Le code est automatiquement gener a partir des modeles qui sont de nis par le developpeur Mot-cle : Ingenierie dirigee par les modeles, Application mobile, Multi-plateforme, DSL, Modelisation ii ABSTRACT This subject of the internship is in the eld of software engineering It aims to study the mobile application development approach particularly in the engineering model driven approach Since the consumption of mobile devices augumente quickly, the manufacturer of mobiles applications would like to take bene t of this situation But it is not easy to develop an application that could execute on di erent platforms such as IOS, Android, WindowsPhone, Blackberry etc It is necessary to develop separately for each platform In general, to develop an application, we follow the step of getting the requirements, analyze the requirements and then designing and coding This process takes many time and costs And it would be a big problem when the product does not correspond to user requirements We propose a solution that applies Model driven engineering approach for the development of mobiles applications, which will help to reduce the development’s time and costs through the advantages of models The idea for the approach of model driven engineering that is the application development is guided by the models It is very well suited to the "Cross-platform" approach to realize the mobile application for the di erences in operating systems It reduces development’s time and resources The source code is automatically generated from the models that are de ned by the developer The generated application is truly native and causes less of the problems of non-response requiments Keyword : Model Driven Engineering, Mobile Application, Cross- platform, DSL, Modelling iii Table des matieres REMERCIEMENTS RESUME ABSTRACT Contents List of Figures List of Tables Introduction 1.1 1.2 1.3 Problematique Motivation et objectif Plan du document Recherche bibliographique 2.1 Quelques Frameworks pour le developpem 2.1.1 2.1.2 2.1.3 2.1.4 2.2 IDM :Ingenierie Dirigee par les Modeles pour le developpement des logiciels 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3 Inter^et de l’approche d’ingenierie dirigee par les modeles pour le developpement des applications mobiles iv Contents Solution proposee 3.1 Methodologie et technique de l’approche 3.1.1 3.1.2 3.2 Solution proposee 3.2.1 3.2.2 Implementation et Experimentation 4.1 Implementation de la solution 4.1.1 4.1.2 4.2 Application de la methode proposee 4.2.1 4.2.2 4.2.3 4.3 Evaluation Conclusion et perspective 5.1 5.2 Conclusion Perspective A Modele PIM de l’application simple avec DSL B Bibliographie Modele PIM de l’application de jeu Sudoku avec DSL 47 Table des gures 2.1 2.2 2.3 2.4 L’Adobe AIR Le jQuery Mobile Framwork Le PhoneGap L’architecture de MDA 3.1 3.2 3.3 3.4 3.5 3.6 3.7 Le principe de processus de MDA L’hierarchie de modeles de MDA Le plan du ux de MDA La vue l’ensemble de solution L’etape de realisation de PIM L’etape de realisation de generateur Les repertoires et chiers necessaires de l’application Android 4.1 4.2 4.3 4.4 4.5 Le concept de DSL L’architecture de l’Acceleo Le concept de la transformation pour la plateforme Android La guration de l’execution d’Acceleo La location du code gener vi Liste des tableaux 4.1 4.2 4.3 4.4 4.5 4.6 La comparaison d’interface de Main La comparaison d’interface de Second La comparaison d’interface de Main La comparaison d’interface de Help La comparaison d’interface de level La comparaison d’interface de Game vii Chapitre Introduction Le premier chapitre concerne la presentation de la problematique du sujet Etude de l’approche d’ingenierie dirigee par les modeles pour le developpement des applications mobiles On presente la motivation et l’objectif du travail 1.1 Problematique Actuellement, la tendance de l’utilisation des appareils mobiles (par exemple Smartphone, Tablet, Phablet etc.) augmente rapidement Gr^ace a cela, le marche des applications mobiles est de plus en plus elargi Chaque jour, les societes lancent des nouvelles applications pour repondre a l’augmentation de consommation des appareils mobiles et aux besoins des utilisateurs Cependant, des applications mobiles sont souvent fournis pour plusieurs systemes d’exploitation (Android, iOS, WindowsPhone) Il est essentiel de developper separement pour chaque plateforme en raison de details di erents dans la programmation des interfaces, des bibliotheques, et des langages de programmation Dans l’industrie de developpement du logiciel, on trouve un grand besoin du developpement C’est un e ort de realiser un logiciel complexe avec la courte duree et moins de budget Cette situation existe aussi dans le developpement des applica-tions pour les appareils mobiles Puisque l’utilisation des appareils mobiles est de plus en plus populaire, la competition entre des societes d’application mobile est plus forte S^urement, la societ qui peut recevoir le plus de bene ts est celle qui peut produire plus rapidement et depenser moins de ressource du developpement des applications pour la sortie des nouveaux appareils mobiles et pour les di erences plateformes Chapter Introduction Les applications sont separement fournis pour les di erents plateformes, neanmoins les fonctionnalites pour chaque plates-formes sont de m^emes Donc il existe la repetition de code Si l’on peut eviter la repetition dans le developpement, on peut aussi diminuer le temps et le budget Les chercheurs tentaient d’etudier des approches qui peuvent resoudre des proble-matiques sur : { L’evitement de repetition de code avec une structure generalisee pour la reduc-tion du temps de developpement { La probabilite de baisser d’erreur ou faciliter de la correction { Le changement dans le code Il est moins complique de modi er si des fonction-nalites sont changees { La capacite de rediger des fonctionnalites pour les di erents langages, en les appelants une fois et de reduire le temps de developpement Par exemple, la de nition d’une entit en Java, Objectif c ,c# peut ^etre faite par ecrivant une seule fois dans la langue speci que a un domaine et de generer les di erentes versions { Generalement, la methode de developpement d’un logiciel commence par l’etape de reunir des requ^etes et puis on analyse ces requ^etes a n d’avoir la concep-tion du produit En suite, la conception est prise a l’implementation du logi-ciel Pareillement pour celle de l’application mobile, a l’etape d’implementation, les developpeurs devraient realiser l’implementation qui supporte les di erences plates-formes pour la raison mentionn ci-dessus En plus, cette methode pour-rait aussi agrandir l’intervalle entre des requ^etes et l’implementation si la concep-tion n’est pas bien concue Cela provoque un grand probleme d’economique 1.2 Motivation et objectif L’approche d’ingenierie dirigee par les modeles est une nouvelle approche interes- sante pour le developpement des applications mobiles Revoir sur la methode de developpement originale, on mettra a la place de la conception par les modeles de l’applica-tion Cela peut simpli er le developpement et reduire l’intervalle entre des requ^etes et l’implementation Le modele represente clairement l’idee de l’application gr^ace a l’aide des outils pour modeliser un modele comme UML (Uni ed Modeling Language) et s’il y a des erreurs, il est facile et rapide de corriger en revoyant et modi ant des modeles L’idee de l’approche d’ingenierie dirigee par les modeles est que le developpement de l’application est guide par les modeles Elle est tres bien adaptee avec l’approche Chapter Implementation et Experimentation Figure 4.4: La guration de l’execution d’Acceleo Figure 4.5: La location du code gener 4.2.2.1 Description de l’application Cette application se compose deux pages Ce sont le Main page et Secode page La conception d’interface est represent dans le tableur 4.1 et 4.2 Les fonctionnalites de l’application sont comme les suivants : { La page Main { Un label doit ^etre capable d’a cher le nom de l’application { Un text input est pr^et pour qu’un utilisateur puisse entrer le nom { Le nom entr par l’utilisateur dans le text input doit ^etre transmettre a la page Second lorsque l’utilisateur touche le bouton Show { Un bouton Next peut amener l’utilisateur a la page Second { La page Second { Un label doit ^etre capable d’a cher le nom de l’application Chapter Implementation et Experimentation { Un label a che le nom d’entr a partir du text input de la page Main { Un Image Viewer doit ^etre capable de representer un image { Un bouton Seach peut amener l’utilisateur au site web http ://www.google.com Une fois on a decrit l’application, on transforme des exigences a un modele PIM par le langage DSL Le modele PIM est present dans l’annexe A 4.2.2.2 Resultat Apres avoir modelis un modele PIM correspondant a la conception, on fait passer le modele a travers le generateur de code et obtient le resultat suivant : Mockup Gener Table 4.1: La comparaison d’interface de Main Pour le page Main au niveau de fonctionnalite, notre generateur est capable de gener le code qui peut faire l’application fonctionnant comme tous les concepts cibles Mockup Gener Table 4.2: La comparaison d’interface de Second Chapter Implementation et Experimentation C’est pareil pour le page Second Si l’on fait la comparaison des fonctions d’application entre ces a partir de la conception et ces a partir de code genere, ils sont la m^eme 4.2.2.3 Conclusion Selon le concept de l’application simple qu’on a de nit, notre generateur de code est capable de gener le code pour l’application d’Android On peut faire la conclusion qu’il peut generer les fonctions comme la suit : { View : On a fait le test sur le layout Linear Layout , le Label , le Text Input , le Button et le Image Viewer Le generateur de code a donne le code qui peut fait fonctionner bien pour tous les elements testes Le code en forme xml est bien structure comme le code qui est realis manuellement { Control : Sur la partie de Control , on va parler de test sur les chiers java qui fait marcher des actions d’application Le code gener est capable de faire marcher l’application 4.2.3 Application : Une application de jeu Sudoku Le deuxieme test de generateur, on cree une application plus compliquee C’est une application du jeu Sudoku On va presenter d’abord le concept du jeu 4.2.3.1 Description de l’application Les fonctionnalites de l’application sont decomposees en deux parties { Joueur : { Jour au jeu { Choisir le niveau du jeu { Voir le manuel { Quitter du jeu { Systeme : { Designer le tableur { Donner les chi res pour l’etat initial { Veri er les chi res entrant par le joueur selon les regles du jeu Une fois on a decrit l’application, on transforme des exigences a un modele PIM par le langage DSL Le modele PIM est present dans l’annexe B Chapter Implementation et Experimentation 4.2.3.2 Resultat Une fois on a fait la conception de l’application du jeu Sudoku , on modelise un modele PIM selon la conception, ensuite on passe ce modele au generateur code Voici le resultat obtenu Mockup Gener Table 4.3: La comparaison d’interface de Main La page Main est l’interface principale de l’application Selon la conception cette page se compose les boutons qui relient a l’interface du jeu Game , le manuel Help Le code gener peut donner le resultat correspondant a la conception Mockup Gener Table 4.4: La comparaison d’interface de Help La page Help est l’interface principale de l’application Cette page sera a chee lorsqu’un joueur clique sur le Help dans la page Main Le textbox va presenter la description sur le jeu Des informations du jeu est de nit dans le chier xml dans le repertoire value en type de string Et le button Close va vous amener a la page Main Chapter Implementation et Experimentation Mockup Gener Table 4.5: La comparaison d’interface de level La page Level est l’interface qui va a cher lorsqu’un utilisateur clique sur le bouton Play Il se compose les boutons qui vont envoyer les chi re a la classe Game On a ensembles de chi res qui distinguent des di erences niveaux du jeu Mockup Gener Table 4.6: La comparaison d’interface de Game La page Game est la plus importante parmi les interfaces de cette application Il se compose plusieur l’action a generes { La grille du jeu est le composant principal On doit designer la grille par la fonction drawRactangle et la fonction drawline On peut le faire a partir du generateur de code { Donner les chi res pour l’etat initial Ces chi res sont donne a partir du choix de niveau dans la classe Level Malheureusement le generateur n’est pas capable de faire Parce que le DSL n’a pas de support de cette fonction { Veri er les chi res entrant par le joueur selon les regles du jeu Le generateur de code n’atteint pas a generer cette fonction car cette partie est le logique du jeu On ne peut pas de nir le modele parce qu’il est tres complique de realiser la fonction pour le soutenir dans le DSL Il faut bien concevoir le structure de Chapter Implementation et Experimentation DSL Et a n de faire cela, il faut avoir la bonne connaissance de programmation sur le developpement des applications mobiles 4.2.3.3 Conclusion L’application du jeu Sudoku est plus compliquee que le generateur puisse generer toutes les fonctionnalites Il reste la partie de logique qui est en e et tres impor-tant pour une application du jeu Mais pour concevoir le DSL supporte et la transfor-mation de modele pour cette fonction, il faut avoir la bonne connaissance et plus haut niveau du developpement des applications d’Android 4.3 Evaluation A la n de notre l’etude sur l’approche d’ingenierie dirigee par les modeles pour le developpement des applications mobiles, on peut appliquer cette approche pour le developpement d’application mobile de plateforme d’Android Dans cette partie, on souhaite de donner l’analyse sur le resultat de notre travail comme la suit : { L’approche choisi : apres avoir etudie, on trouve que parmi les plusieurs approches d’ingenierie par les modeles, l’approche MDA est le plus agreable pour le developpement des applications mobiles Le MDA est standardise par l’Objet Management Group (OMG) donc la methodologie de cette approche est claire et pour implementer on peut le faire de facon appropriee en basant sur le standard Cependant il existe de nombreuses techniques dans le cadre de l’approche MDA pour la modelisation et la transformation de modeles { Au niveau de meta-modele, on a developp un langage dedi pour le modele des applications mobile On a concu ce DSL a n de modeliser le modele qui est segment en trois parties : la conception d’interface, des ressources et des actions de l’application Cela permet d’implementer et de reviser facilement le modele lorsque le developpeur a besoin de modi er le modele Cependant, ce DSL n’est pas tres couvert son domaine a cause de la taille de domaine et de notre experience sur le developpement des applications mobiles Autrement dire que le domaine des applications mobiles a plusieurs fonctionnalites mais notre DSL fournit juste quelques fonctions principales Aussi pour l’interface, il reste encore beaucoup de types layout et de widget { Au niveau du developpement de generateur de code, c’est dommage qu’on puisse developper seulement pour une plateforme Android Mais la methodologie Chapter Implementation et Experimentation pour developper le generateur de code pour les autres plateformes (iOS, Black-berry,WindowsPhone etc) est pareille Ce qu’il est essentiel est qu’on doit avoir des connaissances de chaque plateforme sur le concept, la structure, les fonc-tionnalites fournis par la plat-forme etc Neanmoins on peut generer le codage de l’application Android a partir de modele PIM sans modi cation pour une application simple et besoin de la modi cation pour le cas de l’application l’application de jeu SUDOKU En raison que le developpement d’un jeu, il est plus complique que d’autres applications, on a besoin de modi er et ajouter la partie de logique dans le code gener a partir de notre generateur Chapitre Conclusion et perspective Dans ce chapitre, on presente la conclusion de ce qu’on a fait pour etudier l’approche d’ingenierie dirigee par les modeles pour le developpement des applications mo-biles En suite on donne l’analyse sur le travail et en n, c’est le perspective 5.1 Conclusion L’objectif du stage est d’etudier l’approche d’ingenierie dirigee par les modeles a n de trouver la solution qui aide les developpeurs de developper plus rapidement des applications mobiles On a etudi des avantages de l’approche d’ingenierie dirigee par les modeles et trouve que l’idee de l’approche d’architecture dirigee par les modeles (Model Driven Architecture :MDA) est plus approprie pour le developpement des applications mobiles C’est la raison pour laquelle on a propose la solution appliquant l’approche MDA a n de developper des applications mobiles Pour le fait, on commence a concevoir un langage dedi (Domain Speci c language : DSL) qui joue le r^ole de meta-modele sur le domaine de l’application mobile par le Framework Xtext qui permet de developper le langage de programmation et les langages dedies (DSL) On de nisse le concept de notre DSL en trois parties La premiere partie est concue pour de nir l’interface de l’application Elle se compose des dispositions pour la mise en page (Layouts) et des composants d’interface (Widget) La deuxieme partie a le concept de de nir le contr^ole de l’application Pour qu’une application puisse fonctionner, il a besoin de de nir des actions, ces actions sont de nit gr^ace a cette partie En n la troisieme partie est concu pour fournir la de nition des modeles des variables dans l’application Autrement dit que cette partie sert a de nir des ressources qui seront utilise dans l’application Le produit de cette etape est un langage dedi pour notre domaine de l’application mobile en forme de plugin sur l’editeur Eclipse Ce langage 42 Chapter Conclusion et perspective permet aux developpeurs de construire un modele independant de plateforme (PIM) sur le type de chier mda Une fois qu’on a le langage dedie, l’etape suivant est de de nir le modele speci que a la plateforme(PSM) On doit de nir la grammaire de la transformation pour des di erentes plateformes Malheureusement, a cause de le temps limite et la limite d’exp - rience sur le developpement mobile, on peut de nir le PSM juste pour la plateforme Android L’Acceleo est choisi comme l’outil de cette etape On a decrit la grammaire en respectant la structure de la plateforme Android Le resultat de cette etape est le generateur de code pour l’application mobile de plateforme Android Apres que le developpeur modelise le modele PIM par notre DSL, il doit faire passer le modele vers le notre generateur a n d’obtenir le codage de l’application mobile de chaque plateforme 5.2 Perspective M^eme si l’on a reussi de faire le generateur de code a partir de modele comme le principe de l’approche d’ingenierie dirigee par les modeles, il reste encore le travail a ameliorer et completer Puisque le domaine de l’application mobile est large, notre DSL ne couvert pas tout domaine Il nous faut fournir plus d’elements qui permettent de modeliser une application mobile plus compliquee par exemple : au niveau de l’interface (View), il a besoin d’autres layouts et widgets Au niveau de l’action aussi, il faut ajouter des elements qui aident a de nir des autres fonctions Comme l’application du jeu, il est necessaire de de nir la logique du jeu, malheureusement on n’atteint pas a fournit le soutien de cette fonction Ceci est important d’ameliorer dans l’avenir Pour le developpement du generateur de code, on a pris le technique M2T, imple-ment par l’outil Acceleo On a developp seulement le generateur de code pour la plateforme mobile Il sera mieux de developer aussi les generateurs des autres plateformes comme l’iOS, le Blackberry, le WindowsPhone Annexe A Modele PIM de l’application simple avec DSL 44 Annexe B Modele PIM de l’application de jeu Sudoku avec DSL 45 Appendix B Modele PIM de l’application de jeu Sudoku avec DSL Bibliographie [1] Beno^t Combemale Ingenierie dirigee par les modeles (idm){Etat de l’art 2008 URL https://hal.archives-ouvertes.fr/hal-00371565/document [2] Mohamed Talea Dehbi, Rachid and Abderahim Tragha A model driven methodology approach for e-learning platform development Inter Journal of Information and Education Technology 3.1, pages 10{15, 2013 [3] Redouane Lbath Diaw, Samba and Bernard Coulette Etat de l’art sur le developpement logiciel dirige par les modeles 2008 [4] Tim A Majchrzak Heitkotter, Henning and Herbert Kuchen Cross-platform model-driven development of mobile applications with md2 Proceedings of the 28th Annual ACM Symposium on Applied Computing ACM, 2013 [5] Marco Brambilla E ective cross-platform mobile application develop-ment February 2014 URL http://www.modeldrivenstar.org/2014/02/ effective-crossplatform-mobile-app-development.html [6] Juha-Pekka Tolvanen and Steven Kelly Metaedit+ : de ning and using integrated domain- speci c modeling languages Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and ap-plications ACM, 2009 [7] The Eclipse Foundation Eclipse modeling framework 2014 URL http://www eclipse.org/emf [8] The Eclipse Foundation Xtext 2014 URL http://www.eclipse.org/xtext/ [9] The Eclipse Foundation Xtend 2014 URL http://www.eclipse.org/xtend/ [10] Adobe Systems Incorporated Phonegap 2014 URL http://phonegap.com/ [11] Adobe Systems Incorporated Adobe air 2014 URL http://www.adobe.com/ products/air.html 47 Bibliography [12] Johan Den Haan 15 reasons why you should start using model driven development June 2009 URL http://www.theenterprisearchitect.eu/blog/2009/06/25/ 8-reasons-why-model-driven-development-is-dangerous/ [13] Johan Den Haan Model driven development : neration or model interpretation ? June 2010 http://www.theenterprisearchitect.eu/blog/2010/06/28/ Code geURL model-driven-development-code-generation-or-model-interpretation/ [14] Tewbox in IIT.Model driven software development (past 1) September 2008 URL http://tewbox.exteen.com/20080930/ model-drivensoftware-development-past-1 [15] The jQuery Foundation jquerymobile 2014 URL http://jquerymobile.com/ [16] Rakesh Sinha Asp.net mvc overview October 2012 URL http://dotnetcodes com/dotnetcodes/code/Interview-Questions-129-ASPNETMVC-Overview aspx [17] LowCoupling Model driven architecture URL http://lowcoupling.com/ modeling [18] The Eclipse Foundation Acceleo 2014 URL http://www.acceleo.org/ [19] Inc Object Management Group Omg’s metaobject facility(mof) 2014 URL http://www.omg.org/mof/ [20] Google Inc.’s Android developers 2014 URL http://developer.android.com/ guide/index.html [21] Geo Stead Asi DeGani Gustavo Hartmann Cross-platform mobile develop-men March 2011 URL https://wss.apan.org/jko/mole/Shared %20Documents/ Cross-Platform%20Mobile%20Development.pdf [22] Manuel Palmieri, Inderjeet Singh, and Antonio Cicchetti Comparison of crossplatform mobile development tools Intelligence in Next Genera-tion Networks (ICIN), 2012 16th International Conference, pages 179{186 URL https://wss.apan.org/jko/mole/Shared%20Documents/Cross-Platform% 20Mobile%20Development.pdf ... modele de modeles C’est un langage utilise pour decrire des modeles Par exemple UML, XML { M3 { Le meta-metamodele permet de decrire un modele de meta-modeles Selon l’OMG, le MOF est un exemple... facile et rapide de corriger en revoyant et modi ant des modeles L’idee de l’approche d’ingenierie dirigee par les modeles est que le developpement de l’application est guide par les modeles Elle... Dirigee par les Modeles pour le developpement des logiciels 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3 Inter^et de l’approche d’ingenierie dirigee par les modeles pour le developpement des applications mobiles

Ngày đăng: 30/10/2020, 21:19

TỪ KHÓA LIÊN QUAN

w