====== Développement mobile Android ====== ===== Modèles de programmation ===== Il existe différents modèles techniques d’applications mobiles : * application web « **responsive **» : application web classique appuyée sur un travail CSS spécifique permettant l'adaptation automatique des interfaces à la taille d'écran (cf. framework Bootstrap) ; * application **native** : application spécifiquement développée pour une plate-forme * Java ou Kotlin pour Android * Objective C ou Swift pour IOS * application **cross-platform** (environnements dédiés) : application développée sur une plateforme spécifique compatible avec IOS et Android, et qui traduit le code en exécutable natif * Xamarin, Appcelerator, Flutter, etc. ===== Application native (descriptif) ===== L’application s’exécute hors d’un navigateur. Elle se présente sous la forme d'un **APK** (Android Package) qui permet de l'installer au même titre qu'un MSI sous Windows. Elle utilise des données brutes structurées (sans mises en formes) disponibles sur le réseau ([[bloc2:prog:web:webservices|Services Web]]) et qu’elle présentera librement. __Problème__ : un équipement mobile a une connexion réseau **intermittente** et de **natures multiples** (wifi, data, filaire, BT, etc.) L’application mobile doit pouvoir s’adapter à cette inconstance : * **basculer** d'une connexion réseau à une autre ; * proposer un mode de fonctionnement **hors-connexion** ; * réaliser la présentation en autonomie. => l’application accède à des services web qui lui renvoient des données au format XML ou JSON plutôt que du HTML ===== Schéma Utilisateur ===== {{ bloc2:prog:poo:mobile-schemautil.png?600 |Schéma Utilisateur}} ===== Schéma Développeur ===== {{ bloc2:prog:poo:mobile-schemadev.png?600 |Schéma Développeur}} ===== Contraintes ===== Le développement natif présentera les contraintes suivantes : Pour la même application : * diverses **versions de JDK** à gérer ; * diverses **versions du Android SDK** à gérer ; * divers **formats** d’équipements à gérer. Outillage spécifique : * gestionnaire de SDK Android (**SDK manager**) ; * gestionnaire de VM’s (**AVD manager**) ; * machine de développement suffisamment puissante pour supporter des VM's Tests complexes : * multiplication des **situations de tests** ;