# 2021-02-17 | Android | Introduction
###### tags: `kotlin` `android` `gobelins`
# Android
* Système d'exploitation **open source**, public
* Utilisé par plusieurs fabriquants (Samsung, Huawei, Google, Motorola...)
* Plusieurs **gammes** possibles (50€ -> 2000€)
# Playstore
* Distribuer les applications android
* Utilisé par **google** pour maintenir les app
* Avoir un compte pour publier des applications (25$) -> Licence à vie pour publier des applications en nombre illimité
* Mettre à jour les applications des utilisateurs
* Possibilité de payer des couts supplémentaire pour le marketing
# Android SDK
* Kit de développement pour faciliter le dev
* Librairie haut/bas niveau
* Différents outils pour faciliter le dev (émulateurs, logcat...)
* Exemples de code (Nouvelles fonctionnalités...)
# Android Studio
* Basé sur IntelIJ
* IDE officiel de Android
* Configuration prête (SDK, outils, émulateurs, compilation, debugage, publication...)
# Architecture
1. Basé sur **Linux** (kernel, noyau linux) -> gérer le hardware/driver du téléphone (écran, caméra, BLE, mémoire)
2. **Librairies bas niveau** (C, C++) -> base de données
3. **Librairies hauts niveau** (Java, Kotlin) -> Faire les actions visibles sur le téléphone (classes et méthode déjà créées)
> [color=#E35DDA]Les lib de bas niveau peuvent être utilisés pour le développement avec le hardware
> [color=#E35DDA]Les lib de hauts niveau proposent des méthodes que l'on peut utiliser aisément (qui utilisent les lib bas niveau). Elle permettent de gérer les interfaces, d'accéder à la position de l'utilisateur (sans avoir à tout redévelopper)
Permet de récupérer des données avec une simple méthode déjà développée
# Applications
* **Système** : fourni de base par le système d'exploitataion (appel, géolocalisation, contact, sms...) (via Google ou surcouche fabriquant)
* **Utilisateurs** : proposer des services supplémentaires
# Environnement d'exécution (ou Sandbox)
* Les applications sont isolées dans leur propre environnement
* Garantie la sécurité des utilisateurs et du système d'exploitation
* Une app = des ressources dédiées (pas accessibles pas une autre application)
* Gestion des données d'une application
* Chaque application va ouvrir une nouvelle session linux
# Contraintes du dév mobile
* Plusieurs **résolutions d'écrans**
* **Ressources limités** (mémoire vive/morte, batterie, processeur...)
* **Sécurité** (données des utilisateurs)
* Evolution (gérer la **rétro compatibilité** des versions, des configurations) -> 1 version par an
# Développement - Prérequis
* POO
* Java et Kotlin
* XML
# Déploiement d'une application
* Nom du package unique (pour créer et mettre à jour)
* Certificat unique pour valider la mise à jour et certifier que l'on en est bien l'auteur -> Clé à protéger et à conserver
* Version minimum du téléphone -> couvrir un maximum de téléphones (donc prendre une petite version)