Cours Android Part 1
Cours Android Part 1
Cours Android Part 1
P ROF. G UE RMAH H AT I M
EMAIL: GUERMAH.ENSIAS@GMAIL.COM
2
Développement Mobile sous Android
3
Introduction
Actuellement, les applications sont :
Natives: c’est à dire programmées en Java, C++, Kotlin, compilées et fournies avec
leurs données sous la forme d’une archive Jar (fichier APK). C’est ce qu’on étudiera
ici.
Web app : c’est une application pour navigateur internet, développée en HTML5,
CSS3, JavaScript, dans un cadre logiciel (framework) tel que Node.js, Angular ou
React.
Hybrides : elles sont développées dans un framework comme Ionic, Flutter, React
Native. . . Ces frameworks font abstraction des particularités du système : la même
application peut tourner à l’identique sur différentes plateformes (Android, iOS,
Windows, Linux. . . ).
La charge d’apprentissage est la même.
4
Introduction
Les applications mobiles natives sont des programmes
développés pour fonctionner sur les systèmes
d'exploitation utilisés par les smartphones et tablettes.
Ces programmes, installées localement sur les « device »,
utilisent les capacités de ce dernier, couplées à celui de
son OS, pour pouvoir fonctionner normalement. Les
deux principaux systèmes d'exploitation (OS) mobiles
sont aujourd'hui :
Android : présent sur la plupart des
smartphones. Les applications Android sont
développées en langage de programmation Java
ou Kotlin.
iOS : présent uniquement sur les iPhones de la
marque Apple. Les applications iOS sont
développées en langage Swift (auparavant
Objective-C).
5
Introduction
Les applications mobiles natives ont des finalités très larges :
à aider l'utilisateur à s'organiser;
à communiquer
à utiliser des services;
à acheter des biens;
à interagir avec son environnement;
à créer quelque chose;
à accéder à l'information pertinente pour ses prises de décisions;
Les applications natives sont les applications les plus présentes et utilisées de nos jours.
Quand on parle d'applications mobiles aujourd'hui, on fait référence de fait aux apps natives.
Ex : Whatsapp, Messenger, Snapchat...
6
Introduction
Avantages: Inconvénient
Un nombre important de fonctionnalités qu'elles l'investissement important que les apps natives
peuvent contenir et une expérience riche qu'elles requièrent pour les éditeurs : Au minimum deux
proposent à leurs utilisateurs. versions d'applications pour toucher à la fois les
Le format natif est celui qui s'adapte le mieux aux utilisateurs d'Android et d'iOS (mobiliser des
capacités et limites de chaque smartphone : tirer équipes spécialisées en langage de programmation
partie de la puissance de calcul du téléphone, pour natif Android et iOS)
pouvoir réaliser des tâches complexes. Maintenir régulièrement à jour les applications pour
Pouvoir fonctionner sans connexion internet: Une répondre aux attentes de leurs utilisateurs :
partie du contenu de l'app est installée localement amélioration de la navigation, des fonctionnalités,
sur l'appareil permettant de s'afficher sans corrections de bugs ou de failles de sécurité...
nécessiter de connexion à un réseau et d’utiliser du le temps et le coût de développement des
contenu téléchargé auparavant hors connexion. applications natives sont assez élevés, et vous devez
développer en natif vous permettra d'obtenir être sûr(e) de ne pas manquer votre pari si vous
plus facilement une application dotée d'un contenu souhaitez en tirer un bénéfice
riche et performant.
7
Environnement de développement d'Android
Initialement un OS pour les appareils photos
Acheté par Google en 2005
Objectif du rachat : créer une plateforme mobile
Flexible,
Accessible à tous les intégrateurs et développeurs,
Profiter de la convergence web / mobile
Android : système complet, ouvert et gratuit dans le monde du mobile
Stratégie Google Plateforme mobile ouverte
Plus Plus de
Plus de revenus
d’utilisateurs développeurs
• Google play (Android Market) / Google pay (Google Checkout)
• Publicité mobile
8
Android pour qui ?
Android est destiné pour
Pour les Constructeurs : Open Source, pas de coût de licence, Adaptabilité.
Pour les Développeurs : Langage Java, Modularité, Kit de développement gratuit, SDK
complet, Google play.
Utilisateurs : Multitâches, Nouvelles applications, Nombreuses applications par défaut.
Version : On en est à la version 12 (octobre 2021) et l’API 32 :
La version 12 est le numéro pour le grand public
Les versions d’API sont pour les développeurs.
Exemples :
4.1 JellyBean = API 16. Une API (Application Programming Interface) est un ensemble
6.x Marshmallow = API 23. de bibliothèques de classes pour programmer des applications.
9.x Pie = API 28 Son numéro de version donne un indice de ses possibilités.
9
A propos des versions d’API
Chaque API apporte des fonctionnalités supplémentaires: Il y
a compatibilité ascendante.
Certaines fonctionnalités deviennent dépréciées au fil
du temps, mais restent généralement disponibles.
On souhaite toujours programmer avec la dernière API
(fonctions plus complètes et modernes), mais les utilisateurs
ont souvent des smartphones plus anciens, qui n’ont pas cette
API.
Android ne propose aucune mise à jour majeure : Les
smartphones restent toute leur vie avec l’API qu’ils ont à la
naissance.
Les développeurs doivent donc choisir une API qui
correspond à la majorité des smartphones existant sur le
marché.
10
Qu’est-ce qu’Android ?
System Apps
Android est une surcouche au dessus d’un système Linux : - Toutes les applications, natives ou hybrides, sont basées sur la même API
Android - La couche system Apps s’exécute sur un Runtime Android en utilisant
les classes et services offertes par la couche Java API Framework.
Native C/C++ Librairies
Java API Framework
- De nombreux composants et services du
- Il fournit des API permettant aux développeurs de créer des
système Android de base, tels que ART
applications Android riches.
et HAL, sont construits à partir de code
- Chaque application est basée sur des services : Activity Manager,
natif qui nécessitent des bibliothèques
Ressources Manager, Window Manager, View System, …
natives écrites en C et C ++.
- Permet d’exposer les fonctionnalités de Android Runtime
certaines de ces bibliothèques natives aux - Incluant les librairies fondamentales et la machine virtuelle ART
applications. Par exemple : (Android Runtime remplaçant DALVIK depuis la versions 4.4).
SQLite : un SGBD simple et - Permet l’exécution des applications et et représente la base du
puissant accessible pour toutes les Framework applicatif
applications Hardware Abstraction :
Graphics Librairies - Une couche d’abstraction entre le Hardware et le reste de pile logiciel :
(SGL/OpenGL): librairies dediéé Propose des interfaces standards qui exposent les capacités matérielles
pour l’affichage 2D et 3D du périphérique au APIs de niveau supérieur.
Surface Manager : Pour créer des
interfaces visuelles et gestion de Linux Kernel :
l’affichage. - Couche basse de la plateforme pour la gestion des services du système
: Hardware drivers, Process and memory management, security,
Linux network, power manager.
- Binder pour faciliter la communication inter processus
11
Environnement de développement d'Android
Une application Android est composée de :
Sources Java (ou Kotlin) compilés pour une machine virtuelle appelée "ART", amélioration de
l'ancienne machine « Dalvik » (versions <= 4.4).
Fichiers appelés ressources :
format XML : interface, textes...
format PNG : icones, images...
Manifeste = description du contenu du logiciel
fichiers présents dans l'archive
demandes d'autorisations
signature des fichiers, durée de validité, etc.
Tout cet ensemble est géré à l'aide d'un IDE (environnement de développement) appelé
Android Studio (existe d’autres tel que Eclipse + ADT « android development tools») qui
s'appuie sur un ensemble logiciel (bibliothèques, outils) appelé SDK Android.
12
Langage Kotlin
Kotlin est un langage de programmation orienté objet et fonctionnel, avec un typage
statique qui permet de compiler pour la machine virtuelle Java, JavaScript, et vers
plusieurs plateformes en natif (grâce à LLVM).
Google annonce pendant la conférence Google I/O:
En 2017 : Kotlin devient le second langage de programmation officiellement pris
en charge par Android après Java.
Le 8 mai 2019: Kotlin devient officiellement le langage de programmation voulu
et recommandé pour le développement des applications Android.
Pourquoi ? : Kotlin est promu par Google parce qu’il permet de développer des
programmes plus sains. Par exemple, Kotlin oblige à vérifier chaque appel de
méthode sur des variables objets pouvant valoir null, ce qui évite les
NullPointerException.
13
Langage Kotlin
En Java En Kotlin
String getNomComplet(Personne p) {
fun getNomComplet(p: Personne): String {
return p.getPrenom()+" "+p.getNom();
return p.prenom+" "+p.nom
}
}
private Personne p1 = getPersonne(); // peut retourner null
var p1: Personne = getPersonne() // retour null interdit
System...println(getNomComplet(p1)); //
println(getNomComplet(p1)) // ne se compile pas
NullPointerException
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
void getNomComplet(@NonNull Personne p) {
En Java amélioré : return p.getPrenom()+" "+p.getNom();
}
private @Nullable Personne p1 = getPersonne();
System...println(getNomComplet(p1)); // ne se compile pas
• Kotlin ne remplace pas une analyse sérieuse et une programmation rigoureuse. Kotlin permet seulement de ne
pas se faire piéger avec des bugs grossiers.
• Nous ne travaillerons pas avec Kotlin : on va utiliser Java.
14
Outils utilisés
Les langages :
Java et XML.
Android Studio:
un éditeur de sources et de ressources
des outils de compilation : gradle
des outils de test et de mise au point
15
Android Studio
Pour installer Android Studio, accéder à la page :
https://developer.android.com/studio
Pour le SDK, vous avez le choix, soit de l’installer automatiquement avec Studio, soit
de faire une installation personnalisée. En général, vous pouvez choisir ce que vous
voulez ajouter au SDK (version des librairies, versions des émulateurs de
smarphones), à l’aide du SDK Manager.
16
Android Studio
17
Android Studio : Lancement et configuration (ancien
version)
18
Android Studio : Lancement et configuration (dernière
version)
19
Android Studio : SDK Manager
21
Android Studio : Création d’un nouveau projet
22
Android Studio : Arborescence du projet
23
Android Studio : Éditeurs spécifiques des ressources
Les ressources : disposition des vues dans les interfaces, menus, images vectorielles,
textes. . . , sont définies à l’aide de fichiers XML.
Studio fournit des éditeurs spécialisés pour ces fichiers, par exemple :
Formulaires pour : res/values/strings.xml : textes de l’interface.
24
Android Studio : Éditeurs spécifiques des ressources
Les ressources : disposition des vues dans les interfaces, menus, images vectorielles,
textes. . . , sont définies à l’aide de fichiers XML.
Studio fournit des éditeurs spécialisés pour ces fichiers, par exemple :
Formulaires pour : res/values/strings.xml : textes de l’interface.
25
Android Studio : Éditeurs spécifiques des ressources
Les ressources : disposition des vues dans les interfaces, menus, images vectorielles,
textes. . . , sont définies à l’aide de fichiers XML.
Studio fournit des éditeurs spécialisés pour ces fichiers, par exemple :
Éditeurs graphiques pour : res/layout/*.xml : disposition des contrôles sur
l’interface.
26
Android Studio : Source XML
Les éditeurs proposés par Android Studio sont beaucoup plus confortables que le
XML brut, mais ne permettent pas de tout faire (par exemple des widgets
personnalisées ).
Un widget est un élément de base qui permet d'afficher du contenu à l'utilisateur ou
lui permet d'interagir avec l'application. (on va les voir en détails ).
Assez souvent, il faut éditer le source XML directement :
27
Android Studio : Gradle
Chaque modification d’un source ou d’une ressource fait reconstruire le projet
(compilation des sources, transformation des XML, … ) : C’est automatique.
Dans de rares circonstances, mauvaise mise à jour des sources (partages réseau ou
gestionnaire de version) :
Reconstruire manuellement le projet : sélectionner le menu Build/Rebuild Project
Nettoyer le projet : Sélectionner le menu Build/Clean Project.
Ces actions lancent l’exécution de Gradle.
Gradle est un outil de construction de projets comme Make (projets C/C++ sur
Unix), Ant (projets Java dans Eclipse) et Maven.
De même que make se sert d’un fichier Makefile, Gradle se sert de fichiers nommés
build.gradle pour construire le projet.
28
Android Studio : Gradle
AndroidStudio fait une distinction entre le projet global et l’application. Il se dispose
de deux fichiers build.gradle :
un script build.gradle dans le dossier racine
du projet : indique quelles sont les
dépendances générales (noms des dépôts
Maven contenant les librairies utilisées).
un dossier app contenant l’application du
projet.
un script build.gradle dans le dossier app
pour compiler l’application.
29
Android Studio : Gradle
Certains projets font appel à des bibliothèques externes. On les spécifie dans le
build.gradle du dossier app, dans la zone dependencies :
Il y a des cas plus complexes. Par exemple, Pour utiliser la base de données distribuée
Realm il faut :
dans le build.gradle à la racine du projet, mettre :
dans le build.gradle du dossier app, ajouter :
30
Android Studio : Structure d’un projet
Un projet AndroidStudio est constitué ainsi :
31
Android Studio : Exécution de l'application
L'application est prévue pour tourner sur un appareil (smartphone ou tablette) réel
ou simulé (virtuel).
Le SDK Android permet de :
Installer l'application sur une vraie tablette connectée par USB
Simuler l'application sur un smartphone ou une tablette virtuelle AVD
AVD = Android Virtual Device
C'est une machine virtuelle comme celles de VirtualBox et VMware, mais basée sur
QEMU (un outil d'émulation et de virtualisation permettant d'émuler toutes sortes
de CPU dont ceux qui font tourner la plupart des tablettes et smartphones Android.)
32
Android Studio : Exécution de l'application
L'assistant de création de tablette demande :
• Modèle de tablette ou téléphone a simuler,
• Version du système Android,
• Orientation et densité de l‘ écran
Options de simulation :
• Snapshot : mémorise l‘ état de la machine d'un lancement a
l'autre, mais exclut Use Host GPU
• Use Host GPU : accélère les dessins 2D et 3D a l'aide de la
carte graphique du PC.
Options avancées :
• RAM : mémoire a allouer, mais est limitée par votre PC,
• Internal storage : capacité de stockage interne,
• SD Card : capacité de la carte SD simulée supplémentaire
33
Android Studio : Exécution de l'application
L'assistant de création de tablette demande :
• Modèle de tablette ou téléphone a simuler,
• Version du système Android,
• Orientation et densité de l‘ écran
Options de simulation :
• Snapshot : mémorise l‘ état de la machine d'un lancement a
l'autre, mais exclut Use Host GPU
• Use Host GPU : accélère les dessins 2D et 3D a l'aide de la
carte graphique du PC.
Options avancées :
• RAM : mémoire a allouer, mais est limitée par votre PC,
• Internal storage : capacité de stockage interne,
• SD Card : capacité de la carte SD simulée supplémentaire
34
Android Studio : Exécution de l'application
L'assistant de création de tablette demande :
• Modèle de tablette ou téléphone a simuler,
• Version du système Android,
• Orientation et densité de l‘ écran
Options de simulation :
• Snapshot : mémorise l‘ état de la machine d'un lancement a
l'autre, mais exclut Use Host GPU
• Use Host GPU : accélère les dessins 2D et 3D a l'aide de la
carte graphique du PC.
Options avancées :
• RAM : mémoire a allouer, mais est limitée par votre PC,
• Internal storage : capacité de stockage interne,
• SD Card : capacité de la carte SD simulée supplémentaire
35
Android Studio : Lancement de l'application
36
Android Debug Bridge
Android Debug Bridge est une passerelle entre un Smartphone/une tablette (réelle ou
virtuelle) et votre PC
Serveur de connexion des tablettes
Commande de communication
ADB emprunte à FTP (transfert de fichiers) et SSH (connexion à un shell).
37
Android Debug Bridge
Exemple :
38
Android Debug Bridge
On retrouve l’architecture des dossiers Unix, avec des variantes :
Dossiers Unix classiques : /usr, /dev, /etc, /lib, /sbin. . .
Les volumes sont montés dans /mnt, par exemple /mnt/sdcard (mémoire flash
interne) et /mnt/extSdCard (SDcard amovible)
Les applications sont dans : /system/app pour les pré-installées et dans /data/app
pour les applications normales
Les données des applications sont dans /data/data/nom.du.paquetage.java.
Pour échanger des fichiers avec une tablette :
adb push nom_fichier_local /nom/complet/dest envoi du fichier local sur la tablette
adb pull /nom/complet/fichier récupère ce fichier de la tablette
Pour gérer les logiciels installés :
adb install paquet.apk
adb uninstall nom.du.paquetage.java
39