Historique
La plateformea été créée par une start-up américaine appelée
Android Inc.
En août 2005, Google a racheté cette start-up.
En 2007, Google a fondé un groupe appelé OHA (Open Handset
Alliance), qui regroupe une trentaine d'entreprises (opérateurs mobiles,
fabricants, industriels, éditeurs de logiciels, etc.).
Ce groupe a été créé pour encourager l'innovation dans les appareils
mobiles grâce à une plateforme ouverte et complète.
Cette initiative a conduit à la sortie du premier kit de développement
(SDK) en 2007.
3.
Historique
En septembre2008, Google lance la première version officielle
d'Android, Android 1.0, qui équipe le HTC Dream, le tout premier
smartphone sous Android
1.1(février2009),1.5(Avril2009),1.6(septembre2009),2.0(octobre2009),
2.0.1(Octobre2009)…
La dernière version stable d'Android est Android 15, officiellement
déployée par Google le 15 octobre 2024
4.
Architecture Android
Application
(couche applicative)
Applicationframework
(framework applicatif)
Bibliothèques
C, C++
Android runtime
(Moteur Android)
Linux Kernel
Le noyau Linux (le cœur du système d'exploitation
Android) fait l’interface avec le matériel sous-
jacent. Il gère les processus, la mémoire et les
droits d’utilisateurs
Seulement le noyau linux pas le système entier
Le code des fonctionnalités est spécifique au
matériel.
Contient aussi les pilotes des dispositifs matériels
(USB, Affichage, Bluetooth…)
5.
Architecture Android
Application
(couche applicative)
Applicationframework
(framework applicatif)
Bibliothèques
C, C++
Android runtime
(Moteur Android)
Linux Kernel
Android runtime :Environnement d’exécution
Android, ou moteur d’exécution c’est-à-dire
un programme qui permet l’exécution
d’autres programmes, on trouve :
Des bibliothèques de base du Java, et certaines
spécifiques à Android
la machine virtuelle Dalvik qui fonctionne
conjointement avec les bibliothèques (permet
d'exécuter les applications Android en optimisant
l'utilisation de la mémoire et des ressources).
La MV Dalvik convertit le code Java en un format
exécutable sur les appareils Android et permet
l'exécution simultanée de plusieurs applications.
6.
Architecture Android
Les bibliothèquesC, C++ offrent des accès bas niveau
aux applications :
bibliothèques systèmes (accès aux fonctions de
base du système), ex: la version du système
bibliothèques de manipulation des médias (audio,
vidéo ...), ex: charger un audio ou le lire
moteur du gestionnaire de bases de données
SQLite, ex: db.execSQL, db.rawQuery
OpenGL (pour les graphiques 2D ou 3D) ...
Ses bibliothèques sont open-source.
Application
(couche applicative)
Application framework
(framework applicatif)
Bibliothèques
C, C++
Android runtime
(Moteur Android)
Linux Kernel
7.
Architecture Android
Exemplede quelques bibliothèques:
Bibliothèques systèmes (accès aux fonctions de base du système) :Exemple : libc (C
Standard Library)
La bibliothèque libc fournit des fonctionnalités de base telles que la gestion de la
mémoire (malloc, free), les entrées/sorties (printf, scanf), et la gestion des fichiers
(fopen, fread).
Bibliothèques de manipulation des médias (audio, vidéo...) : Exemple : FFmpeg.
FFmpeg est une bibliothèque open-source permettant d'encoder, de décoder et de
lire des fichiers audio et vidéo. Elle est largement utilisée dans les lecteurs multimédias
comme VLC et les applications de montage vidéo.
8.
Architecture Android
Dans leframework applicatif il y a :
des bibliothèques Java qui appellent les
bibliothèques C et C++.
Elles permettent aux applications d’interagir
avec le système Android,
Exemples de bibliothèques : Window Manager
(gestionnaire de fenêtres), Location Manager
(gestionnaire de géolocalisation), Content
Providers (gestionnaires de contenu)…
Application
(couche applicative)
Application framework
(framework applicatif)
Bibliothèques
C, C++
Android runtime
(Moteur Android)
Linux Kernel
9.
Architecture Android
La couchedes applications: Il s’agit ici des
applications standards préinstallées(pour la plus
part) sur les appareils :
gestion des e-mails,
appareil photo,
gestion des contacts ...
et aussi des applications développées par des
tiers.
Vos applications…
Application
(couche applicative)
Application framework
(framework applicatif)
Bibliothèques
C, C++
Android runtime
(Moteur Android)
Linux Kernel
Dalvik & ART
Avec Android
La version de Java qui permet le développement d’applications mobiles est une version
réduite dépourvue de certaines fonctionnalités inutiles. Par exemple, la bibliothèque Swing
n’est pas intégrée.
1. Dalvik (Android ≤ 4.4 KitKat) : Compilation Just-In-Time (JIT)
Utilise une machine virtuelle basée sur des fichiers DEX (optimisés pour les mobiles).
Compilation à la demande (JIT - Just-In-Time) : le code est traduit en langage machine
au moment de l'exécution, ce qui peut ralentir les performances.
Moins efficace en termes de vitesse d'exécution et consommation d'énergie.
12.
Dalvik & ART
2. ART (Android 5.0 Lollipop et +) : Compilation Ahead-Of-Time (AOT)
• Compile les applications une seule fois, lors de l’installation (AOT - Ahead-Of-Time).
• Exécution plus rapide et moins de consommation de CPU et de batterie.
• Occupe plus d’espace de stockage car les apps sont déjà compilées.
13.
Dalvik vs ART
La différence est simple :
• Dalvik (JIT - Just-In-Time) : Quand tu ouvres une application, Android traduit son code en
langage machine à la volée, ligne par ligne. Cela prend du temps et consomme plus de
batterie.
• ART (AOT - Ahead-Of-Time) : Quand tu installes l’application, Android traduit tout le code
en une seule fois. Ensuite, quand tu l’ouvres, elle démarre plus vite car elle est déjà prête
à être exécutée.
👉 Dalvik = plus rapide à installer, mais plus lent à exécuter (traduit le bytecode .dex au
moment de l’exécution).
ART
👉 = plus long à installer, mais plus rapide et économe en énergie (traduit le
bytecode .dex lors de l’installation,
14.
Composition d'une application
Android
SourcesJava (ou Kotlin) compilées pour la machine virtuelle ART
Ressources :
•XML : interface, textes.
•PNG : icônes, images.
•…
Manifeste (AndroidManifest.xml) :
•Définit le package de l'application.
•Déclare les composants (Activités, Services).
•Spécifie les permissions (Internet, GPS…).
•Indique le niveau minimum du SDK requis.
Environnement de développement :
•Utilisation de l'IDE Android Studio (IntelliJ IDE).
•S'appuie sur le SDK Android (bibliothèques et outils).
15.
SDK Android
Le SDKAndroid contient :
Bibliothèques : pour utiliser les fonctionnalités Android (UI, réseau, base de données...).
Outils de développement : compilateur, débogueur, et émulateur Android.
API Android : pour accéder aux services du système (caméra, GPS, notifications...).
Build Tools : pour générer les APK (fichiers d'installation).
Documentation et exemples de code.
16.
Gradle ?
C'estun outil d'automatisation qui organise tout le processus de
compilation, de gestion des dépendances et de déploiement.
Gradle sert à :
Compiler le code et créer les APK.
Ajouter facilement des bibliothèques au projet.
Gérer les versions (release).
Faciliter le déploiement sur les appareils Android.
17.
Composants d’une appAndroid
Une application Android est composée d’un ensemble de 4
éléments qui interagissent entre eux.
Ces éléments sont : « Activité », « Service », « Broadcast Reciever » et
« Content Provider ».
18.
Composants d’une appAndroid
1. Activité
Gère le cycle de vie de l'application et l'interaction avec l'utilisateur via une
interface graphique.
L’activité est la forme disponible sur l’écran
Elle offre à l’utilisateur l’interface (écran) pour interagir avec l’application.
Chaque écran de l’application représente une activité.
Une application Android est composée d’une ou de plusieurs activités
Une seule activité est lancée à la fois.
19.
Composants d’une appAndroid
1. Activité
Dans « Java », chaque activité est une classe qui étend par héritage la classe
«AppCompatActivity ».
Lors du démarrage d’une activité, 3 méthodes sont appelées automatiquement :
« onCreate », « onStart » et « onResume ».
Lorsque l’on quitte l’activité, 3 méthodes sont appelées automatiquement : «
onPause », « onStop » et « onDestroy ».
Ces méthodes sont définies dans la classe «AppCompatActivity » et devront être
redéfinies si c'est nécessaire.
20.
Composants d’une appAndroid
1. Activité
L’ensemble du code « Java » est généralement écrit dans la méthode «
onCreate ».
La sauvegarde des données importantes quant à elle est effectuée dans
la méthode « onPause ».
En effet quand une activité n’a plus « le focus », elle est mise en pause
d’où l’appel à la méthode « onPause ». Il est donc préférable de
sauvegarder les informations critiques avant de se mettre en pause!
Quand l’activité « onPause » termine sa période de repos, le système
appelle la méthode « onResume ».
Composants d’une appAndroid
1. Activité : Description des états
Création (onCreate())
L’activité est créée mais pas encore visible.
Initialisation des composants (UI, variables, etc.).
Démarrage (onStart())
L’activité devient visible à l’utilisateur mais n’est pas encore en avant-
plan.
Reprise (onResume())
L’activité est au premier plan et l’utilisateur peut interagir avec elle.
24.
Composants d’une appAndroid
1. Activité : Description des états
Pause (onPause())
L’activité perd le focus (ex : ouverture d’une autre activité en
superposition).
Elle est toujours partiellement visible.
Arrêt (onStop())
L’activité n’est plus visible (cachée par une autre ou mise en arrière-plan).
Les ressources lourdes peuvent être libérées.
Destruction (onDestroy())
L’activité est fermée et retirée de la mémoire.
25.
Composants d’une appAndroid
1. Activité : Description des états
Redémarrage (onRestart()) :
Quand une activité passe de l’état arrêté à actif sans être recréée
entièrement.
Schéma simplifié :
onCreate() → onStart() → onResume() → (activité active) → onPause() → onStop()
→ onDestroy()
Activité : lesméthodes du cycle de
vie
•onCreate() : Appelée lors de la création de l'activité. Sert à initialiser les composants.
•onStart() : Appelée lorsque l'activité devient visible pour l'utilisateur.
•onResume() : Appelée lorsque l'activité commence à interagir avec l'utilisateur (focus).
•onPause() : Appelée lorsque l'activité perd le focus, mais reste partiellement visible.
•onStop() : Appelée lorsque l'activité n'est plus visible pour l'utilisateur.
•onDestroy() : Appelée juste avant que l'activité soit détruite.
•onRestart() : Appelée lorsque l'activité est relancée après avoir été arrêtée.
28.
Composants d’une appAndroid
1. Activité : La pile
Les activités sont ordonnées en utilisant la notion de pile.
La pile est du type « LIFO » (Last In First Out).
29.
Composants d’une appAndroid
2. Service
N’est pas un composant graphique
Fonctionne en arrière-plan (tâche de fond).
Permet de réaliser une tâche d’une très longue durée sans une interaction
avec l’utilisateur : écouter de la musique en arrière-plan.
Un service s’exécutant en arrière-plan est prioritaire qu’une application
exécutée dans le même plan.
30.
Composants d’une appAndroid
2. Service
• États d'un Service :
Started (Démarré) :
Lancé avec startService() par une activité. (fonctionne seul)
Fonctionne en arrière-plan indéfiniment, même si l’activité est détruit.
Exemple : Téléchargement d'un fichier.
Bound (Associé) :
Lancé avec bindService() lorsqu'un composant se lie au service.
Offre une interface client-serveur pour échanger des données.
Se termine lorsque tous les composants détachent leur liaison.
Exemple : Application de musique. L'activité envoie des commandes (lecture, pause)
au service audio.
31.
Composants d’une appAndroid
3. Broadcast Receiver
récepteur de messages envoyés par Android ou d’autres applications.
(antenne qui capte un message envoyé par Android).
Réagit à des événements spécifiques via des Intents.
Utilise des filtres d’intention pour écouter uniquement certains événements.
Fonctionne même si l’application n’est pas active. (notification FB)
Exemple : Batterie Faible 🔋
Android envoie un Intent "batterie faible" (ACTION_BATTERY_LOW)
Les applications ayant un Broadcast Receiver pour cet événement le reçoivent
Elles réagissent : réduire la luminosité, désactiver le WiFi, etc.
32.
Composants d’une appAndroid
4. Content Provider
Gère l’accès aux données d’une application de manière sécurisée.
Partage de données avec d'autres applications de manière sécurisée.
Utilisé pour lire et écrire des données dans des bases de données,
Exemples courants :
Accéder aux contacts, photos, vidéos, et SMS d'un appareil.
Partager des données entre applications (ex : partager une image depuis la galerie
vers une application de messagerie).
33.
Les ressources d’uneapp android
Ensemble d’éléments embarqués dans l’application
Des éléments dont l’app a besoin pour fonctionner : son, images, vidéos
…
Noms de fichiers obligatoirement en minuscule (chiffres, ou ‘_’)
Contenue dans un dossier res
réparties dans plusieurs sous-répertoires selon leur nature (certaine ne sont
pas crée par défaut).
Répertoire Description
res/drawable/ Les images sous la forme de fichiers png, jpeg, ou gif, ou bien de fichiers
XML pour décrire les dessins simples (cercles, carrés...)
res/layout/ Fichiers XML qui définissent la mise en page d'une interface utilisateur
res/menu/ Description XML des menus
res/raw/ Fichiers généraux : clip audio, fichier CSV(Comma-Separated Values)
res/values/ Fichiers XML contenant des valeurs simples, telles que des chaînes, des
entiers et des couleurs.
34.
Les ressources d’uneapp android
Les applications Android doivent s'adapter à divers supports.
L'utilisation des ressources permet cette adaptation.
Les ressources sont organisées de manière compréhensible par
Android.
Android sélectionne automatiquement le fichier adéquat selon le
matériel utilisé.
Les noms des répertoires de ressources contiennent des suffixes
(quantificateurs).
35.
Les ressources d’uneapp android
Exemple : hdpi dans res/drawable-hdpi indique une ressource optimisée
pour une densité d'écran spécifique.
Certains répertoires de ressources sont utilisés uniquement dans des
situations spécifiques.
Exemple : hdpi (high dot per inch) pour les écrans haute résolution.
Android sélectionne automatiquement le répertoire approprié
parmi ceux disponibles.
Si aucune correspondance exacte n'est trouvée, Android choisit
l'option la plus proche.
36.
Les ressources d’uneapp android
D'autres suffixes correspondent à
La langue, et éventuellement la région, du système de l'utilisateur.
Par exemple : en, fr, fr-rFR, fr-rCA ...
La taille de l'écran : small, normal, large, xlarge
L'orientation de l'écran : port ou land
La version d'Android. Il s'agit du niveau de l'API, par exemple : v11
ou v14 ...
Qu'est-ce qu'un Layout?
Un layout est un conteneur qui définit la structure et l'organisation
des éléments (widgets) de l'interface.
Rôle :
• Organiser les vues à l'écran.
• Gérer les espaces et alignements.
Exemples courants :LinearLayout, RelativeLayout, ConstraintLayout,
etc.
39.
LinearLayout
Caractéristiques :
Disposition linéaire (horizontale ou verticale).
Utilise l'attribut android:orientation pour définir la direction.
Avantages : Simple à utiliser pour des interfaces linéaires.
Exemple XML :
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Widgets ici -->
</LinearLayout>
40.
RelativeLayout
Caractéristiques :
Positionnementdes vues relatif aux autres vues ou au parent.
Permet de créer des interfaces dynamiques sans imbriquer trop de
layouts.
Attributs fréquents
android:layout_alignParentTop
android:layout_below
Avantages :
Flexibilité dans le positionnement.
Moins d'imbrication possible.
41.
ConstraintLayout
Présentation :
Layout moderne et puissant pour concevoir des interfaces complexes.
Basé sur des contraintes entre les vues.
Avantages :
Réduit la profondeur de la hiérarchie des vues.
Permet des designs responsives adaptés à tous les écrans.
Outils :
Éditeur visuel dans Android Studio pour positionner les contraintes.
42.
ConstraintLayout
app:layout_constraintTop_toTopOf="parent" →Le haut du bloc A
est aligné avec le haut du parent.
app:layout_constraintStart_toStartOf="parent" → Le côté
gauche (Start) de A est aligné avec le côté gauche du parent.
app:layout_constraintEnd_toStartOf="@id/blockB" → Le côté droit
de A est aligné avec le côté gauche de B.
43.
ConstraintLayout
app:layout_constraintTop_toTopOf="@id/blockA" →Le haut de B
est aligné avec le haut de A.
app:layout_constraintStart_toEndOf="@id/blockA" → Le côté
gauche de B est aligné avec le côté droit de A (donc B est à droite de A).
app:layout_constraintEnd_toEndOf="parent" → Le côté droit de B
est aligné avec le côté droit du parent.
Introduction aux Widgets
Définition :
Les widgets sont les composants interactifs de l'interface (boutons, champs de
texte, images, etc.).
Chaque widget possède un nombre important d'attributs XML et de méthodes
Java.
Rôle :
Permettre l’interaction avec l’utilisateur.
Afficher des informations et recevoir des entrées.
Exemples :
TextView, Button, EditText, ImageView, etc.
47.
Les Widgets deBase
TextView :Affiche du texte statique ou dynamique.
EditText :Champ de saisie pour l’utilisateur.
Button :Bouton cliquable pour lancer une action.
ImageView :Affiche une image.
Quelques Widgets Avancés
ListView / RecyclerView :
Affichage de listes ou grilles d’éléments avec gestion optimisée de la
mémoire.
Widgets de sélection :
CheckBox, RadioButton, Switch pour choisir des options.
WebView :Intègre du contenu web directement dans l’application.
51.
Gérer les évènementssur les
widgets
Comment gérer les interactions entre l'interface graphique et l'utilisateur?
Il existe plusieurs façons d'interagir avec une interface graphique. Par
exemple:
Cliquer sur un bouton,
entrer un texte,
sélectionner une portion de texte, etc.
Ces interactions s'appellent des évènements.
52.
Gérer les évènementssur les
widgets; Les listeners
Un Listener (écouteur en français) est une interface qui permet d'écouter et
de réagir aux événements déclenchés par l'utilisateur (clics, pressions
longues, changements de texte, etc.).
Exemple : OnClickListener → Réagit au clic sur un bouton
53.
Gérer les évènementssur les
widgets; Les listeners
View.OnLongClickListener pour les clics qui durent longtemps, avec la méthode
boolean onLongClick(View vue).
Cette méthode doit retourner true une fois que l'action associée a été effectuée.
54.
Gérer les évènementssur les
widgets; Les listeners
View.OnKeyListener pour gérer l'appui sur une touche. On y associe la méthode
boolean onKey(View vue, int code, KeyEvent event).
Cette méthode doit retourner true une fois que l'action associée a été effectuée.