====== 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** ;