Vous êtes sur la page 1sur 401

SMB116 : Introduction

Un rapide survol
Jean-Ferdy Susini
Maître de Conférences - CNAM
EPN 5 - Informatique
Source: Cours de Jean-Michel DOUIN, Wikipédia,
Android.com…
Paris, 06/02/2024

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

L’UE
2

06/02/2024 Organisation, Android : introduction (JFS)


TP 1
13/02/2024 Intent, actions, actions génériques (PM)
TP 2
20/02/2024 IHM/1 (PM)
27/02/2024 IHM/2 (PM)
TP 3
05/03/2024 Intent, IntentFilter, Receiver locaux (PM)
TP 4
12/03/2024 Persistance et partage (FL)
TP 5
19/03/2024 UIThread Thread et Handler (FL)
TP 6
26/03/2024 Services locaux et receiver globaux (FL)
31/03 Validation proposition mini-projet
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

L’UE
3

02/04/2024 Services globaux, AIDL (FL)


TP 7
23/04/2024 Capteurs et géolocalisation (FL)
TP 8
30/04/2024 Communications sans fil (FL)
TP 9
07/05/2024 NFC-NDK-DNSSD (FL)
TP 10
14/05/2024 Android Wearable et Internet des objets (FL)
21/05/2024 LoWPAN, MQTT (FL)
28/05/2024 Capture, analyse d'images, IA/TF (FL)

Fin juin Examen final


Soutenance individuelle des mini-projets

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

L’UE
4

Évaluation :
Examen final sur papier 2 h (note < 8 éliminatoire)
Série de TP (5*10 sur 50) pas de rendu=> 0
Si total = 0 => éliminatoire
Mini-projet avec soutenance si 0 => éliminatoire
Note finale 37,5% d’exam +37,5% TP + 25% mini-
projet

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
Évolution des «smart-devices»
Sources : Android.com, Wikipedia,
developer.apple.com, www.oracle.com et
différents autres sites…

Paris, 06/02/2024

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6

Années 90 : téléphonie cellulaire, Programmation


propriétaire environnements totalement fermés
Parallèlement apparition des PDA (Psion, Apple, Palm,
Microsoft…)
Le Web se développe aussi à cette époque et sera le
moteur d’un très grand nombre de transformations…
Fin des années 90, évolution majeure de Java :version
1.2 rebaptisée un temps version 2.0. Décliné en 3
grandes “éditions” :
JSE : programmation des “clients lourds”
JEE : programmation des serveurs d’applications
JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6
Afin de comprendre le monde de la programmation mobile de nos
Années 90 : téléphonie cellulaire, Programmation
jours, il n'est pas inutile de nous intéresser à l’évolution de ce
secteur de l’électronique grand public apparu il y a près de 30 ans.
propriétaire environnements totalement fermés
Parallèlement apparition des PDA (Psion, Apple, Palm,
Microsoft…)
Le Web se développe aussi à cette époque et sera le
moteur d’un très grand nombre de transformations…
Fin des années 90, évolution majeure de Java :version
1.2 rebaptisée un temps version 2.0. Décliné en 3
grandes “éditions” :
JSE : programmation des “clients lourds”
JEE : programmation des serveurs d’applications
JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6

Années 90 : téléphonie cellulaire, Programmation


propriétaire environnements totalement fermés
Au départ, la programmation des terminaux mobiles reposait sur des
Parallèlement apparition des PDA (Psion, Apple, Palm,
développements propriétaires, réalisés par chaque constructeur de téléphones
Microsoft…)
pour leurs besoins spécifiques. Les environnements utilisés étaient totalement
fermés et n'y intervenaient que les constructeurs et les opérateurs téléphoniques.
À cette époque, il n'est absolument pas question d'ouvrir ces plateformes à des
Le Web se développe aussi à cette époque et sera le
développeurs tiers. Une telle ouverture était perçue comme une menace sur
l'intégrité du réseau et les acteurs industriels de l’époque vont s'y opposer
moteur d’un très grand nombre de transformations…
farouchement. Le développement est donc une affaire de spécialistes, officiant
chez les principaux industriels de ce domaine.
Fin des années 90, évolution majeure de Java :version
1.2 rebaptisée un temps version 2.0. Décliné en 3
grandes “éditions” :
JSE : programmation des “clients lourds”
JEE : programmation des serveurs d’applications
JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6

Années 90 : téléphonie cellulaire, Programmation


propriétaire environnements totalement fermés
Parallèlement apparition des PDA (Psion, Apple, Palm,
Microsoft…)
Parallèlement à cela, une autre branche, de ce que l'on appelle maintenant
Le Web se développe aussi à cette époque et sera le
l'électronique grand public (ou Consumer Electronics en anglais), se développait
selon d'autres règles. Il s'agit des assistants numériques personnels ou PDA
moteur d’un très grand nombre de transformations…
(Personal Digital Assistant). Des sociétés comme Psion, Apple, puis Palm et
Microsoft, proposent des produits, permettant à leurs utilisateurs de stoker leurs
Fin des années 90, évolution majeure de Java :version
données personnelles et d'y accéder à tout moment sur de petits terminaux
autonomes alimentés par batteries que l'utilisateur garde toujours à proximité.
1.2 rebaptisée un temps version 2.0. Décliné en 3
Mais ces terminaux ne sont généralement pas communiquant (ou peu
communiquant). Des échanges sont cependant possibles par infrarouge ou câble
grandes “éditions” :
série dans un premier temps, par Bluetooth voir même WiFi et USB plus tard
(fin des années 90, début des années 2000).
JSE : programmation des “clients lourds”
JEE : programmation des serveurs d’applications
JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
Pour exploiter ces PDA, les constructeurs proposent des appareils, un O.S. et des applications ; mais il 6
est également possible pour des développeurs tiers, de programmer sur ces plateformes et de proposer
Années 90 : téléphonie cellulaire, Programmation
leurs propres applications aux utilisateurs ; ou bien même des périphériques. Cependant, le
développement reste très ardu et nécessite une bonne expertise des contraintes de l’informatique
propriétaire environnements totalement fermés
embarquée (nécessitant une expertise approfondie dans la gestion mémoire, la gestion de l’énergie…).

Parallèlement apparition des PDA (Psion, Apple, Palm,


Microsoft…)
Le Web se développe aussi à cette époque et sera le
moteur d’un très grand nombre de transformations…
Fin des années 90, évolution majeure de Java :version
1.2 rebaptisée un temps version 2.0. Décliné en 3
grandes “éditions” :
JSE : programmation des “clients lourds”
JEE : programmation des serveurs d’applications
JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6

Années 90 : téléphonie cellulaire, Programmation


propriétaire environnements
Un troisième acteur très important de cette histoiretotalement fermésIl
est l’essor du WorldWideWeb.
jouera un rôle très important et très structurant dans la mise en place de la
programmation mobile et en particulier dans la communication réseau. Mais durant
Parallèlement apparition des PDA (Psion, Apple, Palm,
les années 90, le web se développera en parallèle en ignorant le monde de la
téléphone mobile et même des PDA (les navigateurs Web n’apparaitront que très
Microsoft…)
tardivement sur ces appareils).

Le Web se développe aussi à cette époque et sera le


moteur d’un très grand nombre de transformations…
Fin des années 90, évolution majeure de Java :version
1.2 rebaptisée un temps version 2.0. Décliné en 3
grandes “éditions” :
JSE : programmation des “clients lourds”
JEE : programmation des serveurs d’applications
JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6

Années 90 : téléphonie cellulaire, Programmation


propriétaire environnements totalement fermés
Parallèlement apparition des PDA (Psion, Apple, Palm,
Microsoft…)
Le Web se développe aussi à cette époque et sera le
moteur d’un très grand nombre de transformations…
Fin des années 90, évolution majeure de Java :version
1.2 rebaptisée un temps version 2.0. Décliné en 3
grandes “éditions” :
JSE : programmation des “clients lourds”
Un tournant important est pris vers la fin des années 90, lorsque, sous l'impulsion de
SUNJEE : programmation
Micro System, une évolution majeure des serveurs
du langage d’applications
Java est proposée.
Initialement distribuée en version 1.2, puis rebaptisée version 2.0, la nouvelle version
JME
de Java : informatique
se décline, pour la première fois,embarquée
en 3 grandes éditions :

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6

Années 90 : téléphonie cellulaire, Programmation


propriétaire environnements totalement fermés
Parallèlement apparition des PDA (Psion, Apple, Palm,
Microsoft…)
Le Web se développe aussi à cette époque et sera le
moteur d’un très grand nombre de transformations…
Fin des années 90, évolution majeure de Java :version
1.2 rebaptisée un temps version 2.0. Décliné en 3
Premièrement J2SE, qui reprend les principes des versions antérieures et s'oriente
grandes “éditions”
vers la programmation de «clients: lourds» d’application.

JSE : programmation des “clients lourds”


JEE : programmation des serveurs d’applications
JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6

Années 90 : téléphonie cellulaire, Programmation


propriétaire environnements totalement fermés
Parallèlement apparition des PDA (Psion, Apple, Palm,
Microsoft…)
Le Web se développe aussi à cette époque et sera le
moteur d’un très grand nombre de transformations…
Fin des années 90, évolution majeure de Java :version
1.2 rebaptisée un temps version 2.0. Décliné en 3
grandes “éditions”
L’édition J2EE : version étendue en vue de s'adapter à l'émergence
de son côté est une
JSE : programmation des “clients lourds”
des serveurs applicatifs dans les entreprises

JEE : programmation des serveurs d’applications


JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6

Années 90 : téléphonie cellulaire, Programmation


propriétaire environnements totalement fermés
Parallèlement apparition des PDA (Psion, Apple, Palm,
Microsoft…)
Le Web se développe aussi à cette époque et sera le
moteur d’un très grand nombre de transformations…
Fin des années 90, évolution majeure de Java :version
1.2
Enfin,rebaptisée unquitemps
J2ME est une édition, constitue version
pour le langage2.0. Décliné
Java, un en en3 s'orientant vers
retour au source,
la programmation d'applications embarquées. La technologie J2ME se compose d’une machine virtuelle
grandes “éditions”
et d’un jeu d’API : fournir des environnements d’exécution sur mesures, aux terminaux
appropriées, pour
JSE : programmation des “clients lourds”
mobiles. Elle se différencie de ses grandes sœurs, J2SE et J2EE, tant au niveau des machines virtuelles
Java choisies, que des API proposées.
JEE : programmation des serveurs d’applications
JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un peu d’histoire
6

Années 90 : téléphonie cellulaire, Programmation


propriétaire environnements totalement fermés
Parallèlement apparition des PDA (Psion, Apple, Palm,
Microsoft…)
Le Web se développe aussi à cette époque et sera le
moteur d’un très grand nombre de transformations…
Fin des années 90, évolution majeure de Java :version
1.2 rebaptisée un temps version 2.0. Décliné en 3
grandes “éditions” :
JSE : programmation des “clients lourds”
JEE : programmation des serveurs d’applications
JME : informatique embarquée
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
Avec la version 2 de son langage 7
Java, SUN réussi autour des années
2000 le tour de force à s’imposer
dans un très grands nombre de
domaines industriels différents et en
particulier dans le monde de
l’informatique embarquée.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

Java Virtual
Machine

JVM

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

Java
Standard
Edition
(JSE)

JVM

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

Java
Standard
Edition
(JSE)

JVM

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

Java
Entreprise Java
Edition Standard
(JEE) Edition
(JSE)

JVM

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java
Entreprise Java
Edition Standard
(JEE) Edition
(JSE)

JVM

À partir de la distribution standard de Java, constituée d’une JVM, d’un modèle


d’exécution des programmes, de bibliothèques de programmation standardisés
et de bibliothèques optionnels, SUN produit une version enrichie de Java
dédiée aux serveurs d’applications et aux processus métiers industrialisés des
entreprises : J2EE.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java
MaisEntreprise Java
la solution technique qui dans JME
Edition
le cadre de ce cours nousStandard
intéresse le
plus est l’ensemble J2ME
(JEE) Edition
(JSE)

JVM

La technologie Java Micro Edition se compose d’une


machine virtuelle et d’un jeu d’APIs appropriées pour
fournir des environnements d’exécution sur mesure aux
terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java
Entreprise Java JME
Edition Standard
(JEE) Edition
(JSE) JavaCard Virtual
Machine

JVM CVM KVM CardVM

La technologie Java importante


La première transformation MicrodeEdition se compose
Java ME est d’introduire plusieurs d’une
modèles de JVM différentes adaptés aux besoins de l’environnement embarqué.
machine virtuelle et d’un jeu d’APIs appropriées pour
On en retiendra essentiellement 3 modèles : CVM, KVM et CardVM. L’accent
fournir
ici estdes
mis surenvironnements d’exécution
l’économie en ressources mémoire
ressort les performances.
et en énergie etsur mesure
en dernier aux
terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java
Entreprise Java JME
Edition Standard
(JEE) Edition
(JSE) JavaCard Virtual
Machine

JVM CVM KVM CardVM

La technologie Java JavaCard


L’environnement MicroqueEdition se compose
nous allons rapidement décrire en d’une
premier,
machine virtuelle et d’un jeu d’APIs appropriées pour
repose sur une version extrêmement compacte de la JVM et un ensemble de
bibliothèques spécifiques du monde de la carte à puce. Nous reviendrons
fournir desspécifiquement
environnements d’exécution
sur cet environnement sur
en étudiant la carte
les dispositifs de sécurités des données personnelles.
mesure
SIM aux
dans cette UE et

terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java
Entreprise Java JME
Edition Standard
(JEE) Edition
(JSE) JavaCard
API

JVM CVM KVM CardVM

La technologie Java JavaCard


L’environnement MicroqueEdition se compose
nous allons rapidement décrire en d’une
premier,
machine virtuelle et d’un jeu d’APIs appropriées pour
repose sur une version extrêmement compacte de la JVM et un ensemble de
bibliothèques spécifiques du monde de la carte à puce. Nous reviendrons
fournir desspécifiquement
environnements d’exécution
sur cet environnement sur
en étudiant la carte
les dispositifs de sécurités des données personnelles.
mesure
SIM aux
dans cette UE et

terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7
Cartes à puce, carte SIM,
package optionnels Terminaux de paiement

package optionnels

Java
Entreprise Java JME
Edition Standard
(JEE) Edition
(JSE) JavaCard
API

JVM CVM KVM CardVM

La technologie Java JavaCard


L’environnement MicroqueEdition se compose
nous allons rapidement décrire en d’une
premier,
machine virtuelle et d’un jeu d’APIs appropriées pour
repose sur une version extrêmement compacte de la JVM et un ensemble de
bibliothèques spécifiques du monde de la carte à puce. Nous reviendrons
fournir desspécifiquement
environnements d’exécution
sur cet environnement sur
en étudiant la carte
les dispositifs de sécurités des données personnelles.
mesure
SIM aux
dans cette UE et

terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java
Entreprise Java JME
Edition Standard
(JEE) Edition
(JSE) Compact Virtual JavaCard
Machine API

JVM CVM KVM CardVM

La technologie
Le secondJava Micro
environnement dédiéEdition seallons
sur lequel nous compose d’une
passer rapidement
concerne les terminaux mobiles haut de gamme et les box (box télé, internet,
machine virtuelle
routeurs…). Sonetsuccès
d’un dansjeu d’APIs
les terminaux appropriées
mobiles haut de gamme est pour
resté
assez limité.
fournir des environnements d’exécution sur mesure aux
terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java
Entreprise Java JME
Edition Standard Connected Device
(JEE) Edition Configuration
(JSE) JavaCard
CDC API

JVM CVM KVM CardVM

La technologie
Le secondJava Micro
environnement dédiéEdition seallons
sur lequel nous compose d’une
passer rapidement
concerne les terminaux mobiles haut de gamme et les box (box télé, internet,
machine virtuelle
routeurs…). Sonetsuccès
d’un dansjeu d’APIs
les terminaux appropriées
mobiles haut de gamme est pour
resté
assez limité.
fournir des environnements d’exécution sur mesure aux
terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java
Entreprise Java JME
Edition Standard Fondation
(JEE) Edition Profile
(JSE) JavaCard
CDC API

JVM CVM KVM CardVM

La technologie
Le secondJava Micro
environnement dédiéEdition seallons
sur lequel nous compose d’une
passer rapidement
concerne les terminaux mobiles haut de gamme et les box (box télé, internet,
machine virtuelle
routeurs…). Sonetsuccès
d’un dansjeu d’APIs
les terminaux appropriées
mobiles haut de gamme est pour
resté
assez limité.
fournir des environnements d’exécution sur mesure aux
terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

Principal profile
package optionnels disponible

Java Personal
Entreprise Profile
Java JME
Edition Standard Fondation
(JEE) Edition Profile
(JSE) JavaCard
CDC API

JVM CVM KVM CardVM

La technologie
Le secondJava Micro
environnement dédiéEdition seallons
sur lequel nous compose d’une
passer rapidement
concerne les terminaux mobiles haut de gamme et les box (box télé, internet,
machine virtuelle
routeurs…). Sonetsuccès
d’un dansjeu d’APIs
les terminaux appropriées
mobiles haut de gamme est pour
resté
assez limité.
fournir des environnements d’exécution sur mesure aux
terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7
box, routeurs, PDA
package optionnels haut de gamme
Les terminaux embarqués, ciblés par
J2ME, couvrent un spectre assez
package
large, allant, des systèmes suroptionnels
cartes
à puce, au «Home Gateway» et aux
routeurs, ainsi que les PDA haut de
Java Personal
gamme, en passant par les Profile
Entreprise
téléphones mobiles. Java JME
Edition Standard Fondation
(JEE) Edition Profile
(JSE) JavaCard
CDC API

JVM CVM KVM CardVM

La technologie
Le secondJava Micro
environnement dédiéEdition seallons
sur lequel nous compose d’une
passer rapidement
concerne les terminaux mobiles haut de gamme et les box (box télé, internet,
machine virtuelle
routeurs…). Sonetsuccès
d’un dansjeu d’APIs
les terminaux appropriées
mobiles haut de gamme est pour
resté
assez limité.
fournir des environnements d’exécution sur mesure aux
terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java Personal
Entreprise Profile
Java JME
Edition Standard Fondation
(JEE) Edition Profile
(JSE) KiloByte Virtual JavaCard
CDC Machine API

JVM CVM KVM CardVM

La technologie
Enfin, la branche de JME quiJava Micro
nous intéresse Edition
le plus dans cette se compose
UE repose d’une
sur la KilobitVM,
propose un ensemble d’API dédiées aux terminaux mobiles. Avec cette initiative, SUN parvient à
et

machine virtuelle
forcer le barrage et etd’un
des constructeurs jeu d’APIs
des opérateurs de téléphonieappropriées
mobile en leur proposantpourun
environnement complet de réalisation d’applications tierces pour les terminaux mobiles ! C’est
fournir
véritablement des
cette environnements
proposition qui réussit à faire d’exécution sur
bouger les industriels et mesure
à leur aux
faire admettre
l’intérêt d’ouvrir un marché du développement d’applications sur terminaux mobiles. C’est
terminaux
pourquoi nous allonsmobiles.
lui accorder une place particulière dans cette introduction.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java Personal
Entreprise Profile
Java JME
Edition Standard Fondation Connected Less
(JEE) Edition Device Configuration
Profile
(JSE) JavaCard
CDC CLDC API

JVM CVM KVM CardVM

La technologie
Enfin, la branche de JME quiJava Micro
nous intéresse Edition
le plus dans cette se compose
UE repose d’une
sur la KilobitVM,
propose un ensemble d’API dédiées aux terminaux mobiles. Avec cette initiative, SUN parvient à
et

machine virtuelle
forcer le barrage et etd’un
des constructeurs jeu d’APIs
des opérateurs de téléphonieappropriées
mobile en leur proposantpourun
environnement complet de réalisation d’applications tierces pour les terminaux mobiles ! C’est
fournir
véritablement des
cette environnements
proposition qui réussit à faire d’exécution sur
bouger les industriels et mesure
à leur aux
faire admettre
l’intérêt d’ouvrir un marché du développement d’applications sur terminaux mobiles. C’est
terminaux
pourquoi nous allonsmobiles.
lui accorder une place particulière dans cette introduction.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java Personal Mobile Information

Entreprise Profile Device Profile


Java JME
Edition Standard Fondation
(JEE) Edition MIDP
Profile
(JSE) JavaCard
CDC CLDC API

JVM CVM KVM CardVM

La technologie
Enfin, la branche de JME quiJava Micro
nous intéresse Edition
le plus dans cette se compose
UE repose d’une
sur la KilobitVM,
propose un ensemble d’API dédiées aux terminaux mobiles. Avec cette initiative, SUN parvient à
et

machine virtuelle
forcer le barrage et etd’un
des constructeurs jeu d’APIs
des opérateurs de téléphonieappropriées
mobile en leur proposantpourun
environnement complet de réalisation d’applications tierces pour les terminaux mobiles ! C’est
fournir
véritablement des
cette environnements
proposition qui réussit à faire d’exécution sur
bouger les industriels et mesure
à leur aux
faire admettre
l’intérêt d’ouvrir un marché du développement d’applications sur terminaux mobiles. C’est
terminaux
pourquoi nous allonsmobiles.
lui accorder une place particulière dans cette introduction.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7
La configuration et le
package optionnels profile les plus déployés
(téléphones, PDA…)

package optionnels

Java Personal
Entreprise Profile
Java JME
Edition Standard Fondation
(JEE) Edition MIDP
Profile
(JSE) JavaCard
CDC CLDC API

JVM CVM KVM CardVM

La technologie
Enfin, la branche de JME quiJava Micro
nous intéresse Edition
le plus dans cette se compose
UE repose d’une
sur la KilobitVM,
propose un ensemble d’API dédiées aux terminaux mobiles. Avec cette initiative, SUN parvient à
et

machine virtuelle
forcer le barrage et etd’un
des constructeurs jeu d’APIs
des opérateurs de téléphonieappropriées
mobile en leur proposantpourun
environnement complet de réalisation d’applications tierces pour les terminaux mobiles ! C’est
fournir
véritablement des
cette environnements
proposition qui réussit à faire d’exécution sur
bouger les industriels et mesure
à leur aux
faire admettre
l’intérêt d’ouvrir un marché du développement d’applications sur terminaux mobiles. C’est
terminaux
pourquoi nous allonsmobiles.
lui accorder une place particulière dans cette introduction.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

Il est important de noter que, ce


faisant, Java bousculepackage optionnels
le monde de la
téléphonie mobile, en ouvrant ces
plateformes
Java à la programmation Personal
d'applications par des développeurs Profile
Entreprise
tiers qui ne soient ni des Java JME
Edition ni des opérateurs.
constructeurs, Standard Fondation
(JEE) Edition MIDP
Profile
(JSE) JavaCard
CDC CLDC API

JVM CVM KVM CardVM

La technologie Java Micro Edition se compose d’une


machine virtuelle et d’un jeu d’APIs appropriées pour
fournir des environnements d’exécution sur mesure aux
terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le monde Java
7

package optionnels

package optionnels

Java Personal
Entreprise Profile
Java JME
Edition Standard Fondation
(JEE) Edition MIDP
Profile
(JSE) JavaCard
CDC CLDC API

JVM CVM KVM CardVM

La technologie Java Micro Edition se compose d’une


machine virtuelle et d’un jeu d’APIs appropriées pour
fournir des environnements d’exécution sur mesure aux
terminaux mobiles.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Java 2 Micro Edition puis JME


8

Cette édition regroupe en fait différentes incarnations de


Java différenciées par la notion de configuration et de
profil :
Java Card orienté vers les cartes à puces
CLDC/MIDP : destiné à programmer des
applications Java pour terminaux mobiles et PDA
CDC : supporté par les terminaux “haut de gamme”
de l’époque et “set top box”, et autres “gateways”
DOJA : profil spécifique porté par NTT-DOCOMO
(en France c’était BT avec i-Mode au début des
années 2000)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Java 2 Micro Edition puis JME


8

Cette édition regroupe en fait différentes incarnations de


Java différenciées par la notion de configuration et de
profil :
Java Card
Bien queorienté
SUN réussisseversà faireles cartes
passer àenvironnement
l’idée d’un puces clos et
sécurisé de développement d’applications mobiles sur téléphone
CLDC/MIDP : destiné
portable, le constructeur nippon à NTT-DOCOMO
programmer pousse des
sa propre
applications Java pour terminaux mobiles et PDA
spécification en avance sur les travaux de SUN et rallie à lui quelques
grands noms internationaux. En France, Bouygues Telecom adopte le
CDC : système
supporté DOJA etpar les
offre le terminaux
catalogue “haut
de jeux sur mobile decomplet
le plus gamme”
à
l’époque.
de l’époque et “set top box”, et autres “gateways”
DOJA : profil spécifique porté par NTT-DOCOMO
(en France c’était BT avec i-Mode au début des
années 2000)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Java 2 Micro Edition puis JME


8

Cette édition regroupe en fait différentes incarnations de


Java différenciées par la notion de configuration et de
profil :
Java Card orienté vers les cartes à puces
CLDC/MIDP : destiné à programmer des
applications Java pour terminaux mobiles et PDA
CDC : supporté par les terminaux “haut de gamme”
de l’époque et “set top box”, et autres “gateways”
DOJA : profil spécifique porté par NTT-DOCOMO
(en France c’était BT avec i-Mode au début des
années 2000)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les profiles sur CLDC pour la téléphonie


9

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024
Les bibliothèques de programmation JME sont constituées, à l’image, de Java par

Les profiles sur CLDC pour la téléphonie


différents composants standardisés par le mécanisme des JSR (Java Specification Request,
gérées par l'organisme de ratification du standard Java : le JCP). Sur le schéma suivant,
vous trouverez la structure des API composant le profile CLDC/MIDP, ainsi que le
9
numéro des JSR correspondantes.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les profiles sur CLDC pour la téléphonie


9

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CLDC spécifications techniques


10

Minimum 160 à 500 Ko de (RAM+ROM)


Processeur à 16-32 bits (vitesse 16Mhz ou +)
Alimentation limitée, prise en charge d’une batterie
Connexion au réseau (non permanente)
Interface graphique limitée ou inexistante (en général,
définie dans les profils)
KVM
Pré-vérification statique du bytecode +vérification à
l’exécution (au chargement)
Gestion adaptée des classes (jar+jad)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CLDC spécifications techniques


10
Nous nous intéressons dans un
Minimum 160 à 500 Ko de (RAM+ROM) premier temps à la couche basse de
l’API : la spécification CLDC qui
définit le socle de la configuration.
Processeur à 16-32 bits (vitesse 16Mhz ou +)
Alimentation limitée, prise en charge d’une batterie
Connexion au réseau (non permanente)
Interface graphique limitée ou inexistante (en général,
définie dans les profils)
KVM
Pré-vérification statique du bytecode +vérification à
l’exécution (au chargement)
Gestion adaptée des classes (jar+jad)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CLDC spécifications techniques


10

Minimum 160 à 500 Ko de (RAM+ROM)


Les spécifications principales de la plate-forme JME sont données sous la forme de
Processeur à 16-32 bits (vitesse 16Mhz ou +)
contraintes minimum à satisfaire. Ainsi, par exemple, la quantité minimale de mémoire
vive est de 160 Ko. Les ingénieurs java partent du principe que « qui peut le plus peut le
Alimentation limitée, prise en charge d’une batterie
moins». Nous verrons que cet a priori n’est pas sans poser des problèmes importants.

Connexion au réseau (non permanente)


Interface graphique limitée ou inexistante (en général,
définie dans les profils)
KVM
Pré-vérification statique du bytecode +vérification à
l’exécution (au chargement)
Gestion adaptée des classes (jar+jad)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CLDC spécifications techniques


10

Minimum 160 à 500 Ko de (RAM+ROM)


Processeur à 16-32 bits (vitesse 16Mhz ou +)
Alimentation limitée, prise en charge d’une batterie
Connexion au réseau (non permanente)
Interface graphique limitée ou inexistante (en général,
C’est là que prend tout son sens la notion « Connected Less ». En effet, à l’époque où ces
spécifications sont définies, les opérateurs font payer très cher le moindre octet de data circulant
définie dans les profils)
sur leur réseau. On est au début de l’air du texto et du GPRS. Et pour que les utilisateurs ne soient
pas effrayés par leur facture à la fin du mois, on va s’assurer d’avoir un contrôle parfait sur la
consommation des données et souvent une application agira sans connexion. De plus, à cette
KVM
époque toujours, le GPRS ne permet pas facilement une transmission fiable (nombreuses pertes de
connexion dues à des réceptions difficiles), c’est pourquoi on va considérer la qualité de la
communication comme aléatoire d’où cette notion de « connected-less ».
Pré-vérification statique du bytecode +vérification à
l’exécution (au chargement)
Gestion adaptée des classes (jar+jad)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CLDC spécifications techniques


10

Minimum 160 à 500 Ko de (RAM+ROM)


Processeur à 16-32 bits (vitesse 16Mhz ou +)
Alimentation limitée, prise en charge d’une batterie
Connexion au réseau (non permanente)
Interface graphique limitée ou inexistante (en général,
définie dans les profils)
En fait, l’interface graphique est
KVM prise en charge dans les profils et
n’est pas définie à ce niveau.
Pré-vérification statique du bytecode +vérification à
l’exécution (au chargement)
Gestion adaptée des classes (jar+jad)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CLDC spécifications techniques


10

Minimum 160 à 500 Ko de (RAM+ROM)


Processeur à 16-32 bits (vitesse 16Mhz ou +)
Alimentation limitée, prise en charge d’une batterie
Connexion au réseau (non permanente)
Interface graphique limitée ou inexistante (en général,
définie dans les profils)
KVM La JVM utilisée ici est une JVM réduite, d’où son nom car elle
doit tenir sur quelques Ko. Une fois encore elle spécifie un
modèle d’exécution minimal, par exemple sans optimisation de
Pré-vérification statique du bytecode +vérification à
type JIT-C (Just In Time Compiler) — c’est à dire que HotSpot
(le JIT C standard de Java SE) ne fait pas parti de la KVM mais
l’exécution (au chargement)
les constructeurs sont libres d’implanter leur propre JIT…

Gestion adaptée des classes (jar+jad)


This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CLDC spécifications techniques


10

Minimum 160 à 500 Ko de (RAM+ROM)


Processeur à 16-32 bits (vitesse 16Mhz ou +)
Alimentation limitée, prise en charge d’une batterie
Connexion au réseau (non permanente)
La VM tant très simplifie, les opérations de vérification dynamique du code sont
retirées au profits d’un mécanisme de pré-vérification statique du bytecode et
Interface graphique limitée ou inexistante (en général,
d’un mécanisme de signature électronique validant cette vérification au
définie dans les profils) chargement. Sans entrer trop dans les détails, cette pré-vérification statique
apporte des performances meilleures sur le terminal embarqué, mais fragilise un
peu le modèle de sécurité de Java. Pour contourner cette difficulté, Java va
KVM populariser la notion de signature cryptographique des applications.

Pré-vérification statique du bytecode +vérification à


l’exécution (au chargement)
Gestion adaptée des classes (jar+jad)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CLDC spécifications techniques


10

Minimum 160 à 500 Ko de (RAM+ROM)


Processeur à 16-32 bits (vitesse 16Mhz ou +)
Alimentation limitée, prise en charge d’une batterie
Connexion au réseau (non permanente)
Interface graphique limitée ou inexistante (en général,
définie dans les profils)
KVM
Enfin, JME propose un nouveau mécanisme permettant
d’accéder aux midlet à travers le réseau. Ce modèle repose sur
Pré-vérification statique du bytecode +vérification à
une archive standard de type jar et un fichier manifest décrivant
l’exécution (au chargement) l’application : le .jad (qui est un fichier XML).

Gestion adaptée des classes (jar+jad)


This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CLDC spécifications techniques


10

Minimum 160 à 500 Ko de (RAM+ROM)


Processeur à 16-32 bits (vitesse 16Mhz ou +)
Alimentation limitée, prise en charge d’une batterie
Connexion au réseau (non permanente)
Interface graphique limitée ou inexistante (en général,
définie dans les profils)
KVM
Pré-vérification statique du bytecode +vérification à
l’exécution (au chargement)
Gestion adaptée des classes (jar+jad)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mécanismes et classes de base


11

Le paramètre String de la méthode Connector.open(String


URL) a le format suivant : protocole:adresse:paramètres.
Exemples :
Connexion HTTP :
Connector.open("http://java.sun.com/developper?exemple=toto");
Connexion Socket :
Connector.open("socket://129.144.111.222:9000");
Connexion Datagram :
Connector.open("datagram://adress:port");
Communication à travers un port série :
Connector.open("comm:com0;baudrate=9600");
Ouverture d’un fichier
Connector.open("file://myFile.txt");

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mécanismes et classes de base


11
Principalement, le mécanisme GFC repose sur une classe : la classe Connector
Le paramètre de la méthode
String
qui permet d’instance
programmes :
Connector.open(String
des connexions vers des ressources extérieures aux

a le format suivant : protocole:adresse:paramètres.


URL)des connections réseau par HTTP, TCP ou UDP
des connections via des liens séries (RS-232, etc.)
Exemples :
des connections à des fichiers sur le téléphone…
Ce modèle très simple centré autour de la simple méthode open() facilite
Connexion HTTP :
grandement l’écriture de programme Java si bien que de nombreux développeurs
se demandent pourquoi cette solution ne fait donc pas partie de la panoplie
Connector.open("http://java.sun.com/developper?exemple=toto");
standard des APIs du JSE.
Connexion Socket :
Connector.open("socket://129.144.111.222:9000");
Connexion Datagram :
Connector.open("datagram://adress:port");
Communication à travers un port série :
Connector.open("comm:com0;baudrate=9600");
Ouverture d’un fichier
Connector.open("file://myFile.txt");

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mécanismes et classes de base


11

Le paramètre String de la méthode Connector.open(String


URL) a le format suivant : protocole:adresse:paramètres.
Exemples :
Connexion HTTP :
Connector.open("http://java.sun.com/developper?exemple=toto");
Connexion Socket :
Connector.open("socket://129.144.111.222:9000");
Connexion Datagram :
Connector.open("datagram://adress:port");
Communication à travers un port série :
Connector.open("comm:com0;baudrate=9600");
Ouverture d’un fichier
Connector.open("file://myFile.txt");

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

MIDP - spécifications techniques


12

Version 1 :
128 Ko pour MIDP persistant
8 Ko pour stocker le data de la Midlet persistant
32 Ko pour le fonctionnement du Runtime Java (le
tas et la pile)
Version 2 :
256 Ko persistant
8 Ko app persistant
128 Ko heap

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

MIDP - spécifications techniques


12
Nous passerons rapidement sur les spécifications matérielles de MIDP. Notons seulement qu’il s’agit là
encore de spécifications minimales qui viennent se rajouter aux spécifications de CLDC.
Version 1 :
128 Ko pour MIDP persistant
8 Ko pour stocker le data de la Midlet persistant
32 Ko pour le fonctionnement du Runtime Java (le
tas et la pile)
Version 2 :
256 Ko persistant
8 Ko app persistant
128 Ko heap

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

MIDP - spécifications techniques


12

Version 1 :
128 Ko pour MIDP persistant
8 Ko pour stocker le data de la Midlet persistant
32 Ko pour le fonctionnement du Runtime Java (le
tas et la pile)
Version 2 :
256 Ko persistant
8 Ko app persistant
128 Ko heap

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

MIDP - spécifications techniques


13

Caractéristiques affichage min :


96x54 pixels
1 bit de profondeur
ratio 1:1
Caractéristiques dispositifs d’entrées :
QWERTY kbd
ITU-T keyboard (téléphone)
touch pad

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

MIDP - spécifications techniques


Sur le plan des interactions utilisateur, MIDP propose un gestion de l’interface graphique reposant sur des
13
concepts assez classiques à l’époque avec un écran à la résolution assez limitée et des dispositifs de saisie
Caractéristiques affichage min :
allant du clavier téléphonique standard IUT-T au clavier QWERTY assez complet que l’on retrouve dans
96x54 pixels
certains téléphones haut de game. Certains terminaux peuvent également proposer une touch pad (écran
tactile monopoint à stylet). Néanmoins ces spécifications techniques uniquement minimales posent de
1 bit de profondeur
nombreux problèmes aux constructeurs et aux développeurs. Les constructeurs voient ici la possibilité de
ce démarquer en proposant des possibilités supplémentaires (qui peut le plus, peut le moins…). Les
ratio 1:1
développeurs sont alors confrontés à des problèmes de portabilité très importants car soit il respecte des
normes minimales beaucoup trop frustres, soit ils s’adaptent aux caractéristiques spécifiques des
téléphones…
Caractéristiques dispositifs d’entrées :
QWERTY kbd
ITU-T keyboard (téléphone)
touch pad

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

MIDP - spécifications techniques


13

Caractéristiques affichage min :


96x54 pixels
1 bit de profondeur
ratio 1:1
Caractéristiques dispositifs d’entrées :
QWERTY kbd
ITU-T keyboard (téléphone)
touch pad

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CE, Symbian, Palm, Brew, BlackBerry


14

Convergence PDA et téléphone mobile


Les OS pour smart-devices proposent leurs propres
solutions pour le développement d’applications
(SDK, déploiement des applications -signatures-)
Développement assez complexes.
Les interfaces sont perçues comme des interfaces
“Desktop” adaptées aux mobiles (clavier minimal,
stylet, molette de défilement…)
Réservé longtemps aux appareils haut de gamme
➡ orientation vers les milieux professionnels

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CE, Symbian, Palm, Brew, BlackBerry


14
Au début des années 2000, de nombreuses solutions ont suivi l’exemple JME et
Convergence PDA et téléphone mobile
plusieurs solutions ont tour tour occupé le premier rang des solutions pour ce que
l’on commençait déjà à appeler des smartphones.
Les OS pour smart-devices proposent leurs propres
solutions pour le développement d’applications
(SDK, déploiement des applications -signatures-)
Développement assez complexes.
Les interfaces sont perçues comme des interfaces
“Desktop” adaptées aux mobiles (clavier minimal,
stylet, molette de défilement…)
Réservé longtemps aux appareils haut de gamme
➡ orientation vers les milieux professionnels

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CE, Symbian, Palm, Brew, BlackBerry


14

Convergence PDA et téléphone mobile


Les OS pour smart-devices proposent leurs propres
solutions pour le développement d’applications
(SDK, déploiement des applications -signatures-)
Développement assez complexes.
Les interfaces sont perçues comme des interfaces
“Desktop” adaptées aux mobiles (clavier minimal,
stylet, molette de défilement…)
Réservé longtemps aux appareils haut de gamme
➡ orientation vers les milieux professionnels

À l’image de Symbian, Qualcom (Brew), Palm ou RIM (BlackBerry).

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

CE, Symbian, Palm, Brew, BlackBerry


14

Convergence PDA et téléphone mobile


Les OS pour smart-devices proposent leurs propres
solutions pour le développement d’applications
(SDK, déploiement des applications -signatures-)
Développement assez complexes.
Les interfaces sont perçues comme des interfaces
“Desktop” adaptées aux mobiles (clavier minimal,
stylet, molette de défilement…)
Réservé longtemps aux appareils haut de gamme
➡ orientation vers les milieux professionnels

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

l’iPhone d’Apple
15

Un démarrage en 2 temps :

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

l’iPhone d’Apple
15

Un démarrage en 2 temps :
juin 2007 : iPhone première génération bouleverse
les usages et les standards d’IHM. Apple promet un
kit de dev basé sur les technos Web (HTML 5)

L’iPhone fixe un nouveau standard en terme d’IHM. L’interaction tactile multipoints devient un
standard grand publique. Mais au delà des aspects purement techniques, l’iPhone bouleverse
également les usages car Apple négocie apparemment avec les opérateurs des forfais offrant un
accès «illimité» au réseau de données cellulaire. Modifiant ainsi profondément le paysage de la
téléphonie mobile. Le ConnectedLess devient de l’histoire ancienne. Cette négociation vient au
prix d’accords d’exclusivité temporaires pour les principaux opérateurs partenaires. Désormais
connectés en permanence, on assiste à une explosion du trafic web sur mobile (annonçant la mort
du très onéreux WAP — Wireless Application Protocole et adaptation mobile des technologies
Web). Pour Apple, outre la possibilité d’écouler un très grand nombre de terminaux (limitée par
les exclusivités), la connexion permanente leur permet également de mettre à disposition leur
magasin de vente de contenus en ligne (iTunes Store) profitant de son succès avec l’iPod. Côté
applications, Apple promet également un kit de développement basés sur HTML5, l’idée étant, à
ce moment là, plus proche de petites applications web plutôt que de réelles applications natives.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

l’iPhone d’Apple
15

Un démarrage en 2 temps :
juin 2007 : iPhone première génération bouleverse
les usages et les standards d’IHM. Apple promet un
kit de dev basé sur les technos Web (HTML 5)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

l’iPhone d’Apple
15

Un démarrage en 2 temps :
juin 2007 : iPhone première génération bouleverse
les usages et les standards d’IHM. Apple promet un
kit de dev basé sur les technos Web (HTML 5)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

l’iPhone d’Apple
15

Un démarrage en 2 temps :
juin 2007 : iPhone première génération bouleverse
Un an après la sortie de l’iPhone, Apple change de stratégie et abandonne l’exclusivité auprès
d’opérateurs choisis (les forfaits dits illimités sont maintenant passés dans les meurs des opérateurs).
les usages et les standards d’IHM. Apple promet un
Ils sortent alors un nouvel iPhone et une nouvelle version de son OS (pour la première fois baptisé
iOS) et ajoute un magasin exclusif d’applications. Malgré des conditions réputés trop contraignantes
kit de dev basé sur les technos Web (HTML 5)
pour les développeurs le succès est énorme. Pourtant le langage de programmation (Objective-C)
bien qu’ancien (milieu des année 80) a un usage très confidentiel (essentiellement utilisé dans NeXT
juin 2008 : IOS 2, apparition de l’AppStore. Un SDK
puis dans MacOS X) et donc maîtrisé par très peu de développeurs. Apple travail énormément sur
et un modèle économique très efficace
Xcode, son atelier logiciel, pour faciliter l’adoption par les développeurs.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

l’iPhone d’Apple
15

Un démarrage en 2 temps :
juin 2007 : iPhone première génération bouleverse
les usages et les standards d’IHM. Apple promet un
kit de dev basé sur les technos Web (HTML 5)
juin 2008 : IOS 2, apparition de l’AppStore. Un SDK
et un modèle économique très efficace
Fixe certains standards des smart-phones : Grand
écran tactile multipoints, GPS, accéléromètres,
compas, caméra,WiFi, GPRS (connectedless ?)
Transforme profondément la conception des
applications

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

iOS
16

Système d’exploitation propriétaire développé par Apple


et équipant ses smartphones (iPhones), ses tablettes
tactiles (iPads) et ses baladeurs numériques (iPods
touch) et plus récemment l’Apple TV et l’AppleWatch
Sur les bases de Mac OS X (ex NeXT) un
développement spécifique orienté par l’IHM
Premier modèle annoncé en janvier 2007 et
commercialisé en juin de la même année.
https://developer.apple.com/devcenter/ios/index.action

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

iOS
16
Bien que présenté comme un développement spécifique pour les appareils mobiles, iOS trouve ses
Système d’exploitation propriétaire développé par Apple
racines dans MacOS X, le système d’exploitation qu’Apple utilise pour ses ordinateurs (stations de
travail, ordinateurs portables…). Cet OS hérite lui même de deux branches bien distinctes puisqu’il
et équipant ses smartphones (iPhones), ses tablettes
résulte de la fusion entre les développements de l’équipe NeXT et de leur OS NextStep puis OpenStep
(qui s’inscrit dans la famille des systèmes UNIX) et de MacOS (dit classique) qui équipait les
tactiles (iPads) et ses baladeurs numériques (iPods
ordinateurs de la société jusqu’à la fin des années 90. iOS propose essentiellement une réécriture
touch) et plus récemment l’Apple TV et l’AppleWatch
complète des couches hautes de l’OS et en particulier de son Interface Homme Machine.

Sur les bases de Mac OS X (ex NeXT) un


développement spécifique orienté par l’IHM
Premier modèle annoncé en janvier 2007 et
commercialisé en juin de la même année.
https://developer.apple.com/devcenter/ios/index.action

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

iOS
16

Système d’exploitation propriétaire développé par Apple


et équipant ses smartphones (iPhones), ses tablettes
tactiles (iPads) et ses baladeurs numériques (iPods
touch) et plus récemment l’Apple TV et l’AppleWatch
Sur les bases de Mac OS X (ex NeXT) un
développement spécifique orienté par l’IHM
PremierLe nom même iOS n’apparait qu’avec la sortie de l’iPhone 3G
modèle annoncé en janvier 2007 et
(iPhone de deuxième génération) et l’officialisation du kit de
commercialisé
développementen juin
fournit de
par Applela
pourmême année.
les développeurs tiers. La
première version de l’OS ne devait accepter initialement que des
développements à base de technologies HTML5.
https://developer.apple.com/devcenter/ios/index.action

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

iOS
16

Système d’exploitation propriétaire développé par Apple


et équipant ses smartphones (iPhones), ses tablettes
tactiles (iPads) et ses baladeurs numériques (iPods
touch) et plus récemment l’Apple TV et l’AppleWatch
Sur les bases de Mac OS X (ex NeXT) un
développement spécifique orienté par l’IHM
Premier modèle annoncé en janvier 2007 et
commercialisé en juin de la même année.
https://developer.apple.com/devcenter/ios/index.action
Voici la source principale d’informations sur le développement iOS. Même si dans ce
certificat, nous n’étudierons pas en profondeur le développement iOS, je vous conseille
fortement de parcourir un peu ce site pour vous familiariser avec le monde Apple. En
particulier les recommandations (Guide Lines) sont très instructives.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

iOS
16

Système d’exploitation propriétaire développé par Apple


et équipant ses smartphones (iPhones), ses tablettes
tactiles (iPads) et ses baladeurs numériques (iPods
touch) et plus récemment l’Apple TV et l’AppleWatch
Sur les bases de Mac OS X (ex NeXT) un
développement spécifique orienté par l’IHM
Premier modèle annoncé en janvier 2007 et
commercialisé en juin de la même année.
https://developer.apple.com/devcenter/ios/index.action

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17

Développer pour un système mobile :


La taille de l’objet -> taille de l’écran et des touches
ou autres systèmes de saisie...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17

Développer pour un système mobile :


La taille de l’objet -> taille de l’écran et des touches
ou autres systèmes de saisie...
Il y a un peu moins d’une dizaine d’année, fort de son succès avec l’iPod, Apple cherche à conquérir
de nouveaux marchés et à s’implanter dans le domaine de la téléphonie mobile. À l’origine du
développement iOS, les ingénieurs Apple cherchent à repenser en profondeur le monde du téléphone
mobile, afin de s’implanter sur ce marché avec un produit très différenciant. L’une des contraintes
principales que pose le téléphone mobile est la taille réduite de l’appareil. Dans ces conditions,
l’industrie a longtemps oscillé entre des solutions proposant dans un espace réduit, un clavier plus ou
moins complet et un écran plus ou moins grand. Quel proportion accorder à ces deux dispositifs ? Faut-
il favoriser l’écran au détriment du clavier ? ou bien le contraire ?

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17

Développer pour un système mobile :


La taille de l’objet -> taille de l’écran et des touches
ou autres systèmes de saisie...

Plus le clavier est réduit, plus complexe devient la saisie et moins


riches sont les mécanismes d’interactions. Cette problématique est
ancienne et existait déjà dans l’industrie des P D A.
Les constructeurs ont cherché différentes solutions pour optimiser
l’espace, par exemple avec des claviers escamotables assez
complets, afin de préserver une taille d’écran raisonnable ; les
appareils se repliant sur eux-mêmes, pour occuper moins de place
dans la poche. Différentes solutions de ce type ont été essayées.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17

Développer pour un système mobile :


La taille de l’objet -> taille de l’écran et des touches
ou autres systèmes de saisie...

D’autres solution proposent de réduire le clavier à


quelques boutons et de privilégier des mécanismes
de saisie alternatifs, en privilégiant la taille de
l’écran et une interaction au moyen d’un stylet.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17

Développer pour un système mobile :


La taille de l’objet -> taille de l’écran et des touches
ou autres systèmes de saisie...

Enfin, de nombreuse solution, en


particulier dans la téléphonie, ont cherché
à partager l’espace en 2 ; mettant à égalité
ou presque l’écran et le clavier.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17

Développer pour un système mobile :


La taille de l’objet -> taille de l’écran et des touches
ou autres systèmes de saisie...
➡ écran capacitif multi-points
surface reconfigurable en
entrée et en sortie

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17
Forts de toute cette expérience, les ingénieurs d’Apple ont fait un choix radicale
Développer pour un système mobile :
et ont privilégié la taille de l’écran. Ils ont alors réduit le nombre de boutons, à un
La taille de l’objet -> taille de l’écran et des touches
seul bouton en façade, servant à l’interaction avec le téléphone et 2 ou 3 boutons
sur le côtés de l’appareil ayant un rôle très précis.
ou autres systèmes de saisie...
En l’absence de clavier, il fallait donner cependant à l’utilisateur un moyen
d’interagir et le choix des ingénieurs a été de se tourner vers l’utilisation d’une
interface tactile capacitive multi-points, couvrant la totalité de l’écran et
➡ écran capacitif multi-points
permettant à l’utilisateur d’interagir directement avec ses doigts et non au moyen
d’un stylet.
surface reconfigurable en
C’est la première apparition d’un écran tactile multi-points, pour le grand public.
entrée et en sortie

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17

Développer pour un système mobile :


La taille de l’objet -> taille de l’écran et des touches
ou autres systèmes de saisie...
➡ écran capacitif multi-points
Une autre problématique de l’informatique embarquée
est liée aux ressources informatiques limitées au regard
surface reconfigurable en
de ce que l’on trouve dans un PC, tant en termes de
mémoire disponible, que de ressources de calcul.
entrée et en sortie
contrainte mémoire (souvent limitée au regard des
applications desktop)
contrainte CPU (architecture différente)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17

Développer pour un système mobile :


La taille de l’objet -> taille de l’écran et des touches
ou autres systèmes de saisie...
➡ écran capacitif multi-points
surface reconfigurable en
entrée et en sortie
contrainte mémoire
Pour répondre à(souvent limitée
cette problématique, au regard
les ingénieurs ont des
applicationsconçu un matériel relativement haut de gamme pour
desktop)
l’époque, avec plusieurs unités de calcul et une mémoire
contrainte CPU (architecture
relativement confortable. différente)
➡ architecture matérielle haut de gamme

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
17

Développer pour un système mobile :


La taille de l’objet -> taille de l’écran et des touches
ou autres systèmes de saisie...
➡ écran capacitif multi-points
surface reconfigurable en
entrée et en sortie
contrainte mémoire (souvent limitée au regard des
applications desktop)
contrainte CPU (architecture différente)
➡ architecture matérielle haut de gamme

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
18

La métaphore du bureau passe mal à l’échelle du smart-


phone

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
18

La métaphore du bureau passe mal à l’échelle du smart-


phone Mais, du point de vue des ingénieurs Apple, le problème ne se limite pas qu’au seul
matériel, l’interface graphique doit elle aussi être revue.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
18

La métaphore du bureau passe mal à l’échelle du smart-


phone

Si on observe les interfaces issues des PDA, par exemple, on s'aperçoit comme sur ces captures d’écran,
empruntées à Windows Mobile, que les concepts de l’interface graphique embarquée reprennent pratiquement
tous les cannons des interfaces bureau (la fameuse métaphore du bureau virtuel) dans des dimensions
contraintes par la surface d’affichage réduite.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
18

La métaphore du bureau passe mal à l’échelle du smart-


phone

On va ainsi retrouver un environnement richement doté en outils divers. Une barre de fenêtre avec une case à
cocher pour quitter l’application. Une barre latérale escamotable pour afficher la liste des applications, les
paramètres du système, l’aide en ligne, etc.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
18

La métaphore du bureau passe mal à l’échelle du smart-


phone

On trouve également une barre de menus


déroulant (sur l’image, elle est disposée au bas de
l’écran), proposant également la possibilité
d’affichage de sous-menus. Les vues en liste
proposent des ascenseurs, très similaires à ceux
des interfaces desktop.
La conception même des applications, est très
proche des développements des applications
standards des PC. Les barres d’outils remplissent
une bonne part de l’écran. Laissant finalement peu
de place à l’affichage des données proprement
dites, traitées par l’utilisateur de l’application.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
18

La métaphore du bureau passe mal à l’échelle du smart-


phone
Pourtant, sur une surface d’écran si réduite, il faut
Une application à la fois remarquer que l’on affiche, en général, qu’une
seule application à la fois. Cela est assez différent
Un seul écran à la fois des situations dans les interfaces modernes pour
PC ou on présente souvent à l’utilisateur des
informations issues de différentes applications.
Afficher une seule application à la fois, contraint
forcément l’attention de l’utilisateur.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
18

La métaphore du bureau passe mal à l’échelle du smart-


phone
Une application à la fois
Un seul écran à la fois
Une seule tâche à la fois En général, l’utilisateur d’applications mobile se
concentre non seulement sur une seule application
à la fois, mais la plupart du temps, il ne s’intéresse
qu’à une seule fenêtre à la fois.
Et même une seule tâche à la fois. En effet, Il faut
tenir compte du fait que l’attention de l’utilisateur
d’un mobile peut-être captée à tout moment
ailleurs.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
18

La métaphore du bureau passe mal à l’échelle du smart-


phone
Une application à la fois
Un seul écran à la fois
Une seule tâche à la fois

➡ Nouvelle interface tactile


Cela a conduit les ingénieurs d’Apple à repenser l’interface
utilisateur et le modèle applicatif de leur système d’exploitation.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
18

La métaphore du bureau passe mal à l’échelle du smart-


phone
Une application à la fois
Un seul écran à la fois
Une seule tâche à la fois

➡ Nouvelle interface tactile

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
19

➡ Nouvelle interface tactile

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
19

➡ Nouvelle interface tactile

L’interface graphique résultant de leurs travaux est assez éloignée des


interfaces PC. Ici, on ne trouve plus la pléthore d’outils mis à
disposition de l’utilisateur au bout du click.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
19

➡ Nouvelle interface tactile

Mais l’interface est recentrée sur le contenu


présenté à l’utilisateur. Et ce dernier est appelé
à manipuler ce contenu avec ses doigts.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
19

➡ Nouvelle interface tactile

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu L’interface est donc redéfinie, pour faire la part
belle au contenu affiché plutôt qu’aux outils.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Les éléments de contrôle sont dissimulés dans le contenu lui même, ou bien, si des contrôles spécifiques
existent, ils sont peu nombreux à l’écran à la fois. Par exemple, on masque les barres d'ascenseurs, tandis
Faire la part belle au contenu
qu’une gestuelle remplace le widget traditionnel des interfaces PC.

Peu d’éléments d’interaction à l’écran

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu
Peu d’éléments d’interaction à l’écran
Peu d’aide => cohérent et prédictible, feedback
Il ne faut pas oublier qu’en interagissant sur l’écran tactile avec ses doigts, l’utilisateur masque une
partie de l’interface graphique. Ceci conduit à une très grosse granularité de l’interaction par rapport à la
surface d’affichage. Ainsi, pour produire un retour graphique de son interaction à l’utilisateur, il faut
utiliser une part de ce qu’il reste d’écran visible. Par exemple, lorsque l’utilisateur tape un texte au clavier
virtuel, des popups apparaissent pour lui confirmer graphiquement la touche virtuelle qu’il a appuyée.
Quand il fait une sélection de texte, une loupe apparait au dessus de son doigt pour lui montrer plus
précisément son action. Parfois, une animation graphique peut également confirmer l’action de
l’utilisateur, comme dans le cas du défilement d’un texte ou d’une image.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu
Peu d’éléments d’interaction à l’écran
Peu d’aide => cohérent et prédictible, feedback
Maximiser l’espace d’affichage utilisable pour le contenu de l’application, réduit aussi les possibilités
d’aider l’utilisateur. Le mode d’interaction tactile compromet, par exemple, les possibilités d’exploration
de l’interface comme sur les PC, qui proposent des bulles d’aides lorsqu’on survole des éléments
d’interface avec la souris sans interagir. Là encore, les animations graphiques peuvent répondre en partie à
la problématique de l’aide en ligne utilisateur. Par contre, plus encore que dans le monde Desktop,
l’interface doit-être cohérente et proposer des solutions intuitives à un problème. Ensuite, les solutions
proposées par l’interface pour un problème donné, doivent toujours être reprises à l’identique, dans tous
les problèmes similaires, afin de renforcer la cohérence et l’apprentissage par l’utilisateur. Enfin, il
convient de toujours procurer un feedback à l’utilisateur pour lui confirmer ses actions.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu
Peu d’éléments d’interaction à l’écran
Peu d’aide => cohérent et prédictible, feedback
Si l’on considère les interfaces des PC, on s’aperçoit rapidement que les interfaces utilisateurs sont
construites afin de permettre un apprentissage rapide de raccourcis, il s’agit majoritairement de raccourcis
clavier, permettant à l’utilisateur de manipuler plus vite ses données. Ainsi, par exemple, à force de
sélectionner le menu «Édition» et l’item «Copier», l’utilisateur apprend rapidement à utiliser le raccourcis
clavier Ctrl-C ou encore ⌘-C pour réaliser la même opération. Il apprend ce raccourcis, car ce dernier est
généralement affiché au côté de l’item dans le menu. Dans une application mobile il est beaucoup moins
facile de permettre cela, mais la solution des raccourcis reste un point important. Par exemple, secouer son
téléphone pendant la saisie d’un texte provoquera l’annulation de la dernière saisie. Mais comment
l’utilisateur peut-il découvrir ce raccourcis ?

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu
Peu d’éléments d’interaction à l’écran
De plus, L’interface graphique doit également tenir compte du contexte d’utilisation du téléphone. En
effet, contrairement à un application PC où l’utilisateur est généralement assis devant son ordinateur, dans
le cas d’une application mobile le contexte peut-être tout autre. Dans ces conditions, avoir des
Peu d’aide => cohérent et prédictible, feedback
informations sur le contexte d’utilisation devient très important.

Tenir compte du contexte d’utilisation


être informé du contexte : capteurs…
s’adapter au contexte : affichage, saisie de données
automatisée…
importance des animations

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu
Peu d’éléments d’interaction à l’écran
Peu d’aide => cohérent et prédictible,
Pour se faire, le recours aux capteurs embarqués dans le téléphone est un
feedback
atout important. Par exemple, il est possible d’adapter l’affichage de
Tenir compte du contexte d’utilisation
l’écran à l’inclinaison du mobile en utilisant des capteurs de mouvement.

être informé du contexte : capteurs…


s’adapter au contexte : affichage, saisie de données
automatisée…
importance des animations

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu
Peu d’éléments d’interaction à l’écran
Peu d’aide => cohérent et prédictible, feedback
L’application pourra réagir à un changement d’inclinaison détecté par le capteur. Mais
Tenir compte du contexte d’utilisation
un capteur peut aussi éviter à l’utilisateur des saisies fastidieuses de données à l’écran.
Par exemple le module GPS renseignera automatiquement sur la position actuelle de
être informé du contexte : capteurs…
l’utilisateur, plutôt que de lui demander de saisir lui même sa position à l’écran.

s’adapter au contexte : affichage, saisie de données


automatisée…
importance des animations

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu
Peu d’éléments d’interaction à l’écran
Peu d’aide => cohérent et prédictible, feedback
Tenir compte du contexte d’utilisation
être informé
Pour renforcerdutoutcontexte : capteurs…
cela, les animations graphiques
joueront un rôle prépondérant pour aider à
s’adapter au contexte
l’apprentissage des procédures: d'interaction
affichage, en saisie de données
venant renforcer l’expérience utilisateur.
automatisée…
importance des animations

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu
Peu d’éléments d’interaction à l’écran
Peu d’aide => cohérent et prédictible, feedback
Tenir compte du contexte d’utilisation
Ainsi la nouvelle interface graphique propose, en quelque sorte, de
être informé
remplacer du
la métaphore contexte
du bureau virtuel:des
capteurs…
PC par une métaphore
mécanique de l’interaction, où, les comportements des éléments d’IHM
s’adapter au contexte : affichage, saisie de données
miment le comportement des objets physiques du monde qui entoure
l’utilisateur. Ainsi la perception mécanique est renforcée et
automatisée…
l’apprentissage des modes d'interaction est simplifié. Les animations à
caractère mécanique comme l’inertie en particulier, viennent renforcer
importance
cette immersion.des animations

➡ Métaphore mécanique
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Repenser le smartphone
20

➡ Nouvelle interface tactile


Faire la part belle au contenu
Peu d’éléments d’interaction à l’écran
Peu d’aide => cohérent et prédictible, feedback
Tenir compte du contexte d’utilisation
être informé du contexte : capteurs…
s’adapter au contexte : affichage, saisie de données
automatisée…
importance des animations
➡ Métaphore mécanique
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Architecture du système
21

Core OS
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Architecture du système
21
Les couches basses de l’OS, repose sur deux noyaux d’OS qui coexistent dans le
smartphone:
un premier noyau système chargé de la gestion radio : le Baseband. Certains parlent du
Baseband comme étant un driver de périphérique mais ce n’est pas exactement cela, le
Baseband décrit une réalité plus complexe puisqu’il regroupe un OS à part entière qui
gère les circuits implantant les fonctions radio du téléphone et un driver permettant de
communiquer entre le noyau Darwin et le noyau du Baseband.
un second noyau appelé Darwin dans la terminologie MacOS, s’appuyant sur le micro
noyau XNU avec une personnalité FreeBSD fonctionne en parallèle, c’est pour cet OS
que l’on développe des applications.

BaseBand (gestion radio GSM, WiFi, BT)


Darwin OS : noyau XNU (mach 3.0+BSD)
Free BSD POSIX, IOKit, Launchd…

Core OS
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Architecture du système
21
Parmi les services bas niveau, on retrouve un ensemble de librairies standard permettant
d’accéder au matériel mais aussi la gestion des services principaux, le runtime Objective-C
(ou Swift maintenant) etc. Ces services sont implantés nativement en C ou en Objective-C
voir en C++.

Nombreux services de bas niveaux


bibliothèques C
Objective-C runtime

Core Services

Core OS
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Architecture du système
21

Services d’accès aux données de types


audio/vidéo…
(écrit en C ou en Objective-C)

Media Framework
Les bibliothèques de programmation de ce niveau gèrent assez spécifiquement les
contenus multimédias, et les aspects liés aux animations et l’IHM, on y retrouve les
Core Services
principales technologies au cœur de MacOS plus quelques développements spécifiques.

Core OS
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Architecture du système
Ensemble de Frameworks Objective-C 21
structurant la programmation des applications

Cocoa Touch

Media Framework

Core Services

Core OS
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Architecture du système
21

Cocoa Touch

Media Framework

Core Services

Core OS
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
Android—Introduction
Sources : Cours de Jean-Michel Douin,
Android.com, Wikipedia…

Paris, 06/02/2024

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
23

Système d'exploitation Open Source (licence Apache)


ciblé principalement sur la téléphonie mobile. Par la
suite, le projet évolue vers le support des tablettes
tactiles, des bracelets connectés, des téléviseurs, des
boutons connectés… Le développement initial était
orienté informatique embarquée mobile grand public
(téléviseurs, radio-réveils, montres, auto-radios…)
Initialement développé par la société éponyme rachetée
par Google en 2005.
premier SDK publié en novembre 2007
création de OHA (Open Handset Alliance)
http://developer.android.com/index.html
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
23
On s’attachera ici à regarder les grands principes mis en œuvre par Android.
Système d'exploitation Open Source (licence Apache)
ciblé principalement sur la téléphonie mobile. Par la
suite, le projet évolue vers le support des tablettes
tactiles, des bracelets connectés, des téléviseurs, des
boutons connectés… Le développement initial était
orienté informatique embarquée mobile grand public
(téléviseurs, radio-réveils, montres, auto-radios…)
Initialement développé par la société éponyme rachetée
par Google en 2005.
premier SDK publié en novembre 2007
création de OHA (Open Handset Alliance)
http://developer.android.com/index.html
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
23

Système d'exploitation Open Source (licence Apache)


ciblé principalement sur la téléphonie mobile. Par la
suite, le projet évolue vers le support des tablettes
En particulier, nous adopterons le parti-pris suivant : si iOS a été conçu avec dans l’esprit la
tactiles, des bracelets
volonté de refondre connectés,
complètement l’interface utilisateur des téléviseurs,
des dispositifs des
mobiles (ce que l’on peut
voir comme un moyen d’attaquer le problème par le « haut ») ; le système Android a été conçu
boutons connectés… Le développement initial était
avec la volonté de créer un système d’exploitation flexible, performant et surtout favorisant
orienté informatique
l’interopérabilité embarquée
entre ses composants (ce que l’on peutmobile
voir comme ungrand public
moyen d’attaquer
problème de la téléphonie mobile par le « bas »). Cette distinction est caricaturale mais montre
le

(téléviseurs, radio-réveils,
bien deux philosophies montres,
à la base nettement opposées avec desauto-radios…)
objectifs différents qui influencent
fortement le domaine et finissent par s’influencer l’une et l’autre.

Initialement développé par la société éponyme rachetée


par Google en 2005.
premier SDK publié en novembre 2007
création de OHA (Open Handset Alliance)
http://developer.android.com/index.html
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
23

Système d'exploitation Open Source (licence Apache)


ciblé principalement sur la téléphonie mobile. Par la
suite, le projet évolue vers le support des tablettes
tactiles, des bracelets connectés, des téléviseurs, des
boutons connectés… Le développement initial était
orienté informatique embarquée mobile grand public
(téléviseurs, radio-réveils, montres, auto-radios…)
Parmi les premiers éléments distinctifs, Android a été conçu initialement pour d’autres
dispositifs que les téléphones mobiles, avec l’ambition d’apporter ce qui se fait de mieux en
Initialement développé par la société éponyme rachetée
termes de système d’exploitation au domaine de l’électronique grand publique. La dimension
système prend donc le pas sur la simple interface homme-machine.
par Google en 2005.
premier SDK publié en novembre 2007
création de OHA (Open Handset Alliance)
http://developer.android.com/index.html
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
23

Système d'exploitation Open Source (licence Apache)


ciblé principalement sur la téléphonie mobile. Par la
suite, le projet évolue vers le support des tablettes
tactiles, des bracelets connectés, des téléviseurs, des
boutons connectés… Le développement initial était
orienté informatique embarquée mobile grand public
(téléviseurs, radio-réveils, montres, auto-radios…)
Alors qu’iOS est un système propriétaire (bien que basé sur de très nombreux composants
Initialement développé par la société éponyme rachetée
OpenSource), Android est voulu résolument ouvert (sous licence Apache), géré par un
par Google en 2005.
groupement d’opérateurs et de constructeurs de l’industrie de la téléphonie mobile garantissant
une certaine indépendance vis à vis de Google…

premier SDK publié en novembre 2007


création de OHA (Open Handset Alliance)
http://developer.android.com/index.html
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
23

Système d'exploitation Open Source (licence Apache)


ciblé principalement sur la téléphonie mobile. Par la
suite, le projet évolue vers le support des tablettes
tactiles, des bracelets connectés, des téléviseurs, des
boutons connectés… Le développement initial était
orienté informatique embarquée mobile grand public
(téléviseurs, radio-réveils, montres, auto-radios…)
Initialement développé par la société éponyme rachetée
par Google en 2005.
premier SDK publié en novembre 2007
Le site développeur Android, est probablement la meilleure source d’information et de tutos
création
pour apprendrede OHA (Open
à programmer Handset
pour cette plate-forme. Alliance)
Je vous engage à parcourir ce site.

http://developer.android.com/index.html
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
23

Système d'exploitation Open Source (licence Apache)


ciblé principalement sur la téléphonie mobile. Par la
suite, le projet évolue vers le support des tablettes
tactiles, des bracelets connectés, des téléviseurs, des
boutons connectés… Le développement initial était
orienté informatique embarquée mobile grand public
(téléviseurs, radio-réveils, montres, auto-radios…)
Initialement développé par la société éponyme rachetée
par Google en 2005.
premier SDK publié en novembre 2007
création de OHA (Open Handset Alliance)
http://developer.android.com/index.html
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
24

Gros efforts sur la mise en place d'une architecture


système pour l'embarqué mobile grand public : souple et
adaptable, sûre, efficace et surtout favorisant
l’interopérabilité. Au delà de la simple adaptation de
Linux au monde embarqué, il propose une architecture
ouverte et personnalisable.
Initialement Android n’a absolument pas vocation à
gérer une interface tactile (interface envisagée : un
clavier hardware «à la» Blackberry et
un stylet). Le support d’une interface
multi-points n’apparait réellement qu’à
partir de la version 2.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
24

Gros efforts sur la mise en place d'une architecture


système pour l'embarqué mobile grand public : souple et
adaptable, sûre, efficace et surtout favorisant
l’interopérabilité. Au delà de la simple adaptation de
Linux au monde embarqué, il propose une architecture
ouverte et personnalisable.
Initialement Android n’a absolument pas vocation à
Android arrive sur le marché des systèmes embarqués dans l’électronique grand public alors que
gérer
depuis desune interface
années, tactile
de nombreux systèmes ont(interface
été proposés et enenvisagée : un
particulier des systèmes
reposant sur Java (JME/JavaCard) et surtout, de très nombreux systèmes reposent sur des
clavier hardware
versions exotiques «àlesla»
de Linux pour Blackberry
systèmes embarqués. Mais, etAndroid possède de nombreux
atouts. Il se présente comme une synthèse réussie des travaux sur Java et Linux, ce qui est
un stylet).
encore Le etsupport
rare à l’époque d’une
propose des idées interface
nouvelles en termes de personnalisation de l’OS et
d’interopérabilité à travers la notion de composants applicatifs et non plus d’application.
multi-points n’apparait réellement qu’à
partir de la version 2.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
24

Gros efforts sur la mise en place d'une architecture


système pour l'embarqué mobile grand public : souple et
adaptable, sûre,estefficace
Mais la sortie d’Android précipitée par et surtout
l’arrivée d’Apple favorisant
sur le marché de la téléphonie
mobile. Et les changements radicaux de ce nouveau concurrent obligent Google à réagir en
l’interopérabilité.
adaptant rapidement son OS à Au delàstandards
de nouveaux de laquisimple adaptation
n’étaient pas de en
envisagés initialement,
Linux
particulierau monde
au niveau de l’IHM.embarqué, il
Les premières versionspropose une
d’Android vont architecture
s’efforcer de corriger les
choix initiaux au niveau de l’IHM et par exemple la gestion de l’interface tactile multipoints ne
ouverte
commenceraet personnalisable.
à être une réalité, dans Android qu’avec la version 2.

Initialement Android n’a absolument pas vocation à


gérer une interface tactile (interface envisagée : un
clavier hardware «à la» Blackberry et
un stylet). Le support d’une interface
multi-points n’apparait réellement qu’à
partir de la version 2.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
24

Gros efforts sur la mise en place d'une architecture


système pour l'embarqué mobile grand public : souple et
adaptable, sûre, efficace et surtout favorisant
l’interopérabilité. Au delà de la simple adaptation de
Linux au monde embarqué, il propose une architecture
ouverte et personnalisable.
Initialement Android n’a absolument pas vocation à
gérer une interface tactile (interface envisagée : un
clavier hardware «à la» Blackberry et
un stylet). Le support d’une interface
multi-points n’apparait réellement qu’à
partir de la version 2.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
25

La grande caractéristique d’Android repose sur une


architecture très ouverte du système. Les constructeurs
n’ont pas la main mise sur l’OS (OHA) mais peuvent le
configurer entièrement à leur gré (grande adaptabilité)
Android bénéficie pleinement des avancées de
l’expérience JavaME en s’appuyant sur des concepts
assez proches, mais bien plus aboutis :
Utilisation du langage Java optimisée
(Exécutif Dalvik, nouvelles API,
ramasse-miettes, vérifications…)
Un modèle de sécurité pragmatique
Des composants applicatifs avec un
cycle de vie propre, inspiré du Web
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
Pour contrer Apple, Google (qui n’est pas un constructeur de machine) ne souhaite
pas s’enferrer avec un unique constructeur. Pour rassurer les constructeurs, Google 25
cède ses prérogatives sur Android à l’OHA, où tous les constructeurs sont
La grande caractéristique d’Android repose sur une
bienvenues. Les constructeurs pourront utiliser l’extrême souplesse de l’OS pour
personnaliser leur version et ainsi se démarquer les uns des autres.
architecture très ouverte du système. Les constructeurs
n’ont pas la main mise sur l’OS (OHA) mais peuvent le
configurer entièrement à leur gré (grande adaptabilité)
Android bénéficie pleinement des avancées de
l’expérience JavaME en s’appuyant sur des concepts
assez proches, mais bien plus aboutis :
Utilisation du langage Java optimisée
(Exécutif Dalvik, nouvelles API,
ramasse-miettes, vérifications…)
Un modèle de sécurité pragmatique
Des composants applicatifs avec un
cycle de vie propre, inspiré du Web
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
25

La grande caractéristique d’Android repose sur une


architecture très ouverte du système. Les constructeurs
n’ont pas la main mise sur l’OS (OHA) mais peuvent le
configurer entièrement à leur gré (grande adaptabilité)
Alors que iOS propose un langage très peu
Android bénéficie pleinement des avancées de connu (au moins à l’époque de sa sortie).
l’expérience JavaME en s’appuyant sur des concepts Android s’appuie sur le langage Java très
populaire et très utilisé également dans la
assez proches, mais bien plus aboutis : formation des développeurs.

Utilisation du langage Java optimisée


(Exécutif Dalvik, nouvelles API,
ramasse-miettes, vérifications…)
Un modèle de sécurité pragmatique
Des composants applicatifs avec un
cycle de vie propre, inspiré du Web
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
25

La grande caractéristique d’Android repose sur une


architecture très ouverte du système. Les constructeurs
n’ont pas la main mise sur l’OS (OHA) mais peuvent le
configurer entièrement à leur gré (grande adaptabilité)
Android bénéficie pleinement des avancées de
l’expérience JavaME en s’appuyant sur des concepts
assez proches, mais bien plus aboutis :
Utilisation du langage
Android construit un modèle de Java optimisée
sécurité hérité
de Java mais avec une gestion des politiques
(Exécutif Dalvik,
pragmatique nouvelles
(pas totalement API,
étranger au choix
ramasse-miettes, vérifications…)
fait par Apple d’ailleurs).

Un modèle de sécurité pragmatique


Des composants applicatifs avec un
cycle de vie propre, inspiré du Web
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
25

La grande caractéristique d’Android repose sur une


architecture très ouverte du système. Les constructeurs
n’ont pas la main mise sur l’OS (OHA) mais peuvent le
configurer entièrement à leur gré (grande adaptabilité)
Android bénéficie pleinement des avancées de
l’expérience JavaME en s’appuyant sur
Enfin, c’est sur l’architecture applicative qu’Android se distingue en
des concepts
assez proches,
proposant plusieurs typesmais bienapplicatifs,
de composants plus aboutis
possédant :
chacun une gestion de cycle de vie adaptée. Le modèle applicatif
Utilisation
d’Android est d’ailleursdu langage
très inspiré Java Web.
des applications optimisée
Ce qui
finalement n’est pas très étonnant de la part de Google. La notion
(Exécutif
d’application Dalvik,
n’est donc nouvelles
pas centrale API,
sous Android. C’est plus la
ramasse-miettes, vérifications…)
concurrence d’Apple et l’AppStore qui conduit à masquer la grande
puissance des mécanismes sous-jacents d’Android, sous le terme
Un modèle de sécurité pragmatique
d’application.

Des composants applicatifs avec un


cycle de vie propre, inspiré du Web
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Android
25

La grande caractéristique d’Android repose sur une


architecture très ouverte du système. Les constructeurs
n’ont pas la main mise sur l’OS (OHA) mais peuvent le
configurer entièrement à leur gré (grande adaptabilité)
Android bénéficie pleinement des avancées de
l’expérience JavaME en s’appuyant sur des concepts
assez proches, mais bien plus aboutis :
Utilisation du langage Java optimisée
(Exécutif Dalvik, nouvelles API,
ramasse-miettes, vérifications…)
Un modèle de sécurité pragmatique
Des composants applicatifs avec un
cycle de vie propre, inspiré du Web
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
Appréhender les différentes versions du système 26
Android, va nous permettre de mieux saisir son
évolution. Comme Android, n’est pas lié à un
constructeur nous allons ici n’aborder que
Version dul’évolution du système d’exploitation. Et nous
Version Nom de code Date de sortiquelques informations par la suite
Noyau donneront Détailssur les
Linux utilisé
constructeurs version
et donc les matériels rencontrés.
développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26
Nous commençons par lister les versions du système antérieur à l’arrivée des tablettes tactiles. Dans les
tableaux qui vont suivre, nous nous attarderons sur les évolutions des grandes versions du système.

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26
Nous distinguerons les
principales versions du système

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
Chaque version dispose en général d’un nom de code tiré du nom d’un plat de
dessert. À partir de la version 1.5, la règle se formalise un peu plus et le nom 26
de dessert choisi doit commencer par une lettre de l’alphabet pris dans l’ordre.
Cependant, cette règle semble abandonnée avec l’arrivée d’Android 10.

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
Le système Android, nous le verrons, s’appuie sur un noyau Linux qu’il 26
modifie pour ses besoins propres. Le noyau Linux est pris dans une certaine
version et les modifications sont appliquées à cette version.

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26

La première livraison d’Android à la communauté des développeurs en 2007, n’a pour but que de
permettre aux développeurs et aux constructeurs de smartphones de découvrir l’OS. Il n’y aura pas de
téléphones commercialisés avecducette version d’Android. Seuls quelques prototypes seront disponibles
Version
Version Nom de code Noyau Date de sorti Détails
afin de tester les différents aspects.
Linux utilisé
Cette première version n’a pas de nom de code.
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26

Version du
Version Nom de code Noyau Date de sorti Détails
La première version commercialisée
Linux utilisé possède un nom de code mais la règle alphabétique
n'a pas encore été instaurée. Cette version est
version essentiellement
développeurs, déployé
distribuée avec le SDK sur
avantun téléphone
la sortie du premier téléphone
1.0 1 Nov 2007
commercial : le HTC G1 Dream entré de fait dans la légende duAndroid monde Android.
2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream
1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
La première véritable version commercialisée sur plusieurs modèles de téléphones issus
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 de plusieurs constructeurs est la2007
1 Nov version Cupcake (lettre C car c’est la 3ème version
Android
d’Android). À partir de cette version, constructeurs et développeurs ont une vision claire
2.6.27
1.1 de cePetit
qu’est
Four et ce que sera le 2008 Android.version incluse dans le premier téléphone, le HTC G1/Dream
monde
1 Oct

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26
La version suivante (Donut) constitue une première rupture dans le monde Android car
pour la première fois la base Linux change de version. Si tout le monde salue le choix du
noyau Linux dans le monde Android, de nombreuses adaptations ont été faites sur le
noyauVersion
standarddu
et les constructeurs vont réaliser avec cette version que ce choix n’est pas
Version sans conséquence…
Nom de code Noyau Date deJe vais ouvrir ici une parenthèse technique
sorti Détails et faire appel à vos
Linux utilisédes systèmes d’exploitation, pour tenter de vous expliquer un phénomène
connaissance
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0
inhérent à l’architecture
1 Nov 2007
d’Android qui se révélera assez problématique à l’avenir… Bien
Android
sur, je n’attend pas de votre part une compréhension très précise de ce qui se joue ici, mais
1.1 le but est
Petit Four de vous1 Oct
2.6.27 donner
2008 des éléments versionde compréhension
incluse d’un problème
dans le premier téléphone, important qui
le HTC G1/Dream
pèse encore fortement dans l’évolution du système Android.
nouvelles fonctionnalités et mises à jour de l’interface graphique
1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024
Le noyau Android est donc basé sur le noyau Linux. Par contre, les transformations qui sont faites nécessitent de
Les versions
« figer » une version du noyau sur lequel appliquer les transformations. Or le noyau Linux est ce que l’on appelle un
noyau monolithique. Cela signifie que son noyau est un programme qui va intégrer tous les services élémentaires en
un seul gros bloc exécutable. Bien sur depuis quelques années le système a été rendu modulaire et chaque service 26
peut-être isolé et regroupé dans des modules changeables dynamiquement afin de rendre sa compilation moins
lourde et adaptable. Il n’en reste pas moins un noyau monolithique qui impose donc une gestion unique de l’espace
mémoire du noyau et donc entre autre, des adresses figées pour tous les services. Donc d’une version à une autre il
faudra recompiler tous les modules avec le noyau pour tenir compte des modifications qui apparaitront forcément
Version du
entre différentes
Version versions
Nom de code du noyau.
Noyau Date de sorti Détails
De plus, si le noyau Linux est un noyau
Linux utilisé OpenSource, depuis quelques années, afin de s’adapter à certaines
préoccupations industrielles, la licence du code source version développeurs,
a été modifiéedistribuée avec le SDK
pour passer d’uneavantlicence
la sortie duGPL
premier téléphone
(dite
1.0 1 Nov 2007 Android
contaminante et obligeant tout code source du noyau à être ouvert —c’est-à-dire à être publique, lisible et
modifiable)1.1à une licence
Petit Four
LGPL 2.6.27
(Lesser GPL) moins contraignante
1 Oct 2008
et autorisant
version incluse dans le premierdes modules
téléphone, le HTCnon OpenSource.
G1/Dream
Cette modification qui peut paraître anecdotique n’est pourtant pas sans conséquence… Les industriels ont souhaité
nouvelles fonctionnalités et mises à jour de l’interface graphique
ce changement
1.5 afinCupcake
de pouvoir apporter des 1 Aprfonctionnalités
2009 au noyau sans pour autant être obligés de publier les
sources de1.6leurs développements.
Donut 1 Sep 2009 nouvelles fonctionnalités et mises à jour de l’interface graphique

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
Grâce à la notion de module dans le noyau Linux, il devient possible de distribuer des drivers binaires, sans pour
autant en distribuer le source. Hors dans le processus de conception d’un téléphone, le constructeur va passer des
contrats avec des sociétés tierces proposant des « circuits électroniques » dont les drivers (les modules ajoutés à 26
Linux pour piloter ces circuits) doivent par contrat rester non publique pour ne pas violer les secrets industriels
associés aux dits circuits… Dans ces conditions le constructeur de téléphone va produire une version du système
Android grâce à un équipe de développeurs payée pour faire ce travail et qui va compiler une version du noyau
Linux avec les modules binaires spécifiques aux circuits en question.
Version du
Mais laVersion
nature monolithique
Nom de code (ilNoyau
faut recopier tout le noyau et ses modules) duDétails
Date de sorti noyau Linux va obliger à refaire le
travail à chaque nouvelle version du noyau.
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
Or la durée
1.0
de vie commerciale d’un téléphone
1 Nov 2007
est généralement de 6 mois à un an (période durant laquelle un
Android
téléphone est activement vendu). Après, sur un marché très fortement concurrentiel comme le marché Android,
toute mobilisation
1.1
d’une équipe2.6.27
Petit Four
de développeurs
1 Oct 2008
pour développer pour
version incluse dansun téléphone
le premier quilene
téléphone, HTC rapporte
G1/Dream plus rien est un
coût pour le constructeur qu’il va rechigner à faire.
nouvelles fonctionnalités et mises à jour de l’interface graphique
C’est la principale
1.5 raison pour laquelle 1ilApr
Cupcake est2009
difficile de faire migrer un téléphone Android vers des versions plus
récentes 1.6
de l’OS. Donut 1 Sep 2009 nouvelles fonctionnalités et mises à jour de l’interface graphique

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009
La version 2.0 est une étape importante dans l’évolution du système et en particulier son interface. Mais cette
version se révèle
1.6 tropDonut
« buguée » et va donc être
1 Sep réellementnouvelles
2009 implantée dans saetversion
fonctionnalités 2.1
mises à jour qui reprendra
de l’interface graphiquedonc le
nom de code de Eclaire.
2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique
2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26

La version 2.2 d’Android est une première tentative d’améliorer les performances générales du
système Android en apportant unVersion « compilateur
du à la volée » (Just In Time Compiler —JIT) ) à la
Version Nom de code Noyau Date de sorti Détails
machine virtuelle Dalvik. Conscients de
Linux utilisé
l’énorme retard en termes de performances du système
Android vis à vis de son concurrent direct (iOS), les ingénieurs Android
version développeurs, cherchent
distribuée uneavant
avec le SDK direction
la sortie du premier téléphone
d’amélioration
1.0 qui permette d’envisager de rattraper
1 Nov 2007 le gap important observé par les utilisateurs.
Android
L’utilisation d’un JIT est une arme bien éprouvée dans le monde des PC de bureau. Cette
2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream
technologie1.1est très Petit Four pour calmer les
attendue 1 Oct 2008
impatiences. Si un gain de performances est bien au
rendez-vous, 1.5
les projections
Cupcake
quand aux possibles1 Apr 2009
gains encore disponibles
nouvelles suretcette
fonctionnalités mises àbase
jour de l’interface graphique
technologique ne sont pas très encourageantes. Il va s’en suivre une assez longue période de
nouvelles fonctionnalités et mises à jour de l’interface graphique
réflexion et 1.6
donc de flouDonutquand au futur d’Android.
1 Sep 2009 On oscille entre la promotion du NDK (Native
Development 2.0
Kit) quiEclair
propose la possibilité
2.6.29
de développer des
1 Oct 2009
applications
nouvelles natives
fonctionnalités et mises(dans
à jour deun langage
l’interface graphique
autre que Java mais avec des contraintes lourdes pour dialoguer avec le reste du système qui lui est
correction du trop grand nombre de bugs de la 2.0
écrit en Java…)
2.1 ou des solutions visant à améliorer
Eclair 1 Jan 2010 les performances de la Dalvik VM…
vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface
2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


Cette
2.0 version
Eclairest la dernière
2.6.29 à s’intéresser
1 Oct 2009 au seul
développement
2.1 Eclair
pour téléphone mobile,
1 Jan 2010
car Android correction du trop grand nombre de bugs de la 2.0
fait face à un nouveau marché ouvert par son
vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface
concurrent
2.2
avec
Froyo
l’iPad : le
2.6.32monde des
1 May 2010
tablettes graphique
tactiles…
dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique
HoneyComb marque cette rupture
en étant le premier OS uniquement dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.
dédié à ce type de support.
réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
26

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
version développeurs, distribuée avec le SDK avant la sortie du premier téléphone
1.0 1 Nov 2007 Android

2.6.27 version incluse dans le premier téléphone, le HTC G1/Dream


1.1 Petit Four 1 Oct 2008

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.5 Cupcake 1 Apr 2009

nouvelles fonctionnalités et mises à jour de l’interface graphique


1.6 Donut 1 Sep 2009

2.6.29 nouvelles fonctionnalités et mises à jour de l’interface graphique


2.0 Eclair 1 Oct 2009

correction du trop grand nombre de bugs de la 2.0


2.1 Eclair 1 Jan 2010

vitesse améliorée (JIT), nouvelles fonctionnalités et mises à jour de l’interface


2.2 Froyo 2.6.32 1 May 2010 graphique

dernière version dédiée uniquement aux smartphones. Cette version est parfois utilisée
2.3 Gingerbread 2.6.35 1 Dec 2010 sur de petites tablettes.

réservé aux tablettes tactiles et aux téléviseurs connectés, cette mise à jour comprend
3.0 Honeycomb 2.6.36 1 Feb 2011 de nombreux changements dans l’interface

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
27

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
cette nouvelle version, fortement inspirée d'Honeycomb, unifiée pour smartphones,
Ice Cream
4.0 3.0.1 1 Oct 2011 tablettes et Google TV apporte de nombreux changements
Sandwich

ajoute un système de notification améliorée, Google Now, un système concurrent de


4.1 Jelly Bean 3.0.31 1 Jul 2012 Siri et le Project Butter qui augmente la fluidité d'Android;

nouvelle interface de l'appareil photo et l'introduction de Photosphère permettant une


prise des photos à 360° type Street View, d'un système multi-compte uniquement sur
4.2 Jelly Bean 1 Nov 2012 tablette, de Type Gesture permettant d'écrire avec le clavier rien qu'en glissant le doigt
et d'améliorations de Google Now…

3.0-3.1 Amélioration du support Bluetooth, OpenGL ES 3.0, Amélioration PhotoSpère,


Autocomplétion dans l’application de numérotation téléphonique, Amélioration de la
gestion des fichiers modification du modèle de sécurité («App Ops» non officiel),
4.3 Jelly Bean 23 Jul 2013
gestion de la vidéo 4K, «geofencing» modification du comportement WiFi.
Amélioration de l’internationalisation et modification de la gestion DRM

Modification du design UI, support zRAM (économie mémoire), API d’impression sans fil,
Amélioration du support NFC.Amélioration WebViews (Chrome) nouvelles APIs SMS,
31/10/2013 nouvelles APIs transitions (UI), framework gestion stockage des données. Amélioration
4.4 KitKat 3.4-3.10
gestion des capteurs et de l’audio, enregistrement vidéo de l’écran, amélioration des
support d’accessibilité et surtout ART !

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
27
À partir de la version 4, Android opère une première refonte de son modèle graphique et
propose une première version unifiant la version Android pour téléphone mobile
(Gingerbread) qui a continué à être
Version du mise à jour et la version 3 spécialement dédiée au
tablettes…
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
cette nouvelle version, fortement inspirée d'Honeycomb, unifiée pour smartphones,
Ice Cream
4.0 3.0.1 1 Oct 2011 tablettes et Google TV apporte de nombreux changements
Sandwich

ajoute un système de notification améliorée, Google Now, un système concurrent de


4.1 Jelly Bean 3.0.31 1 Jul 2012 Siri et le Project Butter qui augmente la fluidité d'Android;

nouvelle interface de l'appareil photo et l'introduction de Photosphère permettant une


prise des photos à 360° type Street View, d'un système multi-compte uniquement sur
4.2 Jelly Bean 1 Nov 2012 tablette, de Type Gesture permettant d'écrire avec le clavier rien qu'en glissant le doigt
et d'améliorations de Google Now…

3.0-3.1 Amélioration du support Bluetooth, OpenGL ES 3.0, Amélioration PhotoSpère,


Autocomplétion dans l’application de numérotation téléphonique, Amélioration de la
gestion des fichiers modification du modèle de sécurité («App Ops» non officiel),
4.3 Jelly Bean 23 Jul 2013
gestion de la vidéo 4K, «geofencing» modification du comportement WiFi.
Amélioration de l’internationalisation et modification de la gestion DRM

Modification du design UI, support zRAM (économie mémoire), API d’impression sans fil,
Amélioration du support NFC.Amélioration WebViews (Chrome) nouvelles APIs SMS,
31/10/2013 nouvelles APIs transitions (UI), framework gestion stockage des données. Amélioration
4.4 KitKat 3.4-3.10
gestion des capteurs et de l’audio, enregistrement vidéo de l’écran, amélioration des
support d’accessibilité et surtout ART !

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
27

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
Les versions suivantes
Ice Cream
unifient le système et préparent la version, fortement inspirée d'Honeycomb, unifiée pour smartphones,
cette nouvelle
4.0
transformation 3.0.1
du modèle d’exécution1 Oct 2011
d’Android. tablettes et Google TV apporte de nombreux changements
Sandwich

ajoute un système de notification améliorée, Google Now, un système concurrent de


4.1 Jelly Bean 3.0.31 1 Jul 2012 Siri et le Project Butter qui augmente la fluidité d'Android;

nouvelle interface de l'appareil photo et l'introduction de Photosphère permettant une


prise des photos à 360° type Street View, d'un système multi-compte uniquement sur
4.2 Jelly Bean 1 Nov 2012 tablette, de Type Gesture permettant d'écrire avec le clavier rien qu'en glissant le doigt
et d'améliorations de Google Now…

3.0-3.1 Amélioration du support Bluetooth, OpenGL ES 3.0, Amélioration PhotoSpère,


Autocomplétion dans l’application de numérotation téléphonique, Amélioration de la
gestion des fichiers modification du modèle de sécurité («App Ops» non officiel),
4.3 Jelly Bean 23 Jul 2013
gestion de la vidéo 4K, «geofencing» modification du comportement WiFi.
Amélioration de l’internationalisation et modification de la gestion DRM

Modification du design UI, support zRAM (économie mémoire), API d’impression sans fil,
Amélioration du support NFC.Amélioration WebViews (Chrome) nouvelles APIs SMS,
31/10/2013 nouvelles APIs transitions (UI), framework gestion stockage des données. Amélioration
4.4 KitKat 3.4-3.10
gestion des capteurs et de l’audio, enregistrement vidéo de l’écran, amélioration des
support d’accessibilité et surtout ART !

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
27

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
cette nouvelle version, fortement inspirée d'Honeycomb, unifiée pour smartphones,
Ice Cream
4.0 3.0.1 1 Oct 2011 tablettes et Google TV apporte de nombreux changements
Sandwich
Une fonctionnalité passé quasi inaperçue sont les AppOps : une
ajoute undu
refonte système
modèle de notification améliorée,
de sécurité Google Now,
Android un système
qui ne concurrent
fera qu’un de
passage
4.1 Jelly Bean 3.0.31 1 Jul 2012 Siri et le Project Butter qui augmente la fluidité d'Android;
éphémère en guise de ballon sonde. La fonctionnalité reviendra bien
plus tard,
nouvelle plus de
interface mure dans
l'appareil Android
photo 6. L’idée
et l'introduction est de fournir
de Photosphère permettantun
unecontrôle
par l’utilisateur
prise des photos à 360°destypeautorisations
Street View, d'unqu’il
systèmeconcède à une
multi-compte application
uniquement sur à
4.2 Jelly Bean 1 Nov 2012 tablette, de Type Gesture permettant d'écrire avec le clavier rien qu'en glissant le doigt
tout moment et non plus simplement au moment du choix d’installer
et d'améliorations de Google Now…
ou non l’application sur le terminal. Les ingénieurs ont bien
3.0-3.1 conscience
Améliorationdes limites
du support de leurs
Bluetooth, OpenGLchoix initiaux
ES 3.0, en laPhotoSpère,
Amélioration matière…
Autocomplétion dans l’application de numérotation téléphonique, Amélioration de la
gestion des fichiers modification du modèle de sécurité («App Ops» non officiel),
4.3 Jelly Bean 23 Jul 2013
gestion de la vidéo 4K, «geofencing» modification du comportement WiFi.
Amélioration de l’internationalisation et modification de la gestion DRM

Modification du design UI, support zRAM (économie mémoire), API d’impression sans fil,
Amélioration du support NFC.Amélioration WebViews (Chrome) nouvelles APIs SMS,
31/10/2013 nouvelles APIs transitions (UI), framework gestion stockage des données. Amélioration
4.4 KitKat 3.4-3.10
gestion des capteurs et de l’audio, enregistrement vidéo de l’écran, amélioration des
support d’accessibilité et surtout ART !

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
27

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
cette nouvelle version, fortement inspirée d'Honeycomb, unifiée pour smartphones,
Ice Cream
4.0 3.0.1 1 Oct 2011 tablettes et Google TV apporte de nombreux changements
Sandwich

ajoute un système de notification améliorée, Google Now, un système concurrent de


4.1 Jelly Bean 3.0.31 1 Jul 2012 Siri et le Project Butter qui augmente la fluidité d'Android;

nouvelle interface de l'appareil photo et l'introduction de Photosphère permettant une


Kitkat préfigure une rupture importante dans le système Android.
prise des photos à 360° type Street View, d'un système multi-compte uniquement sur
4.2 Jelly Bean 1Après
Nov 2012avoir longtemps
tablette, tergiversé
de Type Gesture permettantsur l’orientation
d'écrire avec le clavieràrien
prendre pourle doigt
qu'en glissant
combler les lacunes d’Android en termedede
et d'améliorations performances,
Google Now… KitKiat
3.0-3.1
propose en test (la fonctionnalité est activable mais n’est pas la
Amélioration du support Bluetooth, OpenGL ES 3.0, Amélioration PhotoSpère,
solution par défaut) un
Autocomplétion dansnouveau modèle
l’application d’exécutif
de numérotation Android
téléphonique, (une de la
Amélioration
4.3 Jelly Bean
alternative gestion
23 Jul 2013
à la Dalvik VM).
des fichiers L’idéeduest
modification simple
modèle : compiler
de sécurité («App Ops» lenon
codeofficiel),
exécutable Dalvikgestion de la vidéo
(.dex) en4K,code
«geofencing» modification du directement
natif (exécutable comportement WiFi.par le
Amélioration de l’internationalisation et modification de la gestion DRM
processeur du téléphone, sans interprète—sans Dalvik) mais dans un
environnement préservant
Modification du design UI,toutes les fonctionnalités
support zRAM (économie mémoire), APIded’impression
la DalvikVM. sans fil,
Amélioration du support NFC.Amélioration WebViews (Chrome) nouvelles APIs SMS,
31/10/2013 nouvelles APIs transitions (UI), framework gestion stockage des données. Amélioration
4.4 KitKat 3.4-3.10
gestion des capteurs et de l’audio, enregistrement vidéo de l’écran, amélioration des
support d’accessibilité et surtout ART !

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
27

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
cette nouvelle version, fortement inspirée d'Honeycomb, unifiée pour smartphones,
Ice Cream
4.0 3.0.1 1 Oct 2011 tablettes et Google TV apporte de nombreux changements
Sandwich

Après deajoute un système


longues de notification
années améliorée, les
de réflexion, Google Now, un système
ingénieurs ont concurrent
finalement de
4.1 Jelly Bean 3.0.31 1 Jul 2012 Siri et le Project Butter qui augmente la fluidité d'Android;
tranché. Le NDK pose beaucoup trop de problèmes pour assurer la
qualité nouvelle
des applications développées
interface de l'appareil en natif de
photo et l'introduction (trop d’entorses
Photosphère permettant une
possibles audesmodèle
prise de sécurité,
photos à 360° nécessitant
type Street View, d'un systèmedes équipesuniquement
multi-compte de tests surnon
4.2 Jelly Bean 1 Nov 2012 tablette, de Type Gesture permettant d'écrire avec le clavier rien qu'en glissant le doigt
financées à l’entrée du GooglePlay…), L’abandon de Java de son
et d'améliorations de Google Now…
côté demanderai trop de re-développement de l’ensemble de l’OS et
3.0-3.1 demanderai aux milliers
Amélioration du support deBluetooth,
développeurs
OpenGL ES de3.0,
jeter tout leur
Amélioration travail ou
PhotoSpère,
presque.Autocomplétion
Il faudraitdans également reprendre
l’application de numérotationl’intégral du Amélioration
téléphonique, processusdedela
gestion des fichiers modification du modèle de sécurité («App Ops» non officiel),
4.3 Jelly Bean compilation
23 Jul 2013 des applications…
gestion de la vidéo 4K, «geofencing» modification du comportement WiFi.
L’ART (Android RunTime)
Amélioration fait donc figure
de l’internationalisation de « sauveur
et modification ». DRM
de la gestion Offrant de
bonnes performances et préservant l’utilisation du langage Java et de
Modification du design UI, support zRAM (économie mémoire), API d’impression sans fil,
la chaîneAmélioration
de compilation. Nous détaillerons
du support NFC.Amélioration WebViewsceci parnouvelles
(Chrome) la suite.APIs SMS,
31/10/2013 nouvelles APIs transitions (UI), framework gestion stockage des données. Amélioration
4.4 KitKat 3.4-3.10
gestion des capteurs et de l’audio, enregistrement vidéo de l’écran, amélioration des
support d’accessibilité et surtout ART !

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
27

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé
cette nouvelle version, fortement inspirée d'Honeycomb, unifiée pour smartphones,
Ice Cream
4.0 3.0.1 1 Oct 2011 tablettes et Google TV apporte de nombreux changements
Sandwich

ajoute un système de notification améliorée, Google Now, un système concurrent de


4.1 Jelly Bean 3.0.31 1 Jul 2012 Siri et le Project Butter qui augmente la fluidité d'Android;

nouvelle interface de l'appareil photo et l'introduction de Photosphère permettant une


prise des photos à 360° type Street View, d'un système multi-compte uniquement sur
4.2 Jelly Bean 1 Nov 2012 tablette, de Type Gesture permettant d'écrire avec le clavier rien qu'en glissant le doigt
et d'améliorations de Google Now…

3.0-3.1 Amélioration du support Bluetooth, OpenGL ES 3.0, Amélioration PhotoSpère,


Autocomplétion dans l’application de numérotation téléphonique, Amélioration de la
gestion des fichiers modification du modèle de sécurité («App Ops» non officiel),
4.3 Jelly Bean 23 Jul 2013
gestion de la vidéo 4K, «geofencing» modification du comportement WiFi.
Amélioration de l’internationalisation et modification de la gestion DRM

Modification du design UI, support zRAM (économie mémoire), API d’impression sans fil,
Amélioration du support NFC.Amélioration WebViews (Chrome) nouvelles APIs SMS,
31/10/2013 nouvelles APIs transitions (UI), framework gestion stockage des données. Amélioration
4.4 KitKat 3.4-3.10
gestion des capteurs et de l’audio, enregistrement vidéo de l’écran, amélioration des
support d’accessibilité et surtout ART !

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
28

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé

IHM : Material Design, Machine d’exécution ART, support du 64 bits, Projet Volta,
3/11/2014 Économiseur de batterie, OpenGL ES 3.1, Android Extension Pack, Heads-Up
5.0 Lollipop
notification.
3.4-3.10
21 avril Support multi SIM, Version haute définition (audio) de la téléphonie
5.1.1 Lollipop
2015
Amélioration de l’autonomie, Google on Tap, Personalisation System UI Tuner,
6.0 Marshmallow 3.10-3.18 5 oct. 2015 Nouveau système de gestion des autorisations, gestion des capteurs d’empruntes
digitales, Android Pay…

Mode multifenêtre, amélioration de la gestion de l’énergie.


7.0 Nougat 3.18-4.4 22 août 2016

Instant Apps, Picture in Picture, contrôle de la limite des applications en tâche de


8.0-8.1 Oreo 4.4-4.9 2017 fond…

Amélioration de l’interface graphique (comportements) et de la gestion de l’énergie,


9.0 Pie 5.0 Dec. 2018 triangulation WiFi indoor, IA…

Sous titrage automatique, Amélioration de l’IA, Filtrage audio amélioré,


Remplacement de boutons de navigation du système par des gestuelles, Amélioration
1.0 Android 10 5.03 Sept. 2019 des réglages de sécurité et de gestion de la vie privée. Amélioration de la gestion des
notifications.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
28

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé

À partir de Lollipop, le modèle d’exécution IHM :d’Android devient


Material Design, Machine d’exécution ART, support du 64 bits, Projet Volta,
l’ART. La 3/11/2014
transition préparée avec la version 4.4 à lieu
Économiseur en douceur.
de batterie, OpenGL ES 3.1, Android Extension Pack, Heads-Up
5.0 Lollipop
notification.
De très nombreux changement
3.4-3.10 ont pourtant lieu simultanément.
21 avril Support multi SIM, Version haute définition (audio) de la téléphonie
5.1.1 Lollipop
2015
Amélioration de l’autonomie, Google on Tap, Personalisation System UI Tuner,
6.0 Marshmallow 3.10-3.18 5 oct. 2015 Nouveau système de gestion des autorisations, gestion des capteurs d’empruntes
digitales, Android Pay…

Mode multifenêtre, amélioration de la gestion de l’énergie.


7.0 Nougat 3.18-4.4 22 août 2016

Instant Apps, Picture in Picture, contrôle de la limite des applications en tâche de


8.0-8.1 Oreo 4.4-4.9 2017 fond…

Amélioration de l’interface graphique (comportements) et de la gestion de l’énergie,


9.0 Pie 5.0 Dec. 2018 triangulation WiFi indoor, IA…

Sous titrage automatique, Amélioration de l’IA, Filtrage audio amélioré,


Remplacement de boutons de navigation du système par des gestuelles, Amélioration
1.0 Android 10 5.03 Sept. 2019 des réglages de sécurité et de gestion de la vie privée. Amélioration de la gestion des
notifications.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
28
Outre le changement de l’ART, Lollipop propose la
refonte
Version du de conception d’interface graphique : material
Version Nom de code Noyau Date de sorti Détails
design
Linux utilisé pose de nouvelles lignes de conduites et une
nouvelle philosophie de conception revenant sur
IHM : Material Design, Machine d’exécution ART, support du 64 bits, Projet Volta,
certains principes
3/11/2014 introduits par
Économiseur de le version
batterie, OpenGL 4
ES(plus
3.1, Android Extension Pack, Heads-Up
5.0 Lollipop
d’utilisation systématique des Fragments…) notification.
3.4-3.10
21 avril Support multi SIM, Version haute définition (audio) de la téléphonie
5.1.1 Lollipop
2015
Amélioration de l’autonomie, Google on Tap, Personalisation System UI Tuner,
6.0 Marshmallow 3.10-3.18 5 oct. 2015 Nouveau système de gestion des autorisations, gestion des capteurs d’empruntes
digitales, Android Pay…

Mode multifenêtre, amélioration de la gestion de l’énergie.


7.0 Nougat 3.18-4.4 22 août 2016

Instant Apps, Picture in Picture, contrôle de la limite des applications en tâche de


8.0-8.1 Oreo 4.4-4.9 2017 fond…

Amélioration de l’interface graphique (comportements) et de la gestion de l’énergie,


9.0 Pie 5.0 Dec. 2018 triangulation WiFi indoor, IA…

Sous titrage automatique, Amélioration de l’IA, Filtrage audio amélioré,


Remplacement de boutons de navigation du système par des gestuelles, Amélioration
1.0 Android 10 5.03 Sept. 2019 des réglages de sécurité et de gestion de la vie privée. Amélioration de la gestion des
notifications.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
28

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé

IHM : Material Design, Machine d’exécution ART, support du 64 bits, Projet Volta,
3/11/2014 Économiseur de batterie, OpenGL ES 3.1, Android Extension Pack, Heads-Up
5.0 Lollipop
notification.
3.4-3.10
21 avril Support multi SIM, Version haute définition (audio) de la téléphonie
5.1.1 Lollipop Officialisation du retour de l’évolution des AppOps
2015
Amélioration de l’autonomie, Google on Tap, Personalisation System UI Tuner,
6.0 Marshmallow 3.10-3.18 5 oct. 2015 Nouveau système de gestion des autorisations, gestion des capteurs d’empruntes
digitales, Android Pay…

Mode multifenêtre, amélioration de la gestion de l’énergie.


7.0 Nougat 3.18-4.4 22 août 2016

Instant Apps, Picture in Picture, contrôle de la limite des applications en tâche de


8.0-8.1 Oreo 4.4-4.9 2017 fond…

Amélioration de l’interface graphique (comportements) et de la gestion de l’énergie,


9.0 Pie 5.0 Dec. 2018 triangulation WiFi indoor, IA…

Sous titrage automatique, Amélioration de l’IA, Filtrage audio amélioré,


Remplacement de boutons de navigation du système par des gestuelles, Amélioration
1.0 Android 10 5.03 Sept. 2019 des réglages de sécurité et de gestion de la vie privée. Amélioration de la gestion des
notifications.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
28

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé

IHM : Material Design, Machine d’exécution ART, support du 64 bits, Projet Volta,
3/11/2014 Économiseur de batterie, OpenGL ES 3.1, Android Extension Pack, Heads-Up
5.0 Lollipop
notification.
3.4-3.10
21 avril Support multi SIM, Version haute définition (audio) de la téléphonie
5.1.1 Lollipop
2015
Amélioration de l’autonomie, Google on Tap, Personalisation System UI Tuner,
6.0 Marshmallow 3.10-3.18 5 oct. 2015 Nouveau système de gestion des autorisations, gestion des capteurs d’empruntes
digitales, Android Pay…

Mode multifenêtre, amélioration de la gestion de l’énergie.


7.0 Nougat 3.18-4.4 22 août 2016

La dernière version d’Android voit Instantdisparaitre laPicture,


Apps, Picture in tradition des
contrôle de noms
la limite de
des code à base
applications de de
en tâche
8.0-8.1 dessert. Elle4.4-4.9
Oreo se veut une
2017rupture, mais au vu des faibles améliorationsfond… visibles proposées,
elle ne parvient toujours pas à convaincre les constructeurs. Sortie en Sept. 2019, elle est
toujours inutilisée en mars 2020 Amélioration
! de l’interface graphique (comportements) et de la gestion de l’énergie,
9.0 Pie 5.0 Dec. 2018 triangulation WiFi indoor, IA…

Sous titrage automatique, Amélioration de l’IA, Filtrage audio amélioré,


Remplacement de boutons de navigation du système par des gestuelles, Amélioration
1.0 Android 10 5.03 Sept. 2019 des réglages de sécurité et de gestion de la vie privée. Amélioration de la gestion des
notifications.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
28

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé

IHM : Material Design, Machine d’exécution ART, support du 64 bits, Projet Volta,
3/11/2014 Économiseur de batterie, OpenGL ES 3.1, Android Extension Pack, Heads-Up
5.0 Lollipop
notification.
3.4-3.10
21 avril Support multi SIM, Version haute définition (audio) de la téléphonie
5.1.1 Lollipop
2015
Amélioration de l’autonomie, Google on Tap, Personalisation System UI Tuner,
6.0 Marshmallow 3.10-3.18 5 oct. 2015 Nouveau système de gestion des autorisations, gestion des capteurs d’empruntes
digitales, Android Pay…

Mode multifenêtre, amélioration de la gestion de l’énergie.


7.0 Nougat 3.18-4.4 22 août 2016

Instant Apps, Picture in Picture, contrôle de la limite des applications en tâche de


8.0-8.1 Oreo 4.4-4.9 2017 fond…

Amélioration de l’interface graphique (comportements) et de la gestion de l’énergie,


9.0 Pie 5.0 Dec. 2018 triangulation WiFi indoor, IA…

Sous titrage automatique, Amélioration de l’IA, Filtrage audio amélioré,


Remplacement de boutons de navigation du système par des gestuelles, Amélioration
1.0 Android 10 5.03 Sept. 2019 des réglages de sécurité et de gestion de la vie privée. Amélioration de la gestion des
notifications.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les versions
29

Version du
Version Nom de code Noyau Date de sorti Détails
Linux utilisé

IHM : capture des vidéos écran, support MPEG-H/HEIF. Support écran pliables,
nouvelles fonctionnalités des notifications ; OS : évolution du système de droits et
d’autorisations. Raffinement des droits d’accès au FileSystem; ; API : Intégration de
11.0.x Red Velvet Cake Linux 5.x 08/11/2020
TensorFlow et API MachineLearning.

IHM: Refonte du Material Design, amélioration capture d’écran (défilement),


modification des notifications, génération dynamique de styles, amélioration de
12.0.x Snow cone Linux 5.x 04/10/2021 l’accessibilité, amélioration du partage inter application, meilleure gestion du droit
d’accès aux matériels (caméra, micro…)…

Amélioration confidentialité, Système de gestion multiufilisateur amélioré


Nouveau codec Bluetooth LE. Une retour ? Une barre de recherche unifiée.
13.0.x Tiramisu Linux 5.x 15/08/2022

Fonctionnalité de navigation arrière prédictive, appels d'urgence par satellite, blocage


des applications obsolètes, amélioration du contrôle du volume et des notifications,
support NTFS.
14.0.x Upside Down Cake 5.15 04/10/2023

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Quel API choisir ?


30

14.x Android 14 Oct. 2023 34 -%


13.x Android 13 Août 2022 33 22,4 %
12.x Android 12 Oct. 2021 31 15,8 %
11.x Android 11 Sept. 2020 30 21.5 %
10.x Android 10 Sept. 2019 29 16.1 %
9.x Pie Dec. 2018 28 11,5 %
8.x Oreo Août 2017 26-27 7.3 %
7.x Nougat Août 2016 24-25 2,6 %

7 6514 14
8
Situation reconstituée 9
13 13
12
11
à partir des chiffres de 10
9

Android Studio 10
12 8
7
6
5
11 <5

http://developer.android.com/about/dashboards/index.html
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un mot sur les terminaux


31

De très nombreux constructeurs (> 30) proposant de très


nombreux modèles différents (> 1000).
Aspect-ratio différents très nombreux. Résolution
différentes très nombreuses, malgré des tentatives de
standardisation.
Performances très variables d’un terminal à un autre
Ressources hardware (capteurs, mémoire…) très
différentes.
➡ Android propose des solutions techniques pour
adresser l’essentiel de ces problèmes.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un mot sur les terminaux


Contrairement au monde Apple, où seul constructeur, la firme contrôle l’OS 31
et le matériel ; le monde Android est radicalement différent puisque les bases
De très nombreux constructeurs (> 30) proposant de très
communes de l’OS sont posées par un organisme « indépendant » : l’OHA
auquel n’importe quel constructeur peut adhérer. Et chaque constructeur
nombreux modèles différents (> 1000).
possède alors une grosse latitude pour personnaliser le système et proposer
un matériel différentiant sur le marché.

Aspect-ratio différents très nombreux. Résolution


différentes très nombreuses, malgré des tentatives de
standardisation.
Performances très variables d’un terminal à un autre
Ressources hardware (capteurs, mémoire…) très
différentes.
➡ Android propose des solutions techniques pour
adresser l’essentiel de ces problèmes.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un mot sur les terminaux


31

De très nombreux constructeurs (> 30) proposant de très


nombreux modèles différents (> 1000).
Mais cela conduit à une très grosse fragmentation du marché potentiel pour
Aspect-ratio différents très nombreux. Résolution
les développeurs d’applications comme nous l’avons vu dans le cas de JME.

différentes très nombreuses, malgré des tentatives de


standardisation.
Performances très variables d’un terminal à un autre
Ressources hardware (capteurs, mémoire…) très
différentes.
➡ Android propose des solutions techniques pour
adresser l’essentiel de ces problèmes.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un mot sur les terminaux


31

De très nombreux constructeurs (> 30) proposant de très


Le nombre d’aspect-ratio et les performances matérielles deviennent très complexes
nombreux
à gérer, ajoutant modèles différents
un coût caché prouvant-être (> aux
important 1000).
développeurs.

Aspect-ratio différents très nombreux. Résolution


différentes très nombreuses, malgré des tentatives de
standardisation.
Performances très variables d’un terminal à un autre
Ressources hardware (capteurs, mémoire…) très
différentes.
➡ Android propose des solutions techniques pour
adresser l’essentiel de ces problèmes.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un mot sur les terminaux


31

De très nombreux constructeurs (> 30) proposant de très


nombreux modèles différents (> 1000).
Aspect-ratio différents très nombreux. Résolution
différentes très nombreuses, malgré des tentatives de
standardisation.
Performances très variables d’un terminal à un autre
Fort heureusement, Android ayant tiré des leçons de l’expérience JME, le système
Ressources hardware (capteurs, mémoire…) très
propose un certain nombre de technologies, permettant d’adapter au plus juste les
développements en fonction des contraintes matérielles, rendant plus acceptables les
différentes. coûts d’adaptation des logiciels, très loin de ce qui se passait sous JME.

➡ Android propose des solutions techniques pour


adresser l’essentiel de ces problèmes.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Un mot sur les terminaux


31

De très nombreux constructeurs (> 30) proposant de très


nombreux modèles différents (> 1000).
Aspect-ratio différents très nombreux. Résolution
différentes très nombreuses, malgré des tentatives de
standardisation.
Performances très variables d’un terminal à un autre
Ressources hardware (capteurs, mémoire…) très
différentes.
➡ Android propose des solutions techniques pour
adresser l’essentiel de ces problèmes.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32
Dans un premier temps nous allons nous attarder sur la façon
dont sont structurés les services du système Android. Nous en
déduirons comment les programmes Android sont exécutés.

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32

Contrairement à une idée très souvent répandue, Android n’est pas un système Linux (au
sens GNU-Linux). Android s’appuie sur le noyau du système d’exploitation Linux mais dans
une version modifiée spécifiquement et en utilisant certains de ses services systèmes de
façon détournée. Cette spécificité rend souvent complexe les mises à jour du noyau vis à vis
de la branche principale de développement du noyau Linux. En particulier, Android ajoute
une couche d’abstraction du matériel à prendre en compte dans le développement des
drivers et un mécanisme de communication inter-processus particuliers : les Binders. Ce
mécanismeNoyau modifié écrit
IPC (Inter-Process essentiellement
Communication) endeCBeOS
est issu et enunassembleur :
système d’exploitation
très moderne du ajout
milieud’une couche
des années d’abstraction
90 qui a profondément des périphériques
transformé la façon de construire
un système d’exploitation
ajout d’undemécanisme
nos jours. End’IPC
particulier, les Binders
spécifique : lesproposent
Bindersde donner une
structuration inspirée par la programmation objet aux échanges entre processus. Ce nouveau
service joue un rôle central dans l’architecture Android.

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32
Une remarque importante peut-être faite ici concernant la faible réactivité des constructeurs
vis à vis des montées en version du système Android.
Pour un constructeur de téléphone, Android est une opportunité intéressante car il permet à
moindre frais (OpenSource oblige) d’accéder à un OS moderne, très complet et
personnalisable pour ses appareils. Il n’a donc pas besoin de payer une équipe de
développeurs pour cette tâche. Le coût de développement est donc reporté sur le matériel
(drivers) et quelques équipes en charge de la couche de personnalisation (permettant de se
distinguer de la concurrence). Par contre, toujours pour ce même constructeur, Android est
un milieu extrêmement concurrentiel ou des dizaines de constructeurs s’affrontent. Dès lors,
la vitesse de mise sur le marché de nouveaux produits devient la règle d’or pour des produits
qui seront vendus durant quelques mois seulement. Pour un constructeur, de téléphone
Android, lorsqu’un téléphone n’est plus vendu, il devient seulement une source de coûts et
ne présente donc plus aucun intérêt.
Noyau modifié écrit essentiellement en C et en assembleur :
ajout d’une couche d’abstraction des périphériques
ajout d’un mécanisme d’IPC spécifique : les Binders

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32
Or, pour chaque version majeure d’Android, il y a souvent une version différente du noyau
Linux à utiliser (2.6.29, 2.6.30, 2.6.31, 3xxx…). Mettre à jour le noyau permet, entre autre,
de disposer des derniers correctifs de sécurité pour cette partie essentielle du système
d’exploitation. Ceci implique pour le constructeur de devoir re-développer des drivers
adaptés (noyau monolithique oblige) pour ce nouveau noyau et en particulier l’interface
logicielle permettant les échanges entre le monde Android et l’OS gérant la partie radio du
téléphone (le RIL ou Radio Interface Layer). Or, cette partie est la plus complexe à réaliser
et nécessite une grosse expertise (des développeurs noyau payés très cher). On comprend
alors pourquoi les constructeurs rechignent à investir à perte dans un téléphone qui ne leur
rapporte plus rien.
Or, si du point de vue des constructeurs un téléphone n’a une « durée de vie » que de
quelques mois. Il n’en va pas de même pour les utilisateurs qui conservent leur appareil bien
plus longtemps. Cela explique la fragmentation importante de l’univers Android.

Noyau modifié écrit essentiellement en C et en assembleur :


ajout d’une couche d’abstraction des périphériques
ajout d’un mécanisme d’IPC spécifique : les Binders

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32

C’est surtout la couche du noyau Linux modifié qui est le plus responsable de ce
phénomène. Les développements spécifiques pour Android sur le noyau Linux nécessitent
des réadaptations et il n’est souvent pas possible de réutiliser tels quels les anciens
développements. De plus, bien qu’OpenSource le noyau Linux tolère l’insertion de drivers
(logiciels pilotant les périphériques) non OpenSource. Sachant que dans l’industrie mobile
les drivers sont souvent propriétaires cela complique beaucoup le travail des développeurs
et la communauté OpenSource ne peut pas y faire grand chose. On peut parfois créer des
couches d’adaptation des anciens drivers avec la nouvelle version de Linux, mais cela
résulte souvent dans des systèmes plus ou moins instables (cf. toutes les ROMs alternatives
pour téléphone que l’ont peut trouver dans les différentes communautés d’utilisateurs).

Noyau modifié écrit essentiellement en C et en assembleur :


ajout d’une couche d’abstraction des périphériques
ajout d’un mécanisme d’IPC spécifique : les Binders

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32

Au dessus, du noyau on trouve un ensemble de


services implantés comme des bibliothèques
système. Un certain nombre sont issues du
monde GNU-Linux mais d’autres sont
Ensemble de bibliothèques de programmes écrites en C/C++,
spécifiquement offrant les
développées pour Android. C’est
principaux services du système d’exploitation, encesparticulier
librairies sontdesoit
le cas desbionic qui joue le
libraire
rôle de GNU/Linux
adaptations (parfois conséquentes) issus du système la libc dans unsoit
système
des UNIX. La libc
est une bibliothèque de programmation
créations spécifiques (bionic…)
fondamentale dans un système UNIX car c’est
elle qui réalise les appels système du noyau. On
pourrait s’attendre à ce que la libc de GNU-
Linux soit directement implantée ici, mais il
n’en est rien. Bionic se charge de ce rôle et
prenant en compte les appels systèmes
supplémentaires liés aux ajouts spécifique
d’Android dans le noyau. Mais elle prend aussi
en charge l’utilisation altérée de certains appels
système et optimise la gestion de l’énergie (un
appel système noyau est souvent une opération
coûteuse pour la batterie).

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32
On retrouve également quelques frameworks importants tels que le WebKit
qui permet de gérer les contenus Web côté client (c’est ici le même
framework de base que sous iOS). On trouve également les implantations
d’OpenGL/ES et de SQLite…

Ensemble de bibliothèques de programmes écrites en C/C++, offrant les


principaux services du système d’exploitation, ces librairies sont soit des
adaptations (parfois conséquentes) issus du système GNU/Linux soit des
créations spécifiques (bionic…)

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32
Vient ensuite la définition de l’environnement d’exécution des
programmes Android proprement dit (l’Android Runtime). Cet
environnement d’exécution repose sur les services du noyau
Linux et utilise les bibliothèques système partagées que nous
venons rapidement d’évoquer. Android propose d’utiliser
principalement le langage Java comme langage de
Le Runtime Android écrit en C/C++ et Java, apporte le support Java (non
programmation (bien que Kotlin soit amené à le remplacer, ceci
reste vrai) et pourofficiel) à travers la Dalvik
ce faire l’environnement VM etpropose
d’exécution les librairies implantant les APIs
l’utilisation d’une machine virtuelle capableAndroid (Core
d’exécuter le Libraries)
bytcode java (ceci n’est plus tout à fait exact de nos jours avec la
disparition de la DVM). Mais pour des raisons de compacité et
de performances, les ingénieurs d’Android ont développé leur
propre format d’exécutable (différent du standard .class de Java)
le .dex (ce format reste lui toujours utilisé) et de fait une
machine d’exécution spécifique appelée la Dalvik VM qui
exécutera le code. Comme dans le cas de Java standard on va
retrouver un ensemble de classes (identique d’ailleurs à celle de
Java standard) implantant de très nombreux aspects du langage
Java : les Core Libraries. Cet environnement d’exécution
complet va donc nous permettre d’exécuter du code Android :
non seulement les applications mais aussi les principaux services
du système Android…

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32

Depuis la version 5 d’Android (la version 4.4 permettait à titre


expérimental
Le Runtime de l’utiliser).
Android L’environnement
écrit en C/C++ d’exécution
et Java, apporte le support Java (non
d’Android a été refondu
officiel) dans une
à travers nouvelleVM
la Dalvik technologie appelée implantant les APIs
et les librairies
simplement ART (Android RunTime). En effet, depuis ses débuts
Android souffrait de la comparaison Android
en terme(Core Libraries)
de performances
de son moteur d’exécution vis à vis de la concurrence et en
particulier d’iOS. Si, pendant un temps l’utilisation même de
Java a été remise en cause par la mise en avant du NDK (Native
Development Kit permettant de développer directement en C).
C’est finalement la machine virtuelle Dalvik qui a fait les frais ART
de cette remise en cause. Désormais, le code exécutable de la
Dalvik est compilé en code exécutable natif Linux (ELF) à
l’installation de l’application offrant ainsi de meilleures
performances sans pour autant transformer le travail des
développeurs Android ou des utilisateurs. Nous reviendrons sur
la mise en place de l’ART.

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32

Les composants applicatifs implantant les services de haut niveau, écrits


en Java (parfois aussi en utilisant le NDK)

Grâce à l’environnement d’exécution Android, le système Android va proposer un certain


nombre de services de haut niveau qui s’exécutent comme des programmes Android. Il
s’agit donc de programmes qui rendent des services systèmes pour d’autres programmes ou
pour les applications Android. Par exemple un service de gestions de l’ensemble des
composants Android installés sur le terminal est implanté de la sorte : c’est le service
PackageManager d’Android. Le WindowManager gèrera l’affichage à l’écran, ARTle
TelephonyManager gérera l’interface avec le réseau téléphonique…

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32
Android fourni également en standard, un ensemble d’applications «clé en main» :
lanceur d’applications, navigateur Web, gestion Téléphone…

Enfin, au dessus de tout cela se trouvent les applications Android. Un certain nombre
d’applications standard ayant un rôle très précis (Gestionnaire de contacts, navigateur Web,
gestionnaire de SMS/MMS Application Home — écran d’accueil du téléphone —…). Ces
applications sont développées comme n’importe quelle application Android et donc il est
possible de leur substituer des alternatives très facilement. C’est là une des grandes forces
du système Android et de son formidable caractère personnalisable.

ART

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure du système Android


32

ART

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
Maintenant que nous avons vu comment l’environnement d’exécution est implanté, nous
allons regarder comment se mettent en place les services et les applications Android, lorsque
le système s’initialise. Du fait de sa filiation avec le système Linux, nous ne serons pas
surpris de remarquer que le système Android s’initialise selon un schéma proche d’un
système UNIX (services systèmes exécutés dans des processus démons… cf. cours
d’architecture système).

Portions of this page are modifications based on work created and shared by the Android Open Source
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !"#$%&!
!

Le premier processus démarré par le système UNIX est le processus init


(PID: 1) il dure toute la durée de la session système (jusqu’à l’arrêt du
système). C’est lui qui lance tous les autres processus directement ou non

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !"#$%&!
!

Le processus init lance les différents services du système, sous la forme


de processus appelés daemons qui s’exécutent en parallèle.

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !"#$%&!
!

Un démon particulier au système Android est le processus Zigote. Ce


processus est très important, car c’est lui qui va créer et rendre disponible
les processus permettant d’exécuter du code Android dans tout le
système. Zigote sert donc a créer des processus d’applications Android.

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !"#$%&!
!
La machine Dalvik est démarrée dans le processus Zigote et
complètement initialisée avec la mise en place de tous les composants
systèmes et le chargement des APIs de sorte qu’elle soit prête à l’emploi.

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !"#$%&!
!

Le système démarre également un processus responsable de


l’initialisation de tous les services système d’Android

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !"#$%&!
!

Le gestionnaire de service Android est alors chargé

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Finalement, tous les services sont initialisés et liés à leur
correspondant dans la Dalvik VM
!"#$%&!
!

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Finalement, tous les services sont initialisés et liés à leur
correspondant dans la Dalvik VM
!"#$%&!
!
Depuis la version 5 d’Android (la fonction était disponible en
option dans Android 4.4), la Dalvik VM à cédé sa place à un
nouvel environnement d’exécution : l’Android RunTime. Ce
mécanisme, se substitue exactement à la machine virtuelle
Dalvik, offrant les mêmes services mais exécutant dans un
environnement virtualisé du code natif au format ELF (format
des exécutables Linux standard). Le code .dex de la Dalvik est
compilé à l’installation de l’application sur le terminal par le
compilateur embarqué dex2aot.

ART

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Finalement, tous les services sont initialisés et liés à leur
correspondant dans la Dalvik VM
!"#$%&!
! Grâce à ce système complexe d’initialisation, chaque fois qu’une application Android à
besoin de s’exécuter, une nouvelle instance de l’environnement d’exécution Android est crée
par un service démon particulier : le processus Zygote. Ainsi, chaque application (ou service
démon) Android s’exécute dans son propre environnement et dans son propre processus
UNIX, isolé des autres. Le mécanisme des Binders permet alors aux processus de
communiquer efficacement entre eux de manière structurée et isolée. Chaque processus
UNIX, permet donc d’isoler les processus en cours d’exécution les uns par rapports aux
autres.

ART

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Mise en place du système


33
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Finalement, tous les services sont initialisés et liés à leur
correspondant dans la Dalvik VM
!"#$%&!
!

ART

Figure 9 : Fonctionnement des processus system d’Android [5]


Portions of this page are modifications based on work created and shared by the Android Open Source
Une fois tous les services chargés, le système est prêt. Des applications utilisateur
Project and used according to terms described in the Creative Commons 2.5 Attribution License.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Developper pour Android ?


34

On développe sur un PC du code s’exécutant sur le


téléphone ➜ Cross Compilation
Java à la rescousse : compilation pour une architecture
virtuelle : la JVM (Java Virtual Machine).
Optimisation pour l’embarqué ➜ une autre architecture
virtuelle la Dalvik VM.
Performance un peu limitée au regard du concurrent
Apple ➜ nouvelle technologie : ART.
préserve l’investissement des développeurs dans Java
préserve les APIs et leur mise en œuvre

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Developper pour Android ?


34

On développe sur un PC du code s’exécutant sur le


téléphone ➜ Cross Compilation
Java à la question
La première rescousse
à laquelle :estcompilation pour
confronté le développeur une architecture
pour plate-forme mobile
est : Comment produire du code exécutable sur le téléphone ?
virtuelle
L’architecture:du
laPCJVM
sur lequel(Java Virtual
on développe Machine).
est généralement très différente de
l’architecture d’un téléphone mobile :
- processeur et jeu d’instructions différent (cf cours d’architecture des machines)
Optimisation pour l’embarqué ➜ une autre architecture
- ABI (Application Binary Interfaces) différentes : les conventions d’appels (appels
virtuelle la Dalvik VM.
systèmes façon de peupler la pile et/ou les registres du processeur, mode
d’interruptions, etc.) sont différentes et les appels systèmes aussi (Linux, Windows,
Mac…)
Performance un peu limitée au regard du concurrent
API (Application Programming Interfaces) différentes, tant dans la structure des API,
(notion de modules, de classes…) que dans les procédures elles-mêmes, noms des
Apple ➜ nouvelle technologie : ART.
fonctions/méthodes/procédures, etc.
De ce fait, le développeur ne peut pas utiliser ses outils standard de programmation
sur PC pour programmer sur son téléphone. Il faut recourir à des outils dits de
préserve l’investissement des développeurs dans Java
CrossCompilation (compilation croisée) qui produiront du code exécutable non pas
préserve les APIs et leur mise en œuvre
pour le PC de développement mais pour un téléphone.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Developper pour Android ?


34

On développe sur un PC du code s’exécutant sur le


téléphone ➜ Cross Compilation
Java à lale rescousse
Par contre, : compilation
code généré pour un pour une
téléphone ne sera pas exécutable architecture
donc ne sera pas
testable sur le PC de développement. C’est là qu’intervient la notion d’émulateur.
virtuelle
Un émulateur:est launJVM (Java
programme Virtual
qui simule Machine).
le fonctionnement de l’architecture
matérielle d’un téléphone. Le simulateur va lui être capable d’interpréter le code
Optimisation pour l’embarqué ➜ une autre architecture
exécutable du téléphone (comme le ferait un vrai téléphone) et reproduira donc le
comportement du code exécutable de l’application.
virtuelle la Dalvik VM.
Le simulateur va simuler l’ensemble de l’architecture matérielle et exécuter dans cette
machine virtuelle un système Android complet de téléphone qui sera capable
d’exécuter une application pour téléphone. Ce processus est lourd même sur un PC
Performance un peu limitée au regard du concurrent
puissant et tend à ralentir la mise au point des applications. On lui préfèrera
généralement un téléphone réel connecté au PC de développement, sur lequel on
Apple ➜ nouvelle technologie : ART.
téléchargera l’application en cours de développement pour la tester.

préserve l’investissement des développeurs dans Java


préserve les APIs et leur mise en œuvre

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Developper pour Android ?


34

On développe sur un PC du code s’exécutant sur le


téléphone ➜ Cross Compilation
Java à la rescousse : compilation pour une architecture
virtuelle : la JVM (Java Virtual Machine).
Optimisation pour l’embarqué ➜ une autre architecture
Créer des outils efficaces de cross compilation est un travail extrêmement lourd, c’est
pourquoi les ingénieurs d’Android ont préféré se tourner vers une technologie qui
virtuelle la Dalvik
gère cette problématique depuisVM.
qu’elle existe : la technologie Java.
En effet, un compilateur Java ne produit pas de code exécutable pour un processeur
réel (comme le ferait un compilateur C). Mais il produit un code pour un processeur
Performance un peu limitée au regard du concurrent
virtuel : la JVM. Cette technique est développée depuis des années et est devenue très
robuste ; inutile donc de réinventer la roue. Les outils de cross compilation d’Android
Apple ➜ nouvelle technologie : ART.
vont donc partir sur cette base. On écrit du code Java que l’on compile pour la JVM.

préserve l’investissement des développeurs dans Java


préserve les APIs et leur mise en œuvre

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Developper pour Android ?


34

On développe sur un PC du code s’exécutant sur le


téléphone ➜ Cross Compilation
Java à la rescousse : compilation pour une architecture
virtuelle : la JVM (Java Virtual Machine).
Optimisation pour l’embarqué ➜ une autre architecture
virtuelle la Dalvik VM.
Performance un peu limitée au regard du concurrent
Oui mais voilà, l’expérience J2ME au début des années 2000 à montré quelques
limites en terme de performance et de consommation mémoire, que les ingénieurs
Apple ➜ nouvelle
Android veulent éviter. Il proposetechnologie : ART.
donc un nouveau processeur virtuel : la Dalvik VM
avec un bytcode (code binaire exécutable par la machine virtuelle) différent le
code .dex qui se veut plus compact et plus efficace à exécuter que celui de la JVM
préserve l’investissement des développeurs dans Java
classique.
Mais, plutôt que de concevoir un nouveau compilateur du langage Java vers le code
préserve les APIs et leur mise en œuvre
dex. Les ingénieurs Android se contente d’un traducteur du bytecode de la JVM (le
format .class) vers le celui de la DVM (le format .dex).

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Developper pour Android ?


34

On développe sur un PC du code s’exécutant sur le


Malgré les efforts des équipes dans l’optimisation du code exécutable de la DVM, les ingénieurs sont
conscients que cela reste moins performant que la solution plus pragmatique popularisée par le concurrent
téléphone ➜ Cross Compilation
Apple, qui consiste à utiliser le langage C (une variante en fait qu’est le langage Objective-C) pour
produire des exécutables directement gérés par le processeur du téléphone (on parle de code natif). Pendant
quelques années, plusieurs pistes ont été explorées pour lever les verrous sur les performances :
Java à la rescousse : compilation pour une architecture
que ce soit avec le NDK (Native Development Kit) qui proposait de se débarrasser presque complètement
virtuelle : la JVM (Java Virtual Machine).
de Java en proposant n’importe quel autre langage (et en particulier le langage C) pour produire du code
natif directement ; la proposition d’une chaîne de développement complète avec un tout autre langage, etc.
Finalement avec la version 4.4, une direction encourageante est trouvée avec l’apparition de l’ART : un
Optimisation pour l’embarqué ➜ une autre architecture
environnement de compilation native à l’installation de l’application sur le terminal, qui signe la
disparition de la Dalvik VM mais préserve l’utilisation du langage Java. De nos jours, l’arrivée de Kotlin
virtuelle la Dalvik VM.
ne remet pas en cause cette mécanique, puisque Kotlin produit du code exécutable Java.

Performance un peu limitée au regard du concurrent


Apple ➜ nouvelle technologie : ART.
préserve l’investissement des développeurs dans Java
préserve les APIs et leur mise en œuvre

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Developper pour Android ?


34

On développe sur un PC du code s’exécutant sur le


téléphone ➜ Cross Compilation
Java à la rescousse : compilation pour une architecture
virtuelle : la JVM (Java Virtual Machine).
Le principal intérêt de cette dernière solution est qu’elle préserve la compatibilité avec l’existant. Les
Optimisation pour l’embarqué ➜ une autre architecture
développeurs Android conservent tout leur investissement sur la plate-forme et peuvent envisager
d’évoluer vers Kotlin à leur rythme. Java étant toujours un des langages les plus enseignés cela reste un
virtuelle la Dalvik VM.
point important pour cette plate-forme.

Performance un peu limitée au regard du concurrent


Apple ➜ nouvelle technologie : ART.
préserve l’investissement des développeurs dans Java
préserve les APIs et leur mise en œuvre

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Developper pour Android ?


34

On développe sur un PC du code s’exécutant sur le


téléphone ➜ Cross Compilation
Java à la rescousse : compilation pour une architecture
virtuelle : la JVM (Java Virtual Machine).
Optimisation pour l’embarqué ➜ une autre architecture
virtuelle la Dalvik VM.
Performance un peu limitée au regard du concurrent
Apple ➜ nouvelle technologie : ART.
préserve l’investissement des développeurs dans Java
préserve les APIs et leur mise en œuvre

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code
Les fichiers .class font place à un
fichier .dex
architecture à registres par
opposition à l’architecture à pile
de la JVM
Une VM par processus et donc
par application
Les VMs sont clonées et non
crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
Voici donc l’ancienne chaîne de compilation pour la Davlik VM. 35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code
Les fichiers .class font place à un
fichier .dex
architecture à registres par
opposition à l’architecture à pile
de la JVM
Une VM par processus et donc
par application
Les VMs sont clonées et non
crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code
Nous avons vu que l’expérience J2ME avait permis de
Les fichiers .class font place à un
démontrer que le langage Java était bien adapté à la
programmation d’applications mobiles. Et ce d’autant plus
fichier .dex
qu’un très grand nombre de développeurs connaissent ce
langage très enseigné, contrairement par exemple à un
architecture à registres par
langage comme Objective-C.

opposition à l’architecture à pile


de la JVM
Une VM par processus et donc
par application
Les VMs sont clonées et non
crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code Java code source
Compilateur
Java

Les fichiers .class font place à un


fichier .dex
architecture à registres par
opposition à l’architecture à pile
de la JVM
Une VM par processus et donc
par application
Les VMs sont clonées et non
crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code Java code source
Compilateur
Java

Les fichiers .class font place à un


fichier .dex byte-code Java
Android va donc reprendre à son compte ces résultats et
architecture à registres par
proposer à ses développeurs de développer dans le langage
Java, bien connu et disposant d’énormément de ressources.
opposition à l’architecture à pile
Mais au lieu de proposer une version amoindrie de Java et de
de la JVM
ses API de bases comme dans J2ME, Android propose de
réutiliser tout le Java standard (où presque). Dès lors, c’est
une JVM qu’il faudrait embarquer.
Une VM par processus et donc
par application
Les VMs sont clonées et non
crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code Java code source
Compilateur
Java

Les fichiers .class font place à un


fichier .dex byte-code
Compilateur
Java
dex
architecture à registres par
opposition à l’architecture à pile
de la JVM
Une VM par processus et donc
par application
Les VMs sont clonées et non
crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code Java code source
Compilateur
Java

Les fichiers .class font place à un


fichier .dex byte-code
Compilateur
Java
dex
architecture à registres par
opposition à l’architecture à pile byte-code Dalvik
de la JVM
Or il est reconnu que cette machine virtuelle complète est
Une VM par processus et donc
assez inefficace dans l’embarqué. Les ingénieurs Android
vont donc développer leur propre machine virtuelle : la
par application
Dalvik VM, gérant son propre bytecode exécutable le .dex.
Une machine plus performante, plus compacte et utilisant un
bytecode plus compact que le .class de java.
Les VMs sont clonées et non
crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code Java code source
Compilateur
Java

Les fichiers .class font place à un


fichier .dex byte-code
Compilateur
Java
dex
architecture à registres par
opposition à l’architecture à pile byte-code Dalvik
de la JVM
Une VM par processus et donc
par application
Les VMs sont clonées et non
crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code Java code source
Compilateur
Java

Les fichiers .class font place à un


fichier .dex byte-code
Compilateur
Java
dex
architecture à registres par
Sur le terminal, moyennant un processus efficace de
lancement de la machine virtuelle Dalvik (zygote), le code
opposition à l’architecture à pile
exécutable Android sera donc le .dex, obtenu par traduction byte-code Dalvik
des fichiers .class traditionnels de java produits par le
de la JVM
compilateur java classique : javac. Le code exécutable .dex
est lié dans un unique fichier (classes.dex) contrairement à
Une VM par processus et donc
la myriade de fichiers .class du java standard (c’est un
élément supplémentaire en faveur de la compacité du code
par application
Dalvik comparé au bytecode java standard).

Les VMs sont clonées et non Dalvik VM


crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Dalvik VM
35

Il ne s’agit pas d’une JVM, elle


exécute son propre byte-code Java code source
Compilateur
Java

Les fichiers .class font place à un


fichier .dex byte-code
Compilateur
Java
dex
architecture à registres par
opposition à l’architecture à pile byte-code Dalvik
de la JVM
Une VM par processus et donc
par application
Les VMs sont clonées et non Dalvik VM
crées (processus zygote)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

ART
36

Le processus de compilation est


inchangé
Le bytecode Dalvik est chargé
sur le terminal et compilé à
l’installation «AOT»
Exécution du code natif ELF
dans un nouvel environnement
d’exécution (nouveau GC,
gestion des traces et des
exceptions…)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

ART
Cependant, depuis quelques années les ingénieurs Android sont 36
bien obligés de reconnaitre que cette solution reste lente vis à vis de
Le processus de compilation est
leur concurrent direct Apple dont l’objective-C produit du code
exécutable natif. Différentes solutions ont été envisagées allant
inchangé jusqu’à l’abandon pur et simple de Java mais pas forcément de sa
VM, ou le passage au Native Development Kit qui n’a pourtant
jamais eu un énorme succès.
Le bytecode Dalvik est chargé
Cependant depuis la version 4.4 d’Android les ingénieurs ont
avancé sur une nouvelle technologie : l’ART (Android RunTime).
sur le terminal et compilé àOptionnel sous Android KitKat, il devient le moteur d’exécution par
l’installation «AOT» défaut avec Lollipop.

Exécution du code natif ELF


dans un nouvel environnement
d’exécution (nouveau GC,
gestion des traces et des
exceptions…)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

ART
36

Le processus de compilation est


inchangé Java code source

Le bytecode Dalvik est chargé


sur le terminal et compilé à
l’installation «AOT»
Exécution du code natif ELF
dans un nouvel environnement
d’exécution (nouveau GC,
gestion des traces et des
exceptions…)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

ART
36

Le processus de compilation est


inchangé Java code source
Compilateur
Le bytecode Dalvik est chargé
Bonne nouvelle pour les développeurs Android : le processus de Java
compilation reste pratiquement inchangé et leur investissement sur
sur le terminal et compilé à
le langage Java et les API spécifiques d’Android est préservé. byte-code Java
l’installation «AOT» Compilateur
dex

Exécution du code natif ELF byte-code Dalvik


dans un nouvel environnement
d’exécution (nouveau GC,
gestion des traces et des
exceptions…)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

ART
36

Le processus de compilation est


inchangé Java code source
Compilateur
Le bytecode Dalvik est chargé Java

sur le terminal et compilé à byte-code Java


l’installation «AOT» Compilateur
dex

Exécution du code natif ELF byte-code Dalvik


dans
En fait, la grande un nouvel
différence vient deenvironnement
l’abandon de la VM Dalvik,
remplacée par une phase de compilation native du code
dex2oat

d’exécution
exécutable .dex au moment de (nouveau GC, sur le
l’installation de l’application
terminal.
gestion des traces et des code natif
exceptions…)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

ART
36

Le processus de compilation est


inchangé Java code source
Compilateur
Le bytecode Dalvik est chargé Java

sur le terminal et compilé à byte-code Java


l’installation «AOT» Compilateur
dex
Contrairement à la situation habituelle ou le code est interprété par
la VM ou compilé en natif à la volée par un compilateur JIT (Just In
Exécution du code natif ELF
Time), là, c’est directement du code exécutable natif qui sera byte-code Dalvik
désormais employé.
dans un nouvel environnement dex2oat

d’exécution (nouveau GC,


gestion des traces et des code natif
exceptions…)
ART
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

ART
36

Le processus de compilation est


inchangé Java code source
Compilateur
Le bytecode Dalvik est chargé Java

sur le terminal et compilé à byte-code Java


l’installation «AOT» Compilateur
dex

Exécution du code natif ELF byte-code Dalvik


dans un nouvel environnement dex2oat

d’exécution (nouveau GC,


gestion des traces et des code natif
exceptions…)
ART
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


37

Depuis la version 3 d’Android Studio, il devient


possible d’utiliser Kotlin comme langage alternatif à
Java.
Ne casse pas le processus de compilation Android…
Kotlin compile vers la JVM et est interopérable avec
Java
A l’instar de Swift sur iOS, Kotlin propose d’intégrer le
types options et le système de type évolue pour garantir
une analyse statique forte et de l’inférence de types.
OpenSource (Apache 2.0)
Géré par une organisation indépendante
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


37
Annoncé en mai 2017, le support de Kotlin comme langage de
Depuis la version 3 d’Android Studio, il devient
développement dans AndroidStudio a de quoi rassurer les
développeurs Android car il ne casse pas l’existant. À l’image de la
possible d’utiliser Kotlin comme langage alternatif à
transition de la DalvikVM vers l’ART, peu de développeurs seront
touchés par cette transition dans l’immédiat.
Java.
Ne casse pas le processus de compilation Android…
Kotlin compile vers la JVM et est interopérable avec
Java
A l’instar de Swift sur iOS, Kotlin propose d’intégrer le
types options et le système de type évolue pour garantir
une analyse statique forte et de l’inférence de types.
OpenSource (Apache 2.0)
Géré par une organisation indépendante
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


37

Depuis la version 3 d’Android Studio, il devient


possible d’utiliser Kotlin comme langage alternatif à
Java. Kotlin est un langage dont la syntaxe est incompatible avec celle de
Java. Son modèle de programmation même est assez différent (tout
n’est plus objet). Ce langage; plus moderne, va proposer un typage
Ne casse pas le processus de compilation Android…
statique fort à l’image des langages fonctionnels et va rendre
Kotlin compile vers la JVM et est interopérable avec
beaucoup plus concis et efficaces un grand nombre de programmes
écrits avant dans le langage Java. Le passage à Kotlin devrait aussi
Java permettre de faire sauter les derniers problèmes de performances
inhérent au langage Java.

A l’instar de Swift sur iOS, Kotlin propose d’intégrer le


types options et le système de type évolue pour garantir
une analyse statique forte et de l’inférence de types.
OpenSource (Apache 2.0)
Géré par une organisation indépendante
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


37

Depuis la version 3 d’Android Studio, il devient


possible d’utiliser Kotlin comme langage alternatif à
Java.
Ne casse pas le processus de compilation Android…
Kotlin compile vers la JVM et est interopérable avec
Java Un élément très important est que la pile de compilation du langage Kotlin
est entre autre capable de générer du code exécutable .class, c’est-à-dire
A l’instar de Swift sur iOS, Kotlin propose d’intégrer le
celui de la JVM. Le langage Kotlin va donc s’insérer de façon transparente
dans le processus de compilation Android en amont de la conversion vers
types options et le système de type évolue pour garantir
le format .dex. Mais l’interopérabilité de Kotlin et de Java va plus loin car
Kotlin se construit totalement sur les API core de Java ce qui signifie que
une analyse statique forte et de l’inférence de types.
Java et Kotlin pourront non seulement coexister dans le même
environnement d’exécution mais aussi communiquer entre eux dans la
même application : les programmes Kotlin pouvant manipuler directement
OpenSource (Apache 2.0) des objets Java définis par ailleurs. L’espace de nommage des classes Java
est d’ailleurs directement utilisable dans Kotlin (notion de package Java).
Géré par une organisation indépendante
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


37

Depuis la version
Comme 3
Swift, Kotlin d’Android Studio,
va reprendre un grand nombre de il devient
concepts
issus des langages fonctionnels comme Ocaml ou Haskell et va
possibleproposer
d’utiliser Kotlin
une analyse statique (àcomme langage
la compilation) de types plusalternatif à
robuste que celle de Java, en intégrant des mécanismes d’inférence
Java. de types (les types peuvent être découverts par le compilateur,
produisant du code générique automatiquement) et la gestion des
types options (alternatives concises et statiquement vérifiée aux
Ne casse pas le processus de compilation Android…
exceptions). Ces nombreux emprunts aux langages fonctionnels font
Kotlin compile vers la JVM et est interopérable avec
que Kotlin n’est plus comme Java un langage uniquement orienté
objets. C’est un langage où coexistent plusieurs paradigmes dont
Java « l’orienté objet » et le « fonctionnel ».

A l’instar de Swift sur iOS, Kotlin propose d’intégrer le


types options et le système de type évolue pour garantir
une analyse statique forte et de l’inférence de types.
OpenSource (Apache 2.0)
Géré par une organisation indépendante
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


37

Depuis la version 3 d’Android Studio, il devient


possible d’utiliser Kotlin comme langage alternatif à
Java.
Ne casse pas le processus de compilation Android…
Kotlin compile vers la JVM et est interopérable avec
Java
A l’instar de Swift sur iOS, Kotlin propose d’intégrer le
types options et le système de type évolue pour garantir
une analyse statique forte et de l’inférence de types.
OpenSource (Apache 2.0)
Géré par une organisation indépendante
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


38

Le modèle objet de Kotlin bien que compatible avec


celui de Java dispose de fonctionnalités nouvelles
comme les méthodes d’extension
Une forme de pattern matching (déstructuration) des
objets appliquées à certaines structures du langages
La compatibilité avec Java imposant la surcharge de
méthode. Kotlin étend cela à la surcharge d’opérateurs
et ajoute la gestion des notations infixes.
Les coroutines, les threads et une gestion particulière de
la concurrence du parallélisme.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


38

Le modèle objet de Kotlin bien que compatible avec


celui de Java dispose de fonctionnalités nouvelles
comme les méthodes d’extension
Les méthodes d’extension sont un moyen d’enrichir une API sans avoir à sous
Une forme de pattern matching (déstructuration) des
classer ou à modifier des classes surtout quand nos n’avons pas accès au sources
de ces classes. Par exemple :
objets appliquées à certaines structures du langages
>>> fun String.md_boldify(): String = "**"+this+"**"
>>> "Bonjour tout le monde !".md_boldify()
La compatibilité avec Java imposant la surcharge de
res1: kotlin.String = **Bonjour tout le monde !**

méthode. Kotlin
Dans cet étend
exemple, On ajoute àcela
la classeàString
la surcharge d’opérateurs
de Java une méthode
md_boldify(), qui ajoutera une annotation Markdown (un langage de balise
et ajoute la gestion
simplifié) pour mettre dudes
texte notations infixes.
entre caractères gars. L’extension est alors portée
par tous les objets String de cette application.
Les coroutines, les threads et une gestion particulière de
la concurrence du parallélisme.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


38

Le modèle objet de Kotlin bien que compatible avec


celui de Java dispose de fonctionnalités nouvelles
comme les méthodes d’extension
Une forme de pattern matching (déstructuration) des
objets appliquées à certaines structures du langages
Le pattern-matching (destructuration de types) permet une écriture plus concise et surtout une vérification
La compatibilité avec Java imposant la surcharge de
plus poussée des types et des comportements des structures de contrôle. Exemple:
méthode. Kotlin étend cela à la surcharge d’opérateurs
for ((key, value) in map) {
et ajoute la gestion des notations infixes.
// on peut utilise directement les variables key et value
// dans les corps de la construction
}

Les coroutines, les threads et une gestion particulière de


La notion de tuples (liste de variables) coïncidant avec une liste de valeur, rend l’écriture des programmes
la concurrence du parallélisme.
beaucoup plus concises sans avoir à placer des annotations de type partout dans le code. La vérification par
le compilateur sera grandement facilitée. Ici les variables key et value seront peuplée à chaque itération par
une valeur de de clé du tableau associatif (dictionnaire) et la valeur correspondante.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


Pour être compatible avec Java (qui supporte la surcharge de méthodes—c’est-à-dire la possibilité de
définir plusieurs méthodes avec le même nom mais se différenciant par la liste des types de paramètres—) 38
Kotlin va évidemment supporter cette fonctionnalité. Mais Kotlin supportera également des extensions
Le modèle objet de Kotlin bien que compatible avec
syntaxiques permettant de gérer la surcharge d’opérateurs. Comme par exemple :

celui
>>> operator de
fun Java dispose
String.unaryMinus()
... val tmp = this.toSet()
:de fonctionnalités
String { nouvelles
comme lessb.insert(0,ch)
méthodes} d’extension
... val sb = StringBuffer()
... for(ch in tmp){
... return sb.toString()
... }
Une forme de pattern matching (déstructuration) des
>>> -"hello"
res42: kotlin.String = oleh
objets appliquées à certaines structures du langages
On définit ici un opérateur préfixé - qui permet d’inverser les caractères d’une chaîne.

La compatibilité avec Java imposant la surcharge de


méthode. Kotlin étend cela à la surcharge d’opérateurs
et ajoute la gestion des notations infixes.
Les coroutines, les threads et une gestion particulière de
la concurrence du parallélisme.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


38

Le modèle objet de Kotlin bien que compatible avec


celui de Java dispose de fonctionnalités nouvelles
comme les méthodes d’extension
Une forme de pattern matching (déstructuration) des
objets appliquées à certaines structures du langages
La compatibilité avec Java imposant la surcharge de
méthode. Kotlin étend cela à la surcharge d’opérateurs
Kotlin propose également de nombreux outils de gestions de la concurrence et du
et ajoute lasurgestion
parallélisme lesquels nousdes notations
ne nous attarderons pasinfixes.
ici. Mais la notion de
coroutines dans Kotlin permet de répondre efficacement à un grand nombre de
situations complexes de façon concise et efficace.
Les coroutines, les threads et une gestion particulière de
la concurrence du parallélisme.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Deux mots sur Kotlin


38

Le modèle objet de Kotlin bien que compatible avec


celui de Java dispose de fonctionnalités nouvelles
comme les méthodes d’extension
Une forme de pattern matching (déstructuration) des
objets appliquées à certaines structures du langages
La compatibilité avec Java imposant la surcharge de
méthode. Kotlin étend cela à la surcharge d’opérateurs
et ajoute la gestion des notations infixes.
Les coroutines, les threads et une gestion particulière de
la concurrence du parallélisme.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
39

Une application Android se concrétise sous la forme


d’un fichier archive dont le nom possède
l’extension .apk. Cette archive contient :
un fichier décrivant le contenu de l’archive, la nature
de l’application et ses points d’entrée : le fichier
AndroidManifest.xml (en version binaire)
le code exécutable (binaire) contenu dans
l’unique fichier classes.dex. Le code exécutable
peut éventuellement être pré-lié pour améliorer
les performances : .odex
des fichiers de ressources contenant des données
manipulées par l’application : images, sons,
descriptions d’interface graphique, polices de
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
39
Nous avons vu qu’une application était un programme exécuté dans un processus UNIX
Une application Android se concrétise sous la forme
particulier implantant un environnement d’exécution Android. Nous allons maintenant nous
intéresser plus précisément à la structure d’un exécutable Android. Comment les fichiers
d’un fichier archive dont le nom possède
ressources de l’application sont installés sur le systèmes, etc.
l’extension .apk. Cette archive contient :
un fichier décrivant le contenu de l’archive, la nature
de l’application et ses points d’entrée : le fichier
AndroidManifest.xml (en version binaire)
le code exécutable (binaire) contenu dans
l’unique fichier classes.dex. Le code exécutable
peut éventuellement être pré-lié pour améliorer
les performances : .odex
des fichiers de ressources contenant des données
manipulées par l’application : images, sons,
descriptions d’interface graphique, polices de
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
39

Une application Android se concrétise sous la forme


d’un fichier archive dont le nom possède
l’extension .apk. Cette archive contient :
un fichier décrivant le contenu de l’archive, la nature
de l’application et ses points d’entrée : le fichier
AndroidManifest.xml (en version binaire)
le code exécutable (binaire) contenu dans
Le fichier AndroidManifest.xml est un fichier très important qui renseigne le terminal sur
l’unique
les composants installésfichier classes.dex
par une application. . Le
Vous constaterez codebeaucoup
que j’insiste exécutable
sur ce
fichier dont il faut bien comprendre le rôle. À l’installation d’une application sur le terminal
peut etéventuellement
(téléchargement êtreAndroid
installation de l’APK), le service pré-lié pour améliorer
PacakageManager va analyser
ce fichier et consigner tous les composants installés dans un registre global.
les performances : .odex
des fichiers de ressources contenant des données
manipulées par l’application : images, sons,
descriptions d’interface graphique, polices de
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
39

Une application Android se concrétise sous la forme


d’un fichier archive dont le nom possède
l’extension .apk. Cette archive contient :
un fichier décrivant le contenu de l’archive, la nature
de l’application et ses points d’entrée : le fichier
AndroidManifest.xml (en version binaire)
le code exécutable (binaire) contenu dans
l’unique fichier classes.dex. Le code exécutable
peut éventuellement être pré-lié pour améliorer
les performances : .odex
des fichiers de ressources contenant des données
manipulées par l’application : images, sons,
descriptions d’interface graphique, polices de
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
39

Une application Android se concrétise sous la forme


d’un fichier archive dont le nom possède
l’extension .apk. Cette archive contient :
un fichier décrivant le contenu de l’archive, la nature
de l’application et ses points d’entrée : le fichier
AndroidManifest.xml (en version binaire)
le code exécutable (binaire) contenu dans
l’unique fichier classes.dex. Le code exécutable
peut éventuellement être pré-lié pour améliorer
ELF
les performances : .odex
Ledes
fichierfichiers de
contenant le code ressources
exécutable contenant
de l’application est le fichierdes données
classes.dex. À
l’origine, le format .dex est le format exécutable de la Dalvik VM et est donc directement
manipulées
exécutable par
sur un terminal l’application
Android. De nos jours, il ne:s’agit
images, sons,
plus que d’un format
intermédiaire qui est compilé au moment de l’installation de l’application sur le terminal.
descriptions
Cependant les limitationsd’interface
de ce format définit graphique,
il y a plus de 10 ans polices
commence à se defaire
sentir (cf. problème des applications multidex…)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
39

Une application Android se concrétise sous la forme


d’un fichier archive dont le nom possède
l’extension .apk. Cette archive contient :
un fichier décrivant le contenu de l’archive, la nature
de l’application et ses points d’entrée : le fichier
AndroidManifest.xml (en version binaire)
le code exécutable (binaire) contenu dans
l’unique fichier classes.dex. Le code exécutable
peut éventuellement être pré-lié pour améliorer
ELF
les performances : .odex
des fichiers de ressources contenant des données
manipulées par l’application : images, sons,
descriptions d’interface graphique, polices de
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
40

Une application installée dans un terminal Android,


dispose d’un identifiant unique (user id), qui isolera
l’application des autres sauf si on accorde des
permissions explicitement : sandboxing utilisateur.
Une application s’exécute dans un processus UNIX
unique, lancé (si il n’existe pas déjà) dès qu’un des
points d’entré de l’application est sollicité.
Chaque application possède sa propre DalvikVM obtenu
grâce au processus Zigote.
Des exceptions peuvent-être consenties, quand plusieurs
applications possèdent le même certificat (même
signature => possibilité même uid ou/et même DVM)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
40

Une application installée dans un terminal Android,


dispose d’un identifiant unique (user id), qui isolera
l’application des autres sauf si on accorde des
permissions explicitement : sandboxing utilisateur.
UneIlapplication s’exécute
s’agit ici d’un mécanisme étonnant du dans un processus
système Android UNIX
qui détourne le service UNIX de
gestion multi-utilisateurs pour réaliser l’isolation des applications entre elles au sens des
unique, lancé
ressources (siviaillen’existe
accessibles pasdesdéjà)
système de gestion fichiers.dès qu’un
La notion desréalisait
de processus
l’isolation des applications entre elles en mémoire centrale (une application ne peut pas
points d’entré
accéder de l’application
à l’espace d’une est sollicité.
autre application en mémoire centrale).
« Une application = un utilisateur UNIX » permet de réaliser l’isolation des applications
Chaque application possède sa propre DalvikVM obtenu
entre elles en termes de ressources fichiers. En utilisant un mécanisme très fiable du système
utilisé depuis un grand nombre d’années pour les utilisateurs UNIX.
grâce au processus Zigote.
Des exceptions peuvent-être consenties, quand plusieurs
applications possèdent le même certificat (même
signature => possibilité même uid ou/et même DVM)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
40

Une application installée dans un terminal Android,


dispose d’un identifiant unique (user id), qui isolera
l’application des autres sauf si on accorde des
permissions explicitement : sandboxing utilisateur.
Une application
Le sandboxing utilisateur ests’exécute dans
donc l’un des piliers un processus
du système UNIX
des sécurité d’Android. En
utilisant un service UNIX éprouvé par plus de 40 ans de mise en œuvre, le système Android
unique,
entend garantirlancé
l’isolation(si
des il n’existe
fichiers pas déjà)
entre applications. dès qu’un
Une application ne peut pas des
accéder aux fichiers d’une autre application ou du système lui même (sauf autorisation
points d’entré de l’application est sollicité.
particulière).

Chaque application possède sa propre DalvikVM obtenu


grâce au processus Zigote.
Des exceptions peuvent-être consenties, quand plusieurs
applications possèdent le même certificat (même
signature => possibilité même uid ou/et même DVM)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
40

Une application installée dans un terminal Android,


dispose d’un identifiant unique (user id), qui isolera
l’application des autres sauf si on accorde des
permissions explicitement : sandboxing utilisateur.
Une application s’exécute dans un processus UNIX
unique, lancé (si il n’existe pas déjà) dès qu’un des
points d’entré de l’application est sollicité.
Chaque application possède sa propre DalvikVM obtenu
Le second pilier du modèle de sécurité Android est l’utilisation de la notion de processus UNIX
pour définir une application en cours d’exécution. Une application Android = un processus
grâce au processus Zigote.
UNIX. Rappelons qu’un processus UNIX est une abstraction du système qui vise à faire croire à
une application qu’elle s’exécute « seule » sur un système. Le processus pense donc avoir le
Des exceptions peuvent-être consenties, quand plusieurs
contrôle de toute la machine et le système UNIX fait tout pour lui faire croire que c’est le cas
(mémoire virtuelle quand le processus cherche à utiliser une zone mémoire qui est en fait dédié à
applications possèdent le même certificat (même
un autre processus, etc… cf cours d’architecture système). Ainsi en utilisant cette notion de
processus Android garanti l’isolation entre les applications en cours d’exécution sur le terminal.
signature => possibilité même uid ou/et même DVM)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
40

Une application installée dans un terminal Android,


dispose d’un identifiant unique (user id), qui isolera
l’application des autres sauf si on accorde des
permissions explicitement : sandboxing utilisateur.
Une application s’exécute dans un processus UNIX
unique, lancé (si il n’existe pas déjà) dès qu’un des
points d’entré de l’application est sollicité.
Chaque application possède sa propre DalvikVM obtenu
grâce au processus Zigote.
Des exceptions peuvent-être consenties, quand plusieurs
applications possèdent le même certificat (même
signature => possibilité même uid ou/et même DVM)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
41

S’appuie sur des services dédiés du noyau Linux :


en particulier le User Sandboxing. Protection des
accès aux fichiers et aux ressources (un utilisateur
UNIX par application).
chaque application s’exécute dans un processus
Linux (isolation entre les processus en mémoire
centrale)
chaque application s’exécute sous le contrôle du
SecurityManager de la machine virtuelle Java qui
applique la politique de sécurité spécifique
d’Android : Avant d’autoriser un accès à des
ressources critiques, des autorisations doivent avoir
été validées par l’utilisateur.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
Nous allons maintenant nous attarder un peu sur le modèle de sécurité associé aux 41
applications Android.
S’appuie sur des services dédiés du noyau Linux :
en particulier le User Sandboxing. Protection des
accès aux fichiers et aux ressources (un utilisateur
UNIX par application).
chaque application s’exécute dans un processus
Linux (isolation entre les processus en mémoire
centrale)
chaque application s’exécute sous le contrôle du
SecurityManager de la machine virtuelle Java qui
applique la politique de sécurité spécifique
d’Android : Avant d’autoriser un accès à des
ressources critiques, des autorisations doivent avoir
été validées par l’utilisateur.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
Au cœur de la sécurité Android, nous avons commencé à le voir on trouve un certain
nombre de mécanismes d’isolation issus des systèmes UNIX. Il s’agit donc de mécanismes 41
éprouvés par plusieurs décennies d’utilisation (donc réputés fiables).
S’appuie sur des services dédiés du noyau Linux :
en particulier le User Sandboxing. Protection des
accès aux fichiers et aux ressources (un utilisateur
UNIX par application).
chaque application s’exécute dans un processus
Linux (isolation entre les processus en mémoire
centrale)
chaque application s’exécute sous le contrôle du
SecurityManager de la machine virtuelle Java qui
applique la politique de sécurité spécifique
d’Android : Avant d’autoriser un accès à des
ressources critiques, des autorisations doivent avoir
été validées par l’utilisateur.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
41

S’appuie sur des services dédiés du noyau Linux :


en particulier
Comme le système Android les’appuie
Userégalement
Sandboxing. Protection
sur le langage Java, les applicationsdes
accès aux fichiers et aux ressources (un utilisateur
Android vont également bénéficier de la longue expérience de Java en la matière et
notamment de son service de supervision : le SecurityManager, qui surveille l’application
UNIX
Java et contrôlepar
tout application).
accès à des ressources critiques et fonction d’une politique de sécurité
défini à l’extérieur du processus de l’application. Là encore, on s’appuie sur un mécanisme
dechaque
Sandboxing de application s’exécute
Java, ancien et éprouvé dansannées
par de nombreuses un deprocessus
mise en pratique.
C’est le troisième pilier du modèle de sécurité Android. Si une application utilise un service
Linux
critique sans y(isolation
être autorisée, leentre les
superviseur processus
arrêtera en mémoire
l’application fautive. Dans le Java
classique la politique de sécurité est définie dans un fichier à part (security policy).
centrale)
chaque application s’exécute sous le contrôle du
SecurityManager de la machine virtuelle Java qui
applique la politique de sécurité spécifique
d’Android : Avant d’autoriser un accès à des
ressources critiques, des autorisations doivent avoir
été validées par l’utilisateur.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
41

S’appuie sur des services dédiés du noyau Linux :


en particulier le User Sandboxing. Protection des
Dans le système Android, la politique de sécurité est définie travers une liste d’autorisation
accèsdans
déclarées aux fichiers
le fichier et aux ressources
AndroidManifest.xml . À l’installation de(un utilisateur
l’application la liste de
ces demandes d’autorisation est présentée à l’utilisateur pour qu’il les valide ou non. Si
UNIXlespar
l’utilisateur application).
valide, la politique du Security Manager est créée à partir de ces
autorisations. Si l’application tente d’utiliser une ressource critique pour laquelle, elle n’a
chaque application s’exécute dans un processus
pas demandé d’autorisation, le Security Manager arrêtera l’application fautive. Si par contre
Linux
l’application (isolation
a bien demandée une
validé cette utilisation.
entre les
autorisation,processus en
le système la laissera mémoire
faire car l’utilisateur a

centrale)
chaque application s’exécute sous le contrôle du
SecurityManager de la machine virtuelle Java qui
applique la politique de sécurité spécifique
d’Android : Avant d’autoriser un accès à des
ressources critiques, des autorisations doivent avoir
été validées par l’utilisateur.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
41

S’appuie sur des services dédiés du noyau Linux :


en particulier le User Sandboxing. Protection des
accès aux fichiers et aux ressources (un utilisateur
UNIX par application).
chaque application s’exécute dans un processus
Linux (isolation entre les processus en mémoire
centrale)
De nos jours, le modèle Android, un peu trop complexe à comprendre pour l’utilisateur et
donc finalement un peu trop faible (une seule décision à l’installation), évolue vers quelque
chaque
chose application
qui ressemble de plus en plus s’exécute
au modèle de J2ME.sous le
Avec les contrôle
AppOpps du
(expérimentées
à partir de la version 4.3). Il devient possible pour l’utilisateur de retirer temporairement ou
SecurityManager
définitivement des autorisations àde la machine
une application. virtuelle
Cela implique Java qui
de devoir reprogrammer
les applications pour tenir compte de ces nouveaux mécanismes officialisés avec Android 6.
applique la politique de sécurité spécifique
d’Android : Avant d’autoriser un accès à des
ressources critiques, des autorisations doivent avoir
été validées par l’utilisateur.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
41

S’appuie sur des services dédiés du noyau Linux :


en particulier le User Sandboxing. Protection des
accès aux fichiers et aux ressources (un utilisateur
UNIX par application).
chaque application s’exécute dans un processus
Linux (isolation entre les processus en mémoire
centrale)
chaque application s’exécute sous le contrôle du
SecurityManager de la machine virtuelle Java qui
applique la politique de sécurité spécifique
d’Android : Avant d’autoriser un accès à des
ressources critiques, des autorisations doivent avoir
été validées par l’utilisateur.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
42

Les demandes de permissions sont recensées dans le


fichier AndroidManifest.xml. Pour pouvoir accéder à
certaines ressources critiques, le développeur de
l’application doit ajouter une demande d’autorisation.
Les demandes sont présentées à l’installation et validées
par l’utilisateur. Désormais dans le cadre de la sandbox,
l’application accèdera aux ressources qu’elle a
demandée.
Les versions récentes d’Android rajoutent peu à peu des
confirmations ou un contrôle de l’utilisateur sur certains
accès (à l’image de ce que proposait JME et de ce que
propose également iOS) dans la suite des « AppOpps »
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
42

Les demandes de permissions sont recensées dans le


fichier AndroidManifest.xml. Pour pouvoir accéder à
certaines ressources critiques, le développeur de
l’application doit ajouter une demande d’autorisation.
Les demandes sont présentées à l’installation et validées
Là où Android se démarque assez franchement de J2ME, c’est dans la définition de la
politique de sécurité. En effet, Android propose une alternative pragmatique à la création de
parpolitiques
l’utilisateur.
de sécurité sousDésormais dans
contrôle de l’utilisateur (dansle
JMEcadre dedoit
l’utilisateur lainfirmer
sandbox,
ou
confirmer tout accès à des ressources critiques et peut éventuellement prendre des décisions
l’application accèdera
définitives). Généralement, aux
en effet, la ressources
sollicitation récurante de qu’elle a vécue
l’utilisateur est
comme un problème. L’utilisateur est dérangé par des messages qu’il ne comprend pas
demandée.
toujours… Android propose une alternative plus radicale en réglant une fois pour toute le
problème à l’installation. En une seule action l’utilisateur confirme ou infirme toutes les
demandes d’autorisation…
Les versions récentes d’Android rajoutent peu à peu des
confirmations ou un contrôle de l’utilisateur sur certains
accès (à l’image de ce que proposait JME et de ce que
propose également iOS) dans la suite des « AppOpps »
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
42

Les demandes de permissions sont recensées dans le


fichier AndroidManifest.xml. Pour pouvoir accéder à
certaines ressources critiques, le développeur de
l’application doit ajouter une demande d’autorisation.
Les demandes sont présentées à l’installation et validées
par l’utilisateur. Désormais dans le cadre de la sandbox,
l’application accèdera aux ressources qu’elle a
demandée.
Le SecurityManager de Java et les autres mécanismes d’isolation permettent de garantir que
Les versions récentes d’Android rajoutent peu à peu des
seules les ressources autorisées seront utilisées par l’application.
confirmations ou un contrôle de l’utilisateur sur certains
accès (à l’image de ce que proposait JME et de ce que
propose également iOS) dans la suite des « AppOpps »
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
42

Les demandes de permissions sont recensées dans le


fichier AndroidManifest.xml. Pour pouvoir accéder à
certaines ressources critiques, le développeur de
l’application doit ajouter une demande d’autorisation.
Devant la recrue d’essence des problèmes de sécurité sous Android, les ingénieurs ont été un
Les demandes sont présentées à l’installation et validées
peu contraint à revoir leur définition de la politique de sécurité et ont voit ainsi poindre dans
la version 6 d’Android un mécanisme qui avait déjà été expérimenté dans le version 4.3 : les
par l’utilisateur. Désormais dans le cadre de la sandbox,
AppOpps. Cela consiste à solliciter l’utilisateur sur l’accès à différentes ressources par une
application même si il avait accepté les autorisations à l’installation. L’idée étant de rendre à
l’application accèdera aux ressources qu’elle a
l’utilisateur une marge de contrôle dans la définition de la politique de sécurité et la
demandée.
possibilité de la faire évoluer dans le temps.

Les versions récentes d’Android rajoutent peu à peu des


confirmations ou un contrôle de l’utilisateur sur certains
accès (à l’image de ce que proposait JME et de ce que
propose également iOS) dans la suite des « AppOpps »
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
42

Les demandes de permissions sont recensées dans le


fichier AndroidManifest.xml. Pour pouvoir accéder à
certaines ressources critiques, le développeur de
l’application doit ajouter une demande d’autorisation.
Les demandes sont présentées à l’installation et validées
par l’utilisateur. Désormais dans le cadre de la sandbox,
l’application accèdera aux ressources qu’elle a
demandée.
Les versions récentes d’Android rajoutent peu à peu des
confirmations ou un contrôle de l’utilisateur sur certains
accès (à l’image de ce que proposait JME et de ce que
propose également iOS) dans la suite des « AppOpps »
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
43

Des signatures numériques garantissent l’intégrité des


apk publiés sur les markets. Les signatures sont validées
à l’installation par le PackageManager d’Android.
Ainsi on ne doit pas trouver d’application présentant des
demandes d’autorisation d’accès différentes de ce que le
développeur avait initialement demandé.
Dangers spécifiques : possibilité d’installer des
application non signées (sources non reconnues) et
problème du « rootage » du téléphone.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
43

Des signatures numériques garantissent l’intégrité des


apk publiés sur les markets. Les signatures sont validées
à l’installation par le PackageManager d’Android.
Ainsi on ne doit pas trouver d’application présentant
Pour garantir l’intégrité de toutes ces sécurités, Android repose sur des mécanismes de
cryptographie éprouvés à base de signatures numériques. Ce cours n’étant pas un cours de
des
demandes d’autorisation
sécurité, si vous ignorez d’accès
ce qu’est une signature, je vais en différentes de très
donner ici une définition ce que le
intuitive mais vous pourrez compléter vos connaissances par un bon cours de cryptographie
développeur
et de sécurité comme on avait
peut en initialement
trouver en RSX112 pardemandé.
exemple.

Dangers spécifiques : possibilité d’installer des


application non signées (sources non reconnues) et
problème du « rootage » du téléphone.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
43

Des signatures numériques garantissent l’intégrité des


apk publiés sur les markets. Les signatures sont validées
à l’installationUnepar le PackageManager
signature d’Android.
cryptographique est définie grâce à plusieurs étapes
élémentaires :
Ainsi on ne doit pas trouver d’application présentant des
Définition d’un résumé caractéristique de la ressource à signer. On utilise
une fonction mathématique non inversible (on ne peut pas retrouver
demandes d’autorisation d’accès différentes de ce que le
l’élément de départ à partir de l’élément d’arriver) et caractéristique (on
ne peut pas construire facilement par un algorithme 2 éléments
développeur avait initialement demandé.produisant le même résultat par application de cette fonction). De sorte
que si on altère le document original, le résumé caractéristique sera
différent.
Dangers spécifiques : possibilité d’installer des
Chiffrement du résumé caractéristique : on utilise un mécanisme de
chiffrement asymétrique par exemple en chiffrant avec la clé privée du
application non signées (sources non reconnues) et
signataire le résumé caractéristique, de sorte que le déchirement du
problème du « rootage » du téléphone. résumé en utilisant la publique du signataire permette de retrouver le
résumé caractéristique non chiffré.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
43

Des signatures numériques garantissent l’intégrité des


apk publiés sur les markets. Les signatures sont validées
à l’installationIl devient
par le PackageManager d’Android.
alors possible de vérifier la signature électronique d’un
document :
Ainsi on ne doit pas trouver d’application présentant des
le vérificateur construit lui aussi un résumé caractéristique en utilisant la
même fonction mathématique.
demandes d’autorisation d’accès différentes de ce que le
il déchiffre ensuite la signature qui accompagne le document en utilisant
la clé publique du signataire.
développeur avait initialement demandé.enfin il compare les résultats de 1. et de 2. si les résultats sont égaux la
signature est validée.
Dangers spécifiques : possibilité d’installer des
application non signées (sources non reconnues) et
problème du « rootage » du téléphone.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
43

Des signatures numériques garantissent l’intégrité des


apk publiés sur les markets. Les signatures sont validées
à l’installation par le PackageManager d’Android.
Ainsi on ne doit pas trouver d’application présentant des
Attention, rooter un téléphone Android (activer le super utilisateur UNIX
demandes d’autorisation
root) est potentiellement dangereux car ce d’accès différentes
mécanisme peut permettre à de ce que le
des applications malignes de casser les isolations voulues par le système
développeur avait
Android (l’utilisateur root a initialement
tous les droits d’accès).demandé.

Dangers spécifiques : possibilité d’installer des


application non signées (sources non reconnues) et
problème du « rootage » du téléphone.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Modèle de sécurité
43

Des signatures numériques garantissent l’intégrité des


apk publiés sur les markets. Les signatures sont validées
à l’installation par le PackageManager d’Android.
Ainsi on ne doit pas trouver d’application présentant des
demandes d’autorisation d’accès différentes de ce que le
développeur avait initialement demandé.
Dangers spécifiques : possibilité d’installer des
application non signées (sources non reconnues) et
problème du « rootage » du téléphone.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
44

Android propose un modèle à composants, offrant


plusieurs points d’entrées dans l’application. On
distingue 4 grands types de composants :
Les activités (Activity) qui gèrent l’interaction avec
l’utilisateur sur le modèle de la page Web.
Les services (Services) qui gèrent les opérations en
tâche de fond sur le modèle des objets distribués.
Les fournisseurs de contenu (ContentProvider) qui
assurent la publication de données sous forme de
tables à destination d’autres applications.
Les traitements d’événements diffusés
(BroadcastReciever) qui permettent la
communication IPC par abonnement à un bus de
diffusion de messages.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
44
Nous allons maintenant regarder la structure d’une application en termes de programmation.
Android propose un modèle à composants, offrant
Nous allons regarder les mécanismes d’interopérabilité proposés par Android à travers le
modèle de composants très riche sur lequel se fonde Android. Ce modèle est un des atouts
plusieurs points d’entrées dans l’application. On
majeurs par rapport à ses concurrents.

distingue 4 grands types de composants :


Les activités (Activity) qui gèrent l’interaction avec
l’utilisateur sur le modèle de la page Web.
Les services (Services) qui gèrent les opérations en
tâche de fond sur le modèle des objets distribués.
Les fournisseurs de contenu (ContentProvider) qui
assurent la publication de données sous forme de
tables à destination d’autres applications.
Les traitements d’événements diffusés
(BroadcastReciever) qui permettent la
communication IPC par abonnement à un bus de
diffusion de messages.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
44

Android propose un modèle à composants, offrant


Chaque type de composants applicatifs, joue un rôle précis dans l’architecture globale
d’Android et des applications pour ce système. Les activités gèrent l’interface graphique
plusieurs
utilisateur etpoints d’entrées
donc les interactions dans l’application.
d’une application On
avec l’utilisateur. Le modèle
celui des pages Web. La navigation dans l’application est directement inspirée par la
d’IHM est

distingue 4 grands
navigation entre pages Web. types de composants :

Les activités (Activity) qui gèrent l’interaction avec


l’utilisateur sur le modèle de la page Web.
Les services (Services) qui gèrent les opérations en
tâche de fond sur le modèle des objets distribués.
Les fournisseurs de contenu (ContentProvider) qui
assurent la publication de données sous forme de
tables à destination d’autres applications.
Les traitements d’événements diffusés
(BroadcastReciever) qui permettent la
communication IPC par abonnement à un bus de
diffusion de messages.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
44

Android propose un modèle à composants, offrant


plusieurs points d’entrées dans l’application. On
distingue 4 grands
Les services gèrent les tâches types de interaction
de fonds (sans composants : Les services
avec l’utilisateur).
s’apparentent à des serveurs dans le modèle des applications Web. Ils fournissent des
Les activités
informations ou produisent(Activity ) lequi
des résultats pour gèrent
compte en générall’interaction
d’activités qui elles avec
interagissent avec l’utilisateur.
l’utilisateur sur le modèle de la page Web.
Les services (Services) qui gèrent les opérations en
tâche de fond sur le modèle des objets distribués.
Les fournisseurs de contenu (ContentProvider) qui
assurent la publication de données sous forme de
tables à destination d’autres applications.
Les traitements d’événements diffusés
(BroadcastReciever) qui permettent la
communication IPC par abonnement à un bus de
diffusion de messages.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
44

Android propose un modèle à composants, offrant


plusieurs points d’entrées dans l’application. On
distingue 4 grands types de composants :
UneLes
forme activités (Activity
particulière de service ) qui gèrent
est le ContentProvider qui est unel’interaction
des pierres angulaires avec
de l’inetropérabilité des applications Android entre-elles. Le ContentProvider fournit un
l’utilisateur
accès sur
à une sorte de « table le demodèle
de base de la page
données relationnelle Web. une seule
» (avec seulement
table disponible) permettant à une application d’exposer à d’autres applications des données
Les
qu’elle services
souhaite (Services
partager. Par exemple la base)des
qui gèrent
contacts dans unles opérations
système Android est en
exposées aux autres applications à travers un ContentProvider.
tâche de fond sur le modèle des objets distribués.
Les fournisseurs de contenu (ContentProvider) qui
assurent la publication de données sous forme de
tables à destination d’autres applications.
Les traitements d’événements diffusés
(BroadcastReciever) qui permettent la
communication IPC par abonnement à un bus de
diffusion de messages.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
44

Android propose un modèle à composants, offrant


plusieurs points d’entrées dans l’application. On
distingue 4 grands types de composants :
Les activités (Activity) qui gèrent l’interaction avec
l’utilisateur sur le modèle de la page Web.
EnfinLes services sont
les BrodcastReciever (Services
des composants) qui
un peugèrent
particuliers les opérations en
qui viennent
s’enregistrer sur un bus logiciel propre au système Android. Ce bus logiciel est en fait un
tâche de
lieu d’échange fondentre
de messages surlesle modèle
composants desAndroid
du système objets et lesdistribués.
composants des
applications. Par exemple, le composant système de gestion de la batterie va poster des
Les fournisseurs de contenu (ContentProvider) qui
messages pour avertir de l’état de la batterie et éventuellement de la décision prise d’arrêter
assurent
le terminal avant unela publication
perte complète d’énergie.de données
Un BroadcastReciever sous
pourraforme
message et permettre à l’application de prendre des décisions en conséquence. Mais
de
alors lire ce

tables
l’utilisation de ceàbus
destination d’autres
va bien au delà d’une applications.
écoute des messages système. Il permet
également d’échanger des messages entre applications par exemple.
Les traitements d’événements diffusés
(BroadcastReciever) qui permettent la
communication IPC par abonnement à un bus de
diffusion de messages.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Applications Android
44

Android propose un modèle à composants, offrant


plusieurs points d’entrées dans l’application. On
distingue 4 grands types de composants :
Les activités (Activity) qui gèrent l’interaction avec
l’utilisateur sur le modèle de la page Web.
Les services (Services) qui gèrent les opérations en
tâche de fond sur le modèle des objets distribués.
Les fournisseurs de contenu (ContentProvider) qui
assurent la publication de données sous forme de
tables à destination d’autres applications.
Les traitements d’événements diffusés
(BroadcastReciever) qui permettent la
communication IPC par abonnement à un bus de
diffusion de messages.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Activités
45

Composant central de l’interface utilisateur d’une


application (une application peut afficher plusieurs
activités différentes - une seule à la fois)
Le modèle de comportement est similaire à celui d’une
page Web. Une activité “ne devrait pratiquement pas
avoir d’état propre” sauvegardé en mémoire car on doit
pouvoir la quitter à tout moment.
Chaque nouvel écran présenté à l’utilisateur est porté
par une activité différente (sauf onglets, fragments…)
Le système gère la navigation (lancement, touche
back…), dialogue avec des tâches gérant l’état ou les

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Activités
45
Les activités sont un des composants les plus connus et les plus mis en avant dans la
Composant central de l’interface utilisateur d’une
programmation Android car ils portent la gestion de l’interaction avec l’utilisateur. Il est
donc difficile d’envisager la construction d’une application sans envisager de créer au moins
application (une application peut afficher plusieurs
une activité (même si cela est théoriquement possible).

activités différentes - une seule à la fois)


Le modèle de comportement est similaire à celui d’une
page Web. Une activité “ne devrait pratiquement pas
avoir d’état propre” sauvegardé en mémoire car on doit
pouvoir la quitter à tout moment.
Chaque nouvel écran présenté à l’utilisateur est porté
par une activité différente (sauf onglets, fragments…)
Le système gère la navigation (lancement, touche
back…), dialogue avec des tâches gérant l’état ou les

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Activités
45

Composant central de l’interface utilisateur d’une


application (une application peut afficher plusieurs
activités différentes - une seule à la fois)
Une application peut afficher successivement plusieurs activités au cours de la navigation de
Le modèle de comportement est similaire à celui d’une
l’utilisateur dans l’application. Mais une seule activité, en général, est affichée à l’écran à tout
moment. Le paradigme dominant de l’interface graphique Android reste le 1 application -> 1
page Web. Une activité “ne devrait pratiquement pas
écran, même si ces derniers temps des notions de multifenêtrage (PiP : Picture in Picture…)
avoir d’état propre” sauvegardé en mémoire car on doit
tendent à apparaître à l’instar de ce que l’on trouve dans les applications pour machine de bureau.

pouvoir la quitter à tout moment.


Chaque nouvel écran présenté à l’utilisateur est porté
par une activité différente (sauf onglets, fragments…)
Le système gère la navigation (lancement, touche
back…), dialogue avec des tâches gérant l’état ou les

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Activités
45

Composant central de l’interface utilisateur d’une


application (une application peut afficher plusieurs
activités différentes - une seule à la fois)
Le modèle de comportement est similaire à celui d’une
page Web. Une activité “ne devrait pratiquement pas
avoir d’état propre” sauvegardé en mémoire car on doit
pouvoir la quitter à tout moment.
Chaque nouvel écran présenté à l’utilisateur est porté
Le principe dominant reste une seule activité affichée à tout moment par application. Et
cette activité occupe tout l’écran sur le principe des pages web. L’écran affiche une page et
par une activité différente (sauf onglets, fragments…)
en fonction des interactions de l’utilisateur, d’autres activités peuvent venir remplacer une
activité à l’écran. Comme l’activité ne gère que l’affichage et l’interaction, l’idée est de faire
en sorte que la logique et l’état de l’application qui peut-être assez lourd ne soit en général
Le système gère la navigation (lancement, touche
pas géré par les activités (qui gardent un état très léger essentiellement lié à l’affichage).
Ainsi passer d’une activité à une autre reste une opération légère qui ne remet pas en cause
back…), dialogue avec des tâches gérant l’état ou les
la logique de l’application. Là encore, le parallèle avec les pages Web est très important,
puisqu’on retrouve la notion de système sans état du Web des origines…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Activités
45

Composant central de l’interface utilisateur d’une


application (une application peut afficher plusieurs
activités différentes - une seule à la fois)
Le modèle de comportement est similaire à celui d’une
Le système gère la navigation entre les activités en définissant la notion de tâches
page Web.
utilisateurs. Une
En navigant activité
d’activité “ne
en activité devrait
comme l’internautepratiquement
navigue de page web enpas
page web, l’utilisateur empile des activités (éventuellement d’applications différentes) et le
avoirfournit
système d’état propre”
des outils standard desauvegardé
navigation à l’instaren
de cemémoire car Web
que fait un navigateur on doit
pour l’internaute. Ainsi le système Android propose
pouvoir la quitter à tout moment.
Un lanceur d’application, à l’image des signets du navigateur.
Un bouton back permettant de revenir à l’activité précédente
Chaque nouvel écran présenté à l’utilisateur est porté
Un bouton home permettant de revenir au lanceur d’applications et de permettre le
démarrage d’un nouvelle tâche utilisateur.
par une activité différente (sauf onglets, fragments…)
Un bouton de recherche…

Le système gère la navigation (lancement, touche


back…), dialogue avec des tâches gérant l’état ou les

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Activités
45

Composant central de l’interface utilisateur d’une


application (une application peut afficher plusieurs
activités différentes - une seule à la fois)
Le modèle de comportement est similaire à celui d’une
page Web. Une activité “ne devrait pratiquement pas
avoir d’état propre” sauvegardé en mémoire car on doit
pouvoir la quitter à tout moment.
Chaque nouvel écran présenté à l’utilisateur est porté
par une activité différente (sauf onglets, fragments…)
Le système gère la navigation (lancement, touche
back…), dialogue avec des tâches gérant l’état ou les

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
Le système Android reçoit une appel système startActivity() par un
StartActivity(Intent)
composant (par exemple le «Home» du système Android lorsque
l’utilisateur appuie sur l’icône de l’application pour la lancer)

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)

si
le processus
Le système Android, vérifie si il
existe existe déjà un processus pour
l’application qui implante
l’activité que l’on demande à
lancer

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)

non Si un tel processus n’existe pas,


si Création du
le processus le système Android demande au
processus par
existe processus démon Zigote d’en
clone Zigote
créer un par clonage.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)

non
si Création du
le processus processus par
existe
clone Zigote

UIThread Le système Android, va alors


directement agir dans le processus de
l’application par le contrôle qu’il a du fil
d’exécution principal (le «main») que
l’on appelle dans Android le UIThread.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)

non
si Création du
le processus processus par
existe
clone Zigote
oui Si le processus existe déjà le
système agit directement dans
UIThread le processus par
l’intermédiaire du UIThread.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)

non
si Création du
le processus processus par
existe
clone Zigote
oui

UIThread

instanciation
Activité
L’Activity Manager d’Android (le
par l’Activity
composant système gérant les
Manager
activités) va alors «prendre la main»
dans le UIThread, afin de démarrer
l’activité demandée. En particulier,
c’est lui qui crée une nouvelle
instance de la classe que le
développeur à créée pour implanter
son activité. Ce n’est pas le
développeur qui crée cette instance.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)

non
si Création du
le processus processus par
existe
clone Zigote
oui

UIThread

Démarrage Activité
instanciation
Activité
Une fois l’instance créée, on rentre
par l’Activity dans la phase de démarrage de
Manager l’activité. Cette phase comporte
plusieurs étapes durant lesquelles le
code du système et le code du
développeur de l’application vont
interagir

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)

non
si Création du
le processus processus par
existe
clone Zigote
oui

UIThread

Démarrage Activité
instanciation
Activité
par l’Activity onCreate() Le système va alors exécuter un ensemble
Manager d’opérations d’initialisation. Une première étape
importante pour le développeur de l’application
est lorsque le système appelle la méthode
onCreate() de son activité. L’objectif principal
de cette méthode est de permettre au développeur
d’allouer les objets qui implantent l’IHM de
l’application et requérir un certain nombre de
ressources pour l’application.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)

non
si Création du
le processus processus par
existe
clone Zigote
oui

UIThread

Démarrage Activité
instanciation Lorsque la méthode onCreate() termine (et du
Activité point de vue d’Android il est indispensable
par l’Activity onCreate() qu’elle termine !), le système poursuit ses
Manager opérations d’initialisation et au bout d’un moment
appelle une seconde méthode du cycle de vie de
onStart() l’activité : la méthode onStart(). Cette méthode
permet au développeur de poursuivre
l’initialisation de l’activité, en allouant des
ressources moins pérennes. Une fois encore le
code de la méthode onStart() doit terminer
avant un délai assez court, pour ne pas bloquer
tout le processus !
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)

non
si Création du
le processus processus par
existe
clone Zigote
oui

UIThread

Démarrage Activité
instanciation Lorsque la méthode onStart() termine le système
Activité reprend la main et poursuit ses opérations d’initialisation.
par l’Activity onCreate() Au bout d’un moment, il arrive à la fin de ces opérations
Manager de démarrage de l’activité. C’est à ce moment que le
système appelle une autre méthode du cycle de vie de
onStart() l’activité : la méthode onResume(). L’appel de cette
méthode marque la fin de la phase d’initialisation de
l’activité. Elle permet au développeur de terminer ses
propres opérations d’initialisation. En particulier, c’est
onResume() dans cette méthode que doivent être généralement
démarrées les tâches rendant l’interface graphique
dynamique (animations, mise à jour de valeurs …)
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent)
À partir de là, l’activité est initialisée et
opérationnelle, elle apparait sur l’écran et
l’utilisateur peut commencer
non à interagir avec
l’IHM. Chaque si interaction va Création du
être transformée Activité au premier
le processus plan
en un événement
existe système quiprocessus pardans
sera traité
une boucle événementielle par clone Zigote
le UIThread.
Les actions
oui à exécuter seront des méthodes
implantées par le développeur de l’application
UIThread
et qui seront appelées par le système. On
restera dans cet état tant que l’activité restera
au premier plan, manipulée par son
Démarrage Activité
instanciation
Activité
par l’Activity onCreate()
Manager

onStart()

onResume()

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

non
si Création du Activité au premier
le processus processus par plan
existe
clone Zigote
oui

UIThread

Démarrage Activité
instanciation
Activité
par l’Activity onCreate()
Manager

onStart()

onResume()

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe
clone Zigote Au bout d’un moment l’activité peut
oui être amenée à suspendre ses
opérations. Elle quitte le premier plan
UIThread et perd l’attention de l’utilisateur
(réception d’un appel téléphonique,
Démarrage Activité l’utilisateur navigue entre les activités,
instanciation l’utilisateur met son appareil en
Activité veuille, le système s’éteint faute de
par l’Activity onCreate() batterie…). Quelque soit la raison
Manager précise de cette perte d’attention, le
système appèle alors la méthode
onStart() onPause(), afin de permettre au
développeur de l’application de
suspendre des calculs associés à
l’interface graphique (animations,
onResume()
mises à jour de valeurs). On réalise ici
en général les opérations inverses de
celles réalisées dans onResume().
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui

UIThread Comme pour toutes les méthodes du


cycle de vie, onPause(), doit terminer,
Démarrage Activité et à l’issue de son exécution, l’activité
instanciation se retrouve dans un état ou son
Activité affichage est partiellement masqué ou
par l’Activity onCreate() très temporairement masquée.
Manager (exemple : boite de dialogue
apparaissant au dessus de l’activité…)
onStart()

onResume()

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui

UIThread

Démarrage Activité
instanciation Si l’activité revient au
Activité premier plan, on retourne
par l’Activity onCreate() directement à la méthode
Manager onResume(). Par exemple si
on ferme la boîte de dialogue
onStart() masquant l’activité ou que
l’on refuse un coups de
téléphone entrant.
onResume()

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui
Si l’activité se retrouve
UIThread complètement masquée et qu’une onStop()
autre activité la remplace au
Démarrage Activité premier plan, le système appelle
instanciation la méthode onStop() qui permet
Activité au développeur de l’application
par l’Activity onCreate() de gérer la libération de certaines
Manager

onStart()

onResume()

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui

UIThread onStop()

Si l’activité revient au premier plan,


Démarrage plus tard soit
Activité
par navigation de l’utilisateur, soit par demande
instanciation Activité suspendue
explicite
Activitéd’autres composants, soit par abandon des non visible
activités qui se sont empiléesonCreate()
par l’Activity au dessus, le système
vaManager
réactiver l’activité en appelant la méthode
onRestart(). Cette méthode va permettre au
développeur de tenir compte du fait que l’activité
onStart() onRestart()
qui est réactivité est bien déjà initialisée mais
qu’elle a été arrêté pour une période assez longue
et qu’il faut donc remettre àonResume()
jour son contexte
d’exécution.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui

UIThread onStop()

Démarrage Activité
instanciation Après l’exécution de la méthode onRestart() Activité
le suspendue
Activité système reprend la main pour effectuer ses propresnon visible
par l’Activity onCreate()
opérations d’initialisation et on retourne dans le
Manager cycle de démarrage de l’activité. Mais le point
d’entrée ne sera pas la méthode onCreate() mais la
onStart() méthode onStart() qui réalisera des opérations
onRestart()
symétriques inverses de celles réalisées au cours du
onStop()…
onResume() Le cycle reprenant, lorsque le onResume() sera
appelé, les opérations du onPause() seront
annulées et l’activité sera de nouveau opérationnel

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui

UIThread onStop()

Démarrage Activité
instanciation Si l’activité termine (quelque soit la raison Activité suspendue
Activité terminaison explicite de la part de l’utilisateur par non visible
par l’Activity appuie sur le bouton back lorsque l’activité était en
onCreate()
Manager cours d’exécution, terminaison par un programme
qui appelle de la méthode finish() de l’activité,
terminaison à l’initiative du système par exemple
onStart() onRestart()
en cas de rotation de l’affichage…) le système va onDestroy()
arrêter l’activité et appelle la méthode
onDestroy() pour permettre au développeur de
onResume()
libérer les dernières ressources allouées à la Activité arrêtée
création de l’activité.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui

UIThread Si on regarde les états précédents : activité suspendue, et onStop()


activité stoppée ; dans ces états l’activité perd son caractère
prioritaire pour le système.
Démarrage En effet, le système Android,
Activité
instanciationconfère un caractère très prioritaire à l’activité affichée au Activité suspendue
Activité premier plan et disposant de l’attention de l’utilisateur. non visible
onCreate()
par l’ActivityCette priorité décourage le système de supprimer
Manager l’application pour récupérer de la mémoire en cas de
manque de ressource. Par contre, dès que l’activité perd
son caractère prioritaire,
onStart()le système, si il est à cours de
onRestart()
ressources (mémoire et/ou de calcul), peut décider d’arrêter onDestroy()
l’activité (brutalement ou non) pour la faire transiter vers
l’état terminé. onResume()
Activité arrêtée

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) Interaction

Dans l’état terminé, si onPause()


non
l’activitésidoit Création du Activité au premier
redémarrer, on reprend
le processus processus par plan
le cycleexiste
au tout début. Activité
clone Zigote partiellement masquée
oui

UIThread onStop()

Démarrage Activité
instanciation Activité suspendue
Activité non visible
par l’Activity onCreate()
Manager

onStart() onRestart()
onDestroy()

onResume()
Activité arrêtée

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


Si le système peut à tout moment décider de l’arrêt
46
d’une activité sans que l’utilisateur soit en charge de onSaveInstanceState()
StartActivity(Intent) Interaction
cette décision, il faut permettre à l’activité de
sauvegarder ses données constituant son état propre
avant sa destruction, afin de pouvoir reprendre son onPause()
non
si exécution plus tard
Création du si l’utilisateur reprend
Activitécette
au premier
le processus activité. Pour cela
processus parle système appellera la plan
méthode
existe Activité
onSaveInstanceState()
clone Zigote de l’activité pour permettre
partiellement masquée
au développeur de sauvegarder les données
oui
importantes de l’activité. Android ne spécifie
UIThread cependant pas clairement, le moment où cet appel à
onStop()
lieu. Il peut avoir lieu avant la méthode onPause() ou
entre onPause() et onStop().
Démarrage Activité
instanciation Activité suspendue
Activité non visible
par l’Activity onCreate()
Manager

onStart() onRestart()
onDestroy()

onResume()
Activité arrêtée

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) onSaveInstanceState()
Interaction

Comme l’arrêt de l’activité peut se solder par un arrêt du processus de l’application Android par le onPause()
système et
non
ainsisilibérer toute la mémoire réservée
Création du par le processus, il faut
Activité un mécanisme de sauvegarde permettant aux
au premier
données de «survivre» processus
le processus à une destruction
par du processus. Pour ce faire, le système Android fournit en paramètre un
plan
existe Activité
objet ressource de typeclone
Bundle . Un
Zigote Bundle Android est une structure de donnée de type dictionnaire (tableau
partiellement masquée
associatif), dans laquelle le développeur de l’application pourra stocker ses données sous forme de couples (clé,
oui
valeur). Une propriété très importante du Bundle est que ce dernier implémente le mécanisme Parcelable
d’Android
UIThread qui est un mécanisme de sérialisation des objets spécifique au système Android et qui agit en synergie
onStop()
avec le mécanisme de communication interprocessus des Binders intégrer au noyau Android. La sérialisation est
un format d’encodage particulier des objets (pour ceux connaissent on peut voir cela un peu comme le mécanisme
Démarrage Activité
JSON des
instanciation applications Web). Il permet de transformer un objet en mémoire sous la forme d’un flux binaire.
Activité Les
suspendue
binders
Activitévont alors permettre au système Android d’extraire le Bundle après exécution de la méthode non visible
onSaveInstanceState()
par l’Activity du processus afin de le conserver à l’abri d’une éventuelle destruction du processus. Le
onCreate()
Manager

onStart() onRestart()
onDestroy()

onResume()
Activité arrêtée

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) onSaveInstanceState()
Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui

UIThread onStop()

Démarrage Activité Le Bundle est reçu comme paramètre au moment du


instanciation Activité suspendue
onStart(), si l’activité avait été préalablement
Activité non visible
lancée et que le système avait du l’arrêter à l’insu de
par l’Activity onCreate()
l’utilisateur, le Bundle associé est passé en
Manager paramètre, sinon le paramètre vaudra null. Le
développeur de l’application pourra alors récupérer
onStart() les donnéesonRestart()
sauvegardées dans le dictionnaire et
onDestroy()
ainsi restaurer l’état de l’activité tel qu’il était au
moment de sa destruction.
onResume()
Activité arrêtée

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) onSaveInstanceState()
Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui

UIThread onStop()

Démarrage Activité
instanciation Activité suspendue
Activité non visible
par l’Activity onCreate()
Une autre méthode permet également de récupérer les
Manager informations stockée dans le Bundle après le démarrage
de l’activité par onStart(). Il s’agit d’une méthode
onStart()
symétrique à onSaveInstanceState() : la méthode
onRestart()
onRestoreInstanceState(). Il est souvent intéressant onDestroy()
onRestoreInstanceState()
d’implanter cette méthode qui est généralement appelée
entre l’appel de onStart() et onResume() afin de
onResume()
pouvoir restaurer certains éléments qui ne seraient pas Activité arrêtée
encore recréés au moment du onStart().

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 27/05/2020

Cycle de vie d’une activité


46
StartActivity(Intent) onSaveInstanceState()
Interaction

onPause()
non
si Création du Activité au premier
le processus processus par plan
existe Activité
clone Zigote partiellement masquée
oui

UIThread onStop()

Démarrage Activité
instanciation Activité suspendue
Activité non visible
par l’Activity onCreate()
Manager

onStart() onRestart()
onDestroy()
onRestoreInstanceState()

onResume()
Activité arrêtée

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Impact sur la définition des IHM


47

Modèle du thread unique de gestion de l’affichage :


UIThread => toutes les opérations attachées à l’activité
doivent être brèves sous peine de bloquer le thread
principal
Un timer supervise une activité => arrêt forcé en cas de
non réponse de l’activité à l’issu de la période de test
Toute tâche complexe doit-être déléguée à un thread
spécifique afin de préserver la réactivité du système

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Impact sur la définition des IHM


47

Modèle du thread unique de gestion de l’affichage :


UIThread => toutes les opérations attachées à l’activité
doivent être brèves sous peine de bloquer le thread
principal
Le UIThread est sous contrôle du système. Il gère une file d'attente de
messages à traiter par l’application. En réaction le UIThread va appeler
Un timer supervise une activité => arrêt forcé en cas de
éventuellement du code du développeur de l’application, directement ou
non réponse de l’activité à l’issu de la période de test
indirectement. Les méthodes de gestion du cycle de vie sont une
illustration de ce fonctionnement. Mais ce ne sont pas les seules. Pour
que cela fonctionne, il est important que le développeur respecte
Toute tâche complexe doit-être déléguée à un thread
certaines contraintes et en particulier ne monopolise pas le UIThread
sans quoi son application ne fonctionnerait pas.
spécifique afin de préserver la réactivité du système

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Impact sur la définition des IHM


47

Modèle du thread unique de gestion de l’affichage :


UIThread => toutes les opérations attachées à l’activité
doivent être brèves sous peine de bloquer le thread
principal
Un timer supervise une activité => arrêt forcé en cas de
non réponse de l’activité à l’issu de la période de test
Si une activité ne réagit pas suffisamment vite aux sollicitations de
Toute tâche complexe doit-être déléguée à un thread
l’utilisateur (en général le système tolère une latence d’environ 5
spécifique afin de préserver la réactivité du système
secondes), le système Android considère que l’expérience utilisateur est
dégradée et un dialogue vient autoriser l’utilisateur à quitter l’application
s’il le souhaite : le fameux dialogue ANR (Application Not Responding).

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Impact sur la définition des IHM


47

Modèle du thread unique de gestion de l’affichage :


UIThread => toutes les opérations attachées à l’activité
doivent être brèves sous peine de bloquer le thread
principal
Afin de ne pas être soumise à un défaut de réactivité, une application
comportant des opérations nécessitant des calculs importants et longs
doit déporter ces opérations longues sur des fil d’exécution (threads)
Un timer supervise une activité => arrêt forcé en cas de
tiers créés spécifiquement par le développeur de l’application. Ainsi, la
programmation parallèle/concurrente devient assez incontournable dans
non réponse de l’activité à l’issu de la période de test
une application Android.

Toute tâche complexe doit-être déléguée à un thread


spécifique afin de préserver la réactivité du système

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Impact sur la définition des IHM


47

Modèle du thread unique de gestion de l’affichage :


UIThread => toutes les opérations attachées à l’activité
doivent être brèves sous peine de bloquer le thread
principal
Un timer supervise une activité => arrêt forcé en cas de
non réponse de l’activité à l’issu de la période de test
Toute tâche complexe doit-être déléguée à un thread
spécifique afin de préserver la réactivité du système

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Interface Graphique
48

Framework : une structure hiérarchique faite de vues et


de conteneurs, mettant en œuvre le canevas de
programmation MVC (des styles sont applicables pour
modifier l’apparence des vues).
2 approches pour spécifier l’interface graphique :
une approche programmatique «classique» en Java
une approche basée sur une description XML
Le choix entre les 2 approches varie selon que
l’interface soit dynamique ou non. Il est fréquent de
mélanger les 2 approches
Interaction à travers des EventListener et par
redéfinition de «callbacks»
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Interface Graphique
Sans entrer dans les détails de conception et de mise en œuvre de
48
l’interface graphique d’une application Android, nous allons présenter
Framework : une structure hiérarchique faite de vues et
maintenant les principaux outils proposés par ce système pour cette
de conteneurs, mettant en œuvre le canevas de
tâche.

programmation MVC (des styles sont applicables pour


modifier l’apparence des vues).
2 approches pour spécifier l’interface graphique :
une approche programmatique «classique» en Java
une approche basée sur une description XML
Le choix entre les 2 approches varie selon que
l’interface soit dynamique ou non. Il est fréquent de
mélanger les 2 approches
Interaction à travers des EventListener et par
redéfinition de «callbacks»
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Interface Graphique
48

Framework : une structure hiérarchique faite de vues et


de conteneurs, mettant en œuvre le canevas de
programmation MVC (des styles sont applicables pour
Le modifier l’apparence
modèle de programmation Android desdes vues).
interfaces graphiques repose principalement sur la
mise en œuvre du patron de conception MVC qui est la bonne pratique la plus communément
2 approches pour spécifier l’interface graphique :
admise dans ce domaine. Popularisée depuis le milieu des années 80, avec des systèmes basés sur
le langage Smalltalk et également dans le système NeXT, ce patron de conception repose sur une
une approche programmatique «classique» en Java
idée assez simple. Il propose de séparer en 3 entités les éléments partie prenante de l’interface :
- M pour Model représente les données que l’on souhaite afficher à l’utilisateur. Ce modèle de
une approche basée sur une description XML
données peut avoir de très nombreuses formes (structure en mémoire centrale, collection d’objets,
base de données relationnelle…). Il représente les données gérées par la logique applicative on
parle aussi de logique métier. Et cette structuration est propre à l’application.
Le choix entre les 2 approches varie selon que
- V pour View représente le framework d’objet gérant l’affichage de certains types de données et
les interactions possibles avec l’utilisateur. Par exemple des boutons poussoir, des menus
l’interface soit dynamique ou non. Il est fréquent de
déroulants, des case à cocher… Ces objets sont généralement propres au système et garantissent
mélanger les 2 approches
une certaine uniformité permettant à l’utilisateur de bien comprendre ce qu’on lui présente à
l’écran et de savoir le manipuler par habitude.
- C pour Controler représente la logique de l’application qui va établir le lien entre les données du
Interaction à travers des EventListener et par
modèle et les vues qui les affichent. Et en sens inverse, les manipulations de l’utilisateur et les
modifications à reporter sur ces données.
redéfinition de «callbacks»
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Interface Graphique
48

Framework : une structure hiérarchique faite de vues et


de conteneurs, mettant en œuvre le canevas de
programmation MVC (des styles sont applicables pour
modifier l’apparence des vues).
Le patron de conception MVC a ceci de caractéristique c’est qu’il est généralement utilisé de
façon fractale dans la construction d’une interface graphique. C’est-à-dire qu’on le retrouve à
2 approches pour spécifier l’interface graphique :
différents niveaux de granularité de l’interface graphique. Ainsi, on peut avoir une mise en œuvre
du patron MVC pour gérer l’affichage d’une valeur booléenne avec une vue de type case à cocher.
une approche programmatique «classique» en Java
Mais on aura aussi un mise en œuvre plus globale du patron MVC mettant en jeu toute une scène
disposant des vues élémentaires mise en correspondance avec une structure de données complexe.
une approche basée sur une description XML
Le contrôleur global étant obtenu par une agrégation de contrôleurs élémentaires et édictant des
règles pour donner un tout cohérent à l’affichage et aux manipulations de l’utilisateur.
Le grand avantage de cette solution est de permettre au concepteur de l’application de séparer les
Le choix entre les 2 approches varie selon que
préoccupations, c’est-à-dire de faire en sorte que les données de l’application soient développées
l’interface soit dynamique ou non. Il est fréquent de
indépendamment de l’interface graphique et inversement que l’interface graphique puisse être
définie indépendamment des données métier. Ceci permet entre autre d’adapter l’affichage au
mélanger les 2 approches
contexte d’utilisation, indépendamment de la logique de l’application. Ainsi, il devient assez
facile de faire évoluer l’interface graphique sans toucher à la logique de l’application et
inversement.
Interaction à travers des EventListener et par
redéfinition de «callbacks»
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Interface Graphique
48

Framework : une structure hiérarchique faite de vues et


de conteneurs, mettant en œuvre le canevas de
En s’appuyant sur le patron de conception MVC, Android propose donc tout un ensemble de
programmation
classes MVC (des
Java prêtes à l’emploi (framework), styles
représentant sont
des objets applicables
graphiques permettant pour
d’afficher des données plus ou moins complexes à l’écran et permettant à l’utilisateur d’interagir
modifier
avec l’apparence
ces représentations. La structure de des vues).
ce framework est assez classique.

2 approches pour spécifier l’interface graphique :


une approche programmatique «classique» en Java
une approche basée sur une description XML
Le choix entre les 2 approches varie selon que
l’interface soit dynamique ou non. Il est fréquent de
mélanger les 2 approches
Interaction à travers des EventListener et par
redéfinition de «callbacks»
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Interface Graphique
48

Framework : une structure hiérarchique faite de vues et


de conteneurs, mettant en œuvre le canevas de
programmation MVC (des styles sont applicables pour
modifier l’apparence des vues).
2 approches pour spécifier l’interface graphique :
uneproposé
Android approche
2 approchesprogrammatique «classique»
principales pour mettre en place en Java
une interface graphique. Loin
d’être exclusives ces 2 approches sont en fait complémentaires.
une approche basée sur une description XML
Le choix entre les 2 approches varie selon que
l’interface soit dynamique ou non. Il est fréquent de
mélanger les 2 approches
Interaction à travers des EventListener et par
redéfinition de «callbacks»
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Interface Graphique
48

Framework : une structure hiérarchique faite de vues et


de conteneurs, mettant en œuvre le canevas de
programmation MVC (des styles sont applicables pour
modifier l’apparence des vues).
2 approches pour spécifier l’interface graphique :
une approche programmatique «classique» en Java
une approche
L’approche programmatiquebasée sur une
propose d’utiliser description
du code XMLgraphique,
Java pour décrire l’interface
en instanciant des vues graphiques directement à partir du framework et en construisant « à la
main » une arborescence de vues donnant la structure de l’interface graphique. Cette approche
Le choix entre les 2 approches varie selon que
est particulièrement adaptée à la génération automatique d’interfaces dynamiques.
l’interface soit dynamique ou non. Il est fréquent de
mélanger les 2 approches
Interaction à travers des EventListener et par
redéfinition de «callbacks»
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Interface Graphique
48

Framework : une structure hiérarchique faite de vues et


de conteneurs, mettant en œuvre le canevas de
programmation MVC (des styles sont applicables pour
modifier l’apparence des vues).
2 approches pour spécifier l’interface graphique :
une approche programmatique «classique» en Java
une approche basée sur une description XML
LeL’autre
choix approche repose sur une description statique de l’interface définie dans un fichier XML
entre les 2 approches varie selon que
qui à l’image de l’HTML dans une page Web décrit la structure arborescente de l’interface à
l’interface soit
afficher à l’écran. dynamique
Au chargement ou
de l’activité non.
ce fichier Il
XML est
est fréquent
chargé de
et analysé par le
système qui construit une sorte d’arborescence d’objet (comme de le DOM dans un navigateur),
mélanger lesnécessaire
sans qu’il ne soit 2 approches
pour le programmeur de coder cette structure en Java. L’intérêt de
cette seconde solution est que le fichier XML peut-être généré au moyen d’un constructeur
d’interface graphique sans jamais avoir besoin de coder. Ainsi la conception de l’interface peut
Interaction à travers des EventListener et par
être déléguée à une équipe de designers et non de dévelopeurs. Une fois encore, on voit la
grande proximité entre ce modèle de programmation et celui du monde Web.
redéfinition de «callbacks»
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Interface Graphique
48

Framework : une structure hiérarchique faite de vues et


de conteneurs, mettant en œuvre le canevas de
programmation MVC (des styles sont applicables pour
modifier l’apparence des vues).
2 approches pour spécifier l’interface graphique :
une approche programmatique «classique» en Java
une approche basée sur une description XML
Le choix entre les 2 approches varie selon que
l’interface soit dynamique ou non. Il est fréquent de
mélanger les 2 approches
Interaction à travers des EventListener et par
redéfinition de «callbacks»
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Spécification de l’IHM en XML


49

On récupère la référence d’un objet créé en XML par la


méthode findViewById() de la classe Activity.
Pour maintenir la correspondance entre le «monde Java»
et le «monde XML» le processus de compilation crée
une classe particulière : la classe R. La classe R est mise
à jour automatiquement par le SDK à chaque
modification des fichiers ressources.
Les interactions peuvent également être spécifiées à
partir des fichiers layout au moyen d'attributs
particuliers dans le XML : onClick, clickable,
longClickable, focusable…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Spécification de l’IHM en XML


49

On récupère la référence d’un objet créé en XML par la


méthode findViewById() de la classe Activity.
PourComme
maintenir la correspondance entre le «monde Java»
dans le cas de scripts Javascript dans le Web, il va être nécessaire pour les programmes
et le Java
«monde XML»entre
gérant les interactions le lesprocessus
vues disposées àde compilation
l’écran crée
et l’utilisateur (via l’interface
tactile) de repérer les objets définis dans la structure XML de la page. On va utiliser pour cela
une classe
une mécanismeparticulière
interne à Android:similaire
la classe
à ce queR . La
l’on classe
trouve R est
dans le Web, mise
en utilisant des
attributs d’identification et une méthode findViewById() qui jouera le même rôle que la
à jourfonction
automatiquement
document.getElementById() paren le SDK à chaque
javascript.
modification des fichiers ressources.
Les interactions peuvent également être spécifiées à
partir des fichiers layout au moyen d'attributs
particuliers dans le XML : onClick, clickable,
longClickable, focusable…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Spécification de l’IHM en XML


49

On récupère la référence d’un objet créé en XML par la


méthode findViewById() de la classe Activity.
Pour maintenir la correspondance entre le «monde Java»
et le «monde XML» le processus de compilation crée
une classe particulière : la classe R. La classe R est mise
à jour automatiquement par le SDK à chaque
modification des fichiers ressources.
Comme Java est un langage compilé, il faut mettre en œuvre une mécanique un peu complexe
Les interactions peuvent également être spécifiées à
pour permettra la gestion des ces identifiants. Ainsi, Android propose un mécanisme intégré au
processus de compilation, générant une classe « magique » : la classe R. Dans cette classe, le
partir des fichiers layout au moyen d'attributs
processus de compilation Android consigne une représentation des tous les attributs identifiants
particuliers dans le XML : , ,
(android:id) des descriptions XML qui sontonClick clickable
analysées. Ces identifiants permettent aux
programmes Java de retrouver les objets Java spécifiés indirectement dans les fichiers XMLs.
longClickable, focusable…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Spécification de l’IHM en XML


49

On récupère la référence d’un objet créé en XML par la


méthode findViewById() de la classe Activity.
Pour maintenir la correspondance entre le «monde Java»
et le «monde XML» le processus de compilation crée
une classe particulière : la classe R. La classe R est mise
à jour automatiquement par le SDK à chaque
modification des fichiers ressources.
Les interactions peuvent également être spécifiées à
Toujours de façon similaire à ce que l’on observe dans le monde du Web. Il est également
possible dans les fichiers XML de spécifier des comportements d’interaction avec l’utilisateur à
partir des
travers des fichiers
attributs layout au qui
comme android:onClick moyen
permet ded'attributs
désigner une méthode de l’objet
activité à appeler en cas de click de l’utilisateur sur la vue.
particuliers dans le XML : onClick, clickable,
longClickable, focusable…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Spécification de l’IHM en XML


49

On récupère la référence d’un objet créé en XML par la


méthode findViewById() de la classe Activity.
Pour maintenir la correspondance entre le «monde Java»
et le «monde XML» le processus de compilation crée
une classe particulière : la classe R. La classe R est mise
à jour automatiquement par le SDK à chaque
modification des fichiers ressources.
Les interactions peuvent également être spécifiées à
partir des fichiers layout au moyen d'attributs
particuliers dans le XML : onClick, clickable,
longClickable, focusable…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure de l’IHM graphique


50

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure de l’IHM graphique


50

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure de l’IHM graphique


50

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure de l’IHM graphique


50

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Structure de l’IHM graphique


50

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


51

Gestion par l’intermédiaire de Listeners (différentes


interfaces Java proposant l’implantation de «callbacks»)
Une gestion spécifique de l’interaction utilisateur
« l’objet physique » :
écran tactile -> masque l’écran pendant l’interaction
multi-points -> gestuelle (rendu mécanique)
utilisation et détournement des capteurs : proximité,
luminosité, accéléromètres, gyroscopes,
magnétomètres…
vibreur, diodes multicouleurs, flash led,
environnement sonore…
GPS, Camera, le NFC…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


51

Gestion par l’intermédiaire de Listeners (différentes


interfaces Java proposant l’implantation de «callbacks»)
La gestion des interactions est prise en compte par du code Java spécifique qui réagit à des
Une gestion spécifique de l’interaction utilisateur
événements système ; eux mêmes produits par des manipulations tactiles de l’utilisateur. Ce
code Java est implanté par le développeur de l’application dans des objets qui implantent des
« l’objet physique » :
callbacks (méthodes qui sont appelées par le UIThread) que l’on appelle en Java des listeners.
écran tactile -> masque l’écran pendant l’interaction
multi-points -> gestuelle (rendu mécanique)
utilisation et détournement des capteurs : proximité,
luminosité, accéléromètres, gyroscopes,
magnétomètres…
vibreur, diodes multicouleurs, flash led,
environnement sonore…
GPS, Camera, le NFC…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


51

Gestion par l’intermédiaire de Listeners (différentes


interfaces Java proposant l’implantation de «callbacks»)
Une gestion spécifique de l’interaction utilisateur
« l’objet physique » :
écran tactile -> masque l’écran pendant l’interaction
Mais les applications Android proposent également à l’utilisateur des expériences enrichies par
multi-points
la disponibilité -> mobiles
sur les terminaux gestuelle (rendu
de nombreux capteurs.mécanique)
Ces capteurs sont généralement
mis en œuvre dans les activités et renseignent l’application sur le contexte d’utilisation.
utilisation et détournement des capteurs : proximité,
luminosité, accéléromètres, gyroscopes,
magnétomètres…
vibreur, diodes multicouleurs, flash led,
environnement sonore…
GPS, Camera, le NFC…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


51

Gestion par l’intermédiaire de Listeners (différentes


interfaces Java proposant l’implantation de «callbacks»)
Outre les écrans tactiles avec plusieurs points de contact et la possibilité de gérer des gestuelles
à la surface de l’écran, l’interaction pourra être enrichie par l’utilisation des mesures d’un
accéléromètre, d’un gyroscope électronique, d’un capteur de proximité, d’un capteur de
Une gestion spécifique de l’interaction utilisateur
luminosité, d’un magnétomètre…
Toutes ces mesures sont accessibles à l’application (moyennant parfois la demande
« l’objet physique » :
d’autorisations) et permettent d’obtenir plus d’information sur le contexte d’utilisation. Là
encore, les mécanismes à base de Listeners sont utilisés dans la programmation.
écran tactile -> masque l’écran pendant l’interaction
multi-points -> gestuelle (rendu mécanique)
utilisation et détournement des capteurs : proximité,
luminosité, accéléromètres, gyroscopes,
magnétomètres…
vibreur, diodes multicouleurs, flash led,
environnement sonore…
GPS, Camera, le NFC…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


51

Gestion par l’intermédiaire de Listeners (différentes


interfaces Java proposant l’implantation de «callbacks»)
Une gestion spécifique de l’interaction utilisateur
« l’objet physique » :
écran tactile -> masque l’écran pendant l’interaction
multi-points -> gestuelle (rendu mécanique)
utilisation et détournement des capteurs : proximité,
luminosité, accéléromètres, gyroscopes,
magnétomètres…
vibreur, diodes multicouleurs, flash led,
environnement sonore…
GPS, Camera, le NFC…

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


52

Prise en compte au niveau du système (exemple la


rotation de l’IHM mode portrait - mode paysage)
Prise en compte spécifique dans l’application, accès aux
informations de capteurs et réaction par l’utilisation de
callbacks portées par des Listeners pré-enregistrés.
Nécessite parfois des autorisations particulières pour
accéder aux informations.
Renforcement du retour d’expérience par le biais
d’animations.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


52
Les capteurs interviennent dans la vie
Prise en compte au niveau du système (exemple la
de l’application à plusieurs niveaux.

rotation de l’IHM mode portrait - mode paysage)


Prise en compte spécifique dans l’application, accès aux
informations de capteurs et réaction par l’utilisation de
callbacks portées par des Listeners pré-enregistrés.
Nécessite parfois des autorisations particulières pour
accéder aux informations.
Renforcement du retour d’expérience par le biais
d’animations.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


52

Prise en compte au niveau du système (exemple la


rotation de l’IHM mode portrait - mode paysage)
En premier lieu, l’usage des capteurs peut-être directement pris en charge par le système lui-
Prise en compte spécifique dans l’application, accès aux
même. C’est par exemple le cas de l’accéléromètre qui est utilisé entre autres choses pour
détecter si un basculement de l’interface en mode portrait ou en mode paysage est nécessaire.
informations de capteurs et réaction par l’utilisation de
Dans ce cas le système gère entièrement la mesure de l’accéléromètre et la prise de décision. Et
le développeur gère l’impact de cette décision à travers la prise en compte dans la gestion du
callbacks portées par des Listeners pré-enregistrés.
cycle de vie de l’activité.

Nécessite parfois des autorisations particulières pour


accéder aux informations.
Renforcement du retour d’expérience par le biais
d’animations.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


52

Prise en compte au niveau du système (exemple la


rotation de l’IHM mode portrait - mode paysage)
Prise en compte spécifique dans l’application, accès aux
informations de capteurs et réaction par l’utilisation de
callbacks portées par des Listeners pré-enregistrés.
Mais l’application peut aussi utiliser les mesures de ces mêmes capteurs pour ses propres
Nécessite parfois des autorisations particulières pour
besoins. Toujours en prenant l’exemple de l’accéléromètre, une application peut utiliser cette
mesure pour déterminer l’inclinaison du téléphone vis à vis de la verticale et ainsi prendre en
accéder aux informations.
compte une interaction spécifique entre l’utilisateur et son application. Par exemple contrôler la
direction d’un véhicule dans un jeu en se basant sur l’inclinaison du téléphone. Dans ce cas,
Renforcement du retour d’expérience par le biais
l’application doit accéder aux mesures de l’accéléromètre et cela se fait au moyen d’un
mécanisme de listener (callback) enregistré après d’objets systèmes (sensors) produisant des
d’animations.
événements du genre «une nouvelle mesure est disponible». Les développeurs habitués la
programmation javascript ne seront pas trop dépaysés.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


52

Prise en compte au niveau du système (exemple la


rotation de l’IHM mode portrait - mode paysage)
Le système Android distingue les capteurs (sensors) réalisant des mesures de grandeurs
Prise en compte spécifique dans l’application, accès aux
physiques (accéléromètre, baromètre, gyroscope…) et d’autres types de « capteurs » produisant
des valeurs dont le sens n’est pas véritablement une mesure de grandeur physique comme par
informations de capteurs et réaction par l’utilisation de
exemple la localisation. Si les capteurs physiques ne réclament pas d’autorisation particulière,
les capteurs de plus haut niveau nécessitent souvent la déclaration d’autorisations pour pouvoir
callbacks portées par des Listeners pré-enregistrés.
être utilisés dans une application (APN, service de localisation…).

Nécessite parfois des autorisations particulières pour


accéder aux informations.
Renforcement du retour d’expérience par le biais
d’animations.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


52

Prise en compte au niveau du système (exemple la


rotation de l’IHM mode portrait - mode paysage)
Prise en compte spécifique dans l’application, accès aux
informations de capteurs et réaction par l’utilisation de
callbacks portées par des Listeners pré-enregistrés.
Nécessite parfois des autorisations particulières pour
En complément de l’utilisation de capteurs qui permettent d’enrichir l’expérience utilisateur par
des mécanismes d’interaction mécanique basés sur ces mesures (inclinaison, vitesse de rotation,
accéder aux informations.
secousses, lancé…), les applications peuvent renforcer la métaphore mécanique au moyen
d’animations de l’interface graphique produisant un rendu graphique prolongeant cette
métaphore mécanique (inertie, oscillations…)
Renforcement du retour d’expérience par le biais
d’animations.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Capteurs et interaction avec l’utilisateur


52

Prise en compte au niveau du système (exemple la


rotation de l’IHM mode portrait - mode paysage)
Prise en compte spécifique dans l’application, accès aux
informations de capteurs et réaction par l’utilisation de
callbacks portées par des Listeners pré-enregistrés.
Nécessite parfois des autorisations particulières pour
accéder aux informations.
Renforcement du retour d’expérience par le biais
d’animations.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53

Objets définissant des messages entre activités


(intentions). Au centre du mécanisme de navigation
entre activités. Un objet Intent comporte
principalement :
le nom du composant cible (optionnel)
la déclaration d’une action à réaliser
des données (optionnelles) et/ou leur type MIME sur
lesquels l’action doit porter
La catégorie de l’Intent pour différencier les
composants cibles
flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53
Nous allons donc ici présenter une notion fondamentale du système Android : les Intents. En
Objets définissant des messages entre activités
effet, cette notion est centrale dans le système Android et au cœur de la plupart des mécanismes
d’interopérabilité qui font la très grande force de ce système.
(intentions). Au centre du mécanisme de navigation
entre activités. Un objet Intent comporte
principalement :
le nom du composant cible (optionnel)
la déclaration d’une action à réaliser
des données (optionnelles) et/ou leur type MIME sur
lesquels l’action doit porter
La catégorie de l’Intent pour différencier les
composants cibles
flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53

Objets définissant des messages entre activités


(intentions). Au centre du mécanisme de navigation
entre activités. Un objet Intent comporte
principalement :
Un Intent comme son nom l’indique représente une « intention ». C’est à dire un
le nom du composant cible (optionnel)
message envoyé à un autre composant (système ou applicatif) capable de répondre
à cette intention. Comme un intent doit parvenir à n’importe quel type de
la déclaration d’une action à réaliser
composants (du système ou de n’importe qu’elle autre application), un intent doit
pouvoir passer facilement à travers la paroi isolant les processus entre eux
des données (optionnelles) et/ou leur type MIME sur
(isolation garantie par le noyau UNIX). Et c’est précisément la propriété dont sont
dotés les intents Android grâce en particulier aux mécanismes IPC des binders.
lesquels l’action doit porter
La catégorie de l’Intent pour différencier les
composants cibles
flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53

Objets définissant des messages entre activités


(intentions). Au centre du mécanisme de navigation
Lesentre activités.
intents sont des messages.Un objetqu’ils
Cela signifie véhiculentcomporte
Intent des informations structurées qui
principalement :
exhibent une intention de haut niveau. La structure de ce message est rapidement présentée ici.

le nom du composant cible (optionnel)


la déclaration d’une action à réaliser
des données (optionnelles) et/ou leur type MIME sur
lesquels l’action doit porter
La catégorie de l’Intent pour différencier les
composants cibles
flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53

Objets définissant des messages entre activités


Le(intentions).
premier élément permet Au centre
de spécifier du mécanisme
précisément de applicatif
la classe du composant navigation
que l’on
veut appeler. Si cette information est précisée, on parle d’intention explicite. Mais cette
entre n’est
information activités. UnSi objet
pas obligatoire. Intent
elle est absente, comporte
on parlera alors d’intention implicite car
c’est le système (avec le concours éventuel de l’utilisateur) qui trouvera le composant à utiliser
principalement
pour satisfaire cette intention. :

le nom du composant cible (optionnel)


la déclaration d’une action à réaliser
des données (optionnelles) et/ou leur type MIME sur
lesquels l’action doit porter
La catégorie de l’Intent pour différencier les
composants cibles
flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53

Objets définissant des messages entre activités


(intentions). Au centre du mécanisme de navigation
entre activités. Un objet Intent comporte
Une intention suppose généralement une action à réaliser et la description de cette action est
principalement
donc : de l’intent. Un certain nombre d’actions standard sont dors
l’objet d’un champs spécifique
et déjà définies par le système et peuvent être utilisées directement. Mais il est possible
le nom du composant cible (optionnel)
également pour des besoins applicatifs particuliers de définir ses propres actions.

la déclaration d’une action à réaliser


des données (optionnelles) et/ou leur type MIME sur
lesquels l’action doit porter
La catégorie de l’Intent pour différencier les
composants cibles
flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53

Objets définissant des messages entre activités


(intentions). Au centre du mécanisme de navigation
entre activités. Un objet Intent comporte
principalement :
le nom du composant cible (optionnel)
Une action portera généralement sur des types de données particuliers et la
la déclaration d’une action à réaliser
description du type de données sera l’objet d’un champ spécifique de l’intent.

des données (optionnelles) et/ou leur type MIME sur


lesquels l’action doit porter
La catégorie de l’Intent pour différencier les
composants cibles
flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53

Objets définissant des messages entre activités


(intentions). Au centre du mécanisme de navigation
entre activités. Un objet Intent comporte
principalement :
le nom du composant cible (optionnel)
Pour préciser parfois la nature du composant ou de l’action demandée, le système
la déclaration d’une action à réaliser
Android introduit également un champ spécifique de l’intent permettant de
préciser la catégorie de l’intention. Comme pour la plupart des champs d’un
des données (optionnelles) et/ou leur type MIME sur
intent, la catégorie est un champ optionnel, que l’on pourra remplir à l’aide de
définitions standard dans les APIs Android. Mais on pourra également pour des
lesquels l’action doit porter
raisons particulières à une application définir de nouvelles catégories.

La catégorie de l’Intent pour différencier les


composants cibles
flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53

Objets définissant des messages entre activités


(intentions). Au centre du mécanisme de navigation
entre activités. Un objet Intent comporte
principalement :
le nom du composant cible (optionnel)
la déclaration d’une action à réaliser
des données (optionnelles) et/ou leur type MIME sur
lesquels l’action doit porter
La catégorie de l’Intent pour différencier les
Enfin il existe d’autres champs et des drapeaux permettant de préciser les effets
composants
d’une cibles
intention et les données éventuelles associées à une intention.

flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

La clé de voute du système : Les Intents


53

Objets définissant des messages entre activités


(intentions). Au centre du mécanisme de navigation
entre activités. Un objet Intent comporte
principalement :
le nom du composant cible (optionnel)
la déclaration d’une action à réaliser
des données (optionnelles) et/ou leur type MIME sur
lesquels l’action doit porter
La catégorie de l’Intent pour différencier les
composants cibles
flags, extras...

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
54

Pas de communication directe, mais à travers des


« appels systèmes » (Context.startActivity()…)
2 modes d’utilisation :
explicite : désignant précisément le composant cible
implicite : recherche un composant cible potentiel à
partir des autres informations portées par l’Intent
Il est recommandé d’utiliser une
description précise pour ne pas surcharger
la recherche par le système.
Le composants cibles déclarent des Intents
filters dans le AndroidManifest.xml
pour savoir quels intents les déclenchent.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
54

Pas de communication directe, mais à travers des


« appels systèmes » (Context.startActivity()…)
Nous avons commencé à remarquer que les composants applicatifs étaient essentiellement
2 modes d’utilisation :
gérés par le système (création, cycle de vie…). Le dévelopeur ne construit donc jamais lui
explicite : désignant précisément le composant cible
même les objets associés à un composant. Il passe obligatoirement par des appels au
système Android comme startActivity(), etc. pour construire une nouvelle activité par
implicite : recherche un composant cible potentiel à
exemple. mais cet appel startActivity() prend un paramètre qui est un intent. Cette
intention décrit explicitement ou implicitement le composant que l’on souhaite créer et
partir des autres informations portées par l’
l’action que l’on souhaite lui voir exécuter. Intent

Il est recommandé d’utiliser une


description précise pour ne pas surcharger
la recherche par le système.
Le composants cibles déclarent des Intents
filters dans le AndroidManifest.xml
pour savoir quels intents les déclenchent.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
54

Pas de communication directe, mais à travers des


« appels systèmes » (Context.startActivity()…)
2 modes d’utilisation :
explicite : désignant précisément le composant cible
implicite : recherche un composant cible
Si l’intent est explicite, le système devra créer le composant à partir de
potentiel à
partir des
sa connaissance autres
de tous informations
les composants portées
installés sur le terminal (d’où par l’Intent
l’importance de la déclaration dans le fichier AndroidManifest.xml).

Il est recommandé d’utiliser une


description précise pour ne pas surcharger
la recherche par le système.
Le composants cibles déclarent des Intents
filters dans le AndroidManifest.xml
pour savoir quels intents les déclenchent.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
54

Pas de communication directe, mais à travers des


« appels systèmes » (Context.startActivity()…)
2 modes d’utilisation :
explicite : désignant précisément le composant cible
implicite : recherche un composant cible potentiel à
partir
Si l’intent des autres
est implicite, le systèmeinformations portées
devra inférer le composant à créer à par l’Intent
partir des différents champs de l’intent et toujours de sa connaissance de
Il est recommandé d’utiliser une
tous les composants installés.

description précise pour ne pas surcharger


la recherche par le système.
Le composants cibles déclarent des Intents
filters dans le AndroidManifest.xml
pour savoir quels intents les déclenchent.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
54

Pas de communication directe, mais à travers des


« appels systèmes » (Context.startActivity()…)
2 modes d’utilisation :
Pour faciliter la recherche du composant à exécuter en cas d’intent
explicite
implicite, : désignant
il est recommandé précisément
d’être « assez le composant cible
précis » dans les différents
implicite : recherche un composant cible potentiel à
paramètres de l’intent afin qu’il n’y ait pas trop de composants éligibles.
Par exemple un intent qui n’aurait qu’un champ action avec l’action
partir
standard des
ACTION_VIEW autres informations
seule risquerait
composants éligibles énorme.
portées
de conduire à une liste de par l’ Intent

Il est recommandé d’utiliser une


description précise pour ne pas surcharger
la recherche par le système.
Le composants cibles déclarent des Intents
filters dans le AndroidManifest.xml
pour savoir quels intents les déclenchent.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
54

Pas de communication directe, mais à travers des


« appels systèmes » (Context.startActivity()…)
2 modes d’utilisation :
explicite : désignant précisément le composant cible
implicite : recherche un composant cible potentiel à
partir des autres informations portées par l’Intent
Il est recommandé d’utiliser une
description précise pour ne pas surcharger
la Ilcomposants
recherche par
faut bien garder en le
mémoire système.
que le système génère une liste de
éligibles pour traiter l’intention mais que c’est l’utilisateur
qui choisit le composant dès que plusieurs sont éligibles. Une liste trop
Le composants cibles déclarent des Intents
grande rendrait ce mécanisme impraticable.

filters dans le AndroidManifest.xml


pour savoir quels intents les déclenchent.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
54

Pas de communication directe, mais à travers des


« appels systèmes » (Context.startActivity()…)
2 modes d’utilisation :
explicite : désignant précisément le composant cible
implicite : recherche un composant cible potentiel à
partir des autres informations portées par l’Intent
Il est recommandé d’utiliser une
description précise pour ne pas surcharger
la recherche par le système.
Le composants cibles déclarent des Intents
filters dans le AndroidManifest.xml
pour savoir quels intents les déclenchent.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
55

Déclaration type des « Intents-Filters »


<intent-filter>
<action android:name="com.example.project.SHOW_CURRENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="video/mpeg" android:scheme="http" …/>

</intent-filter>

Mécanisme de résolution du mode implicite :


Le runtime Android confronte l’Intent aux
déclarations d’Intent-Filter dans les fichiers
AndroidManifest.xml des différentes applications
La comparaison commence par résoudre l’action,
puis la catégorie, enfin le type de données ou une
URI
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
55
De fait pour fonctionner ce mécanisme nécessite qu’un composant
Déclaration type des « Intents-Filters »
applicatif qui peut-être éligible pour traiter une intention donnée se
déclare comme tel dans le fichier AndroidManifest.xml de
l’application. C’est le rôle des intent-filters.
<intent-filter>
<action android:name="com.example.project.SHOW_CURRENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="video/mpeg" android:scheme="http" …/>

</intent-filter>

Mécanisme de résolution du mode implicite :


Le runtime Android confronte l’Intent aux
déclarations d’Intent-Filter dans les fichiers
AndroidManifest.xml des différentes applications
La comparaison commence par résoudre l’action,
puis la catégorie, enfin le type de données ou une
URI
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
55

Déclaration type des « Intents-Filters »


<intent-filter>
<action android:name="com.example.project.SHOW_CURRENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="video/mpeg" android:scheme="http" …/>

</intent-filter> Les intent-filters sont déclarés par la balise éponyme qui précise la
valeur attendu des différents champs de l’intent. Ainsi, dans cet exemple
Mécanisme de résolution du mode implicite :
on décrit un intent-filter indiquant que le composant applicatif que l’on
est en train de décrire est capable de traiter des intentions, dont l’action
Le runtime Android confronte l’Intent aux
est l’action standard SHOW_CURRENT, la catégorie est la catégorie
standard par défaut et le type de données traitées sera décrit par le type
déclarations d’Intent-Filter dans les fichiers
MIME des données vidéos au format MPEG streamé à travers le
protocole HTTP.
AndroidManifest.xml des différentes applications
La comparaison commence par résoudre l’action,
puis la catégorie, enfin le type de données ou une
URI
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
55

Déclaration type des « Intents-Filters »


<intent-filter>
<action android:name="com.example.project.SHOW_CURRENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="video/mpeg" android:scheme="http" …/>

</intent-filter> Il devient évident dès lors que cet intent-filter soit une partie de la
déclaration d’un composant activité (puisqu’il faut afficher la vidéo) et
Mécanisme de résolution du mode implicite :
que cette activité comporte un lecteur générique de vidéos MPEG
streamées. Dans ces conditions, le système analysant le fichier
Le runtime Android confronte l’Intent aux
AndroidManifest.xml à l’installation de l’application, consignera dans
son PackageManager l’existence de cette activité capable d’afficher
déclarations d’Intent-Filter dans les fichiers
des vidéos MPEG. Si une intention est envoyé par un autre composant
pour afficher une vidéo MPEG streamée, ce composant sera éligible.
AndroidManifest.xml des différentes applications
La comparaison commence par résoudre l’action,
puis la catégorie, enfin le type de données ou une
URI
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Intents
55

Déclaration type des « Intents-Filters »


<intent-filter>
<action android:name="com.example.project.SHOW_CURRENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="video/mpeg" android:scheme="http" …/>

</intent-filter>

Mécanisme de résolution du mode implicite :


Le runtime Android confronte l’Intent aux
déclarations d’Intent-Filter dans les fichiers
AndroidManifest.xml des différentes applications
La comparaison commence par résoudre l’action,
puis la catégorie, enfin le type de données ou une
URI
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
On débute une tâche par le
réactivée
lancement par le sommet de la pile d’activités (sauf
d’une application,
généralement à partir du Home
paramètres contraire dans un intent)
(Launcher) du système Android.

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[
L’activité Home demande un
startActivity() sur l’activité
MAIN/LAUNCHER de
l’application Contacts
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
Au cours d’une tâche, chaque fois que l’utilisateur appuie sur le bouton home, la tâche courante est
interrompue et l’utilisateur peut démarrer une nouvelle tâche à partir d’une autre application. Il peut
revenir à la tâche qu’il a abandonné grâce au gestionnaire de tâches (qui est un nouveau bouton système 56
Android apparu avec la version 3 du système) soit en redémarrant l’application qui lui a donné naissance.
Une tâche Android est une pile d’activités qui démarre
Depuis la version 3, le système Android a essayé d’aligner la notion de tâche sur la notion d’application
« à la »iOS. Cela donne un repère clair. Cette évolution s’est accentuée avec la version 5.
avec le lancement d’une application et est gérée par une
Chaque fois qu’il revient dans une tâche il repart de l’activité à son sommet (la dernière activée).
Différentes instances d’une même activité (le même composant) peuvent-être utilisées dans la même
navigation linéaire entre les activités qui la constituent.
tâche ou même des tâches différentes. Grace au gestionnaire de tâches, il est possible par un glissé du
doigt de supprimer une tâche.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[
L’activité Home demande un
startActivity() sur l’activité
MAIN/LAUNCHER de
l’application Contacts
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[ Pour faciliter le suivi de l’évolution de l’empilement des activités dans une même tâche, nous afficheront
ici l’écran des tâches Android obtenu en appuyant sur le bouton du gestionnaire de tâches ajouté avec la
version 3 d’Android.
L’activité Home demande un
startActivity() sur l’activité
MAIN/LAUNCHER de
l’application Contacts
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)
Il faut bien comprendre que la notion de tâches est bien différente
de la notion d’application d’iOS.

[
Dans iOS, une application correspond à un processus UNIX lancé
depuis le lanceur d’application et tout ce fait dans ce processus. La
tâche et l’application coïncident.
Dans Android, si une tâche est lancée, au lancement d’une activité
dans le lanceur d’applications, l’empilement successif des activités
fait que l’on peut passer d’un processus UNIX à l’autre.
L’activité Home demande un Pour se rapprocher de la notion d’applications, Android limite les
startActivity() sur l’activité tâches à un point d’entrée par application. Même si l’application
MAIN/LAUNCHER de dispose de plusieurs point d’entrée, une seule tâche en cours est
l’application Contacts attachée à cette application.

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
L’utilisateur souhaite rajouter un
réactivée par le sommet
nouveau contactdeetla pile
clique sur led’activités (sauf
paramètres contraire dans un intent)
bouton idoine

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est
Une nouvelleactivée, une
activité est lancée
par un startActivity()
tâche est par défaut toujours
réactivée(probablement
par le sommet de la pile d’activités (sauf
grâce à un intent
explicite) pour demander la
paramètressaisiecontraire dans un intent)
d’un nouveau contact.

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
L’utilisateur clique pour ajouter
paramètres contraire dans un intent)
une photo

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
L’utilisateur clique pour ajouter
paramètres contraire dans un intent)
une photo

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche
L’activité est
«prise de vue»par
est défaut toujours
lancée (par intent implicite
réactivée par le sommet puisque
de laellepile
ne faitd’activités
pas partie de (sauf
la même application) avec un
paramètres contraire dans un intent)
startActivityForResult()

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
L’activité prise de vue est
réactivée par le sommet de la pile d’activités (sauf
empilée dans la tâche Android,
bien qu’elle ne fasse pas partie
paramètres contraire dans un intent)de l’application initiale.

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)
L’utilisateur valide la prise de vue

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
L’activité «prise de vue» termine (appel de sa
réactivée par le sommet de la pile
méthoded’activités (sauf
finish()) après avoir retourné un intent
contenant les données de la prise de vue effectuée
paramètres contraire dans un intent)
(appel de la méthode setResult())

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
La prise de vue n’ayant probablement pas une
réactivée par le sommet de
forme la l’activité
carrée, pile d’activités
«nouveau contact va(sauf
lancer
une nouvelle activité pour réaliser un recadrage de
paramètres contraire dans
l’image.un intent)

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, Après
uneavoir
tâche
choisi est par
l’activité de défaut toujours
recadrage, celle-ci est lancée par
réactivée par le sommetunde la pile d’activités (sauf
startActivityForResult()
paramètres contraire dansavec un intent)
un intent implicite.

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
L’utilisateur valide le recadrage, ce qui termine
réactivée par le sommet de lal’activité
pile d’activités
recadrage (sauf
(appel de sa méthode
finish()) après avoir retourné un intent
paramètres contraire dans uncontenant
intent) la photo recardée (setResult())

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
L’activité «recadrage» termine (appel de sa
réactivée par le sommet de la méthode
pile d’activités (sauf
finish()) après avoir retourné un intent
contenant les données de la prise de vue effectuée
paramètres contraire dans un intent)
(appel de la méthode setResult())

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Le tâches Android
56

Une tâche Android est une pile d’activités qui démarre


avec le lancement d’une application et est gérée par une
navigation linéaire entre les activités qui la constituent.
Lorsqu’elle est activée, une tâche est par défaut toujours
réactivée par le sommet de la pile d’activités (sauf
paramètres contraire dans un intent)

[
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Services
57

Ne comporte pas d’interface graphique et prend en


charge les traitements en tâche de fond. Attention reste
géré par le UIThread !
Perdure même si l’application n’est pas au premier plan
Peut recevoir des commandes à traiter via des Intents
Peut exposer une interface regroupant des méthodes
utilisables «à distance» (par d’autres processus).
déclaration par Android Interface Definition Language
(AIDL). Communication à travers les Binders. La liaison
au service est réalisée en utilisant un Intent. Une fois la
liaison effectuée on appelle directement les méthodes de
l’interface du service.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Services
Le deuxième grand type de composants 57
applicatifs Android est la notion de service.
Ne comporte pas d’interface graphique et prend en
charge les traitements en tâche de fond. Attention reste
géré par le UIThread !
Perdure même si l’application n’est pas au premier plan
Peut recevoir des commandes à traiter via des Intents
Peut exposer une interface regroupant des méthodes
utilisables «à distance» (par d’autres processus).
déclaration par Android Interface Definition Language
(AIDL). Communication à travers les Binders. La liaison
au service est réalisée en utilisant un Intent. Une fois la
liaison effectuée on appelle directement les méthodes de
l’interface du service.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Services
57

Ne comporte pas d’interface graphique et prend en


charge les traitements en tâche de fond. Attention reste
géré par le UIThread ! Dans une application, un Service gère des tâches
n’ayant aucune interaction directe avec l’utilisateur.
Perdure même si l’application n’est pas au premier plan En particulier des tâches dépourvues d’IHM
(téléchargement de fichiers, calculs longs sur des
données…)
Peut recevoir des commandes à traiter via des Intents
Peut exposer une interface regroupant des méthodes
utilisables «à distance» (par d’autres processus).
déclaration par Android Interface Definition Language
(AIDL). Communication à travers les Binders. La liaison
au service est réalisée en utilisant un Intent. Une fois la
liaison effectuée on appelle directement les méthodes de
l’interface du service.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Services
57

Ne comporte pas d’interface graphique et prend en


charge les traitements en tâche de fond. Attention reste
géré par le UIThread !
Perdure même si l’application n’est pas au premier plan
Peut recevoir Le
des commandes
rythme à traiter
du cycle de vie de ces composantsvia
est des Intents
donc assez différent de celui des activités. En effet, le
service devrait généralement perdurer même en
Peut exposer une interface regroupant des méthodes
l’absence d’intérêt pour l’utilisateur de l’application.
utilisables «à distance» (par d’autres processus).
déclaration par Android Interface Definition Language
(AIDL). Communication à travers les Binders. La liaison
au service est réalisée en utilisant un Intent. Une fois la
liaison effectuée on appelle directement les méthodes de
l’interface du service.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Services
57

NeIldémarrés
comporte
existe pas
2 types de services d’interface
dans graphique
le système Android, et prend en
les services dits
et les services liés. Chacun présentant une gestion de cycle de vie
charge les traitements
un peu différente. enreçoivent
Les services démarrés tâchedesdeintentions
fond.envoyées
Attention reste
par un appel système Android startService(). Les services liés nécessitent
géré parde le
une sorte UIThread
connexion ! l’appel système boundService().
préalable avec
Lorsque la connexion a lieu, l’appelant reçoit une référence sur l’objet
représentant le service et peut alors directement appeler des méthodes sur
Perdure même si l’application n’est pas au premier plan
cet objet, même si celui-ci ne s’exécute pas dans la même application.

Peut recevoir des commandes à traiter via des Intents


Peut exposer une interface regroupant des méthodes
utilisables «à distance» (par d’autres processus).
déclaration par Android Interface Definition Language
(AIDL). Communication à travers les Binders. La liaison
au service est réalisée en utilisant un Intent. Une fois la
liaison effectuée on appelle directement les méthodes de
l’interface du service.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Services
57

Ne comporte pas d’interface graphique et prend en


charge les traitements en tâche de fond. Attention reste
géré par le UIThread !
Perdure même si l’application n’est pas au premier plan
Peut recevoir des commandes à traiter via des Intents
Peut exposer une interface regroupant des méthodes
utilisables «à distance» (par d’autres processus).
déclaration par Android Interface Definition Language
(AIDL). Communication à travers les Binders. La liaison
au service est réalisée en utilisant un Intent. Une fois la
liaison effectuée on appelle directement les méthodes de
l’interface du service.
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Content Providers


58

Exposent des données mises à disposition par une


application sous la forme d’une ou plusieurs tables (la
mise en forme est à la charge du Provider)
Une table définit un type de donnée et chaque ligne une
instance de ce type de donnée
L’accès aux données exportées se fait par l’utilisation
d’un ContentResolver.
Accès via URI :
content://package_name_provider/type/id

requêtes : query, update, insert, delete

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Content Providers


Nous décrivons maintenant très rapidement les 58
ContentProvider. Il s’agit de composant très important dans
Exposent des données mises à disposition par une
l’interopérabilité d’Android. Ils permettent à une application
de partager des données structurées en une table et sur
application sous la forme d’une ou plusieurs tables (la
laquelle, il est possible de faire des requêtes similaires à ce
que l’on ferait en SQL. Exemple la base de contact Android.
mise en forme est à la charge du Provider)
Une table définit un type de donnée et chaque ligne une
instance de ce type de donnée
L’accès aux données exportées se fait par l’utilisation
d’un ContentResolver.
Accès via URI :
content://package_name_provider/type/id

requêtes : query, update, insert, delete

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Content Providers


58

Exposent des données mises à disposition par une


application sous la forme d’une ou plusieurs tables (la
mise en forme est à la charge du Provider)
Une table définit un type de donnée et chaque ligne une
instance de ce type de donnée
L’accès aux données exportées se fait par l’utilisation
d’un ContentResolver.
Accès via URI :
content://package_name_provider/type/id

requêtes : query, update, insert, delete

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Content Providers


59

La connexion entre ContentProvider et ContentResolver


se fait en utilisant le mécanisme des Binders.
Requêtes sur les données similaires à SQL
déclaration dans le manifest de l’application : balise
<provider>

Initialisation à la première utilisation onCreate()


Pas de callback particulière à la libération des ressources
-> gérer la sauvegarde des données après chaque requête

This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Broadcast Receivers


60

Implantation d’un abonnement au bus logiciel à message


du système Android. Sur ce bus, le système lui même,
ou d’autres applications diffusent des messages.
Les messages sont des Intents, diffusés par des « appels
systèmes » (Context.sendBroadcast(),
Context.sendOrderedBroadcast())

Déclaration dans le fichier AndroidManifest.xml


(élément avec Intent-Filters + permissions) ou de façon
programmatique : Context.registerReciever()
Le traitement de l’Intent par redéfinition de onRecieve()
Attention : géré par l’UIThread
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Broadcast Receivers


60
Le BoradcastReciever est un composant un peu particulier d’une
application car il ne gère pas un cycle de vie très complexe. Ce
Implantation d’un abonnement au bus logiciel à message
composant qui ne s’inscrit pas directement dans la logique de
du système Android. Sur ce bus, le système lui même,
l’application permet de se mettre à l’écoute de messages (des intents) et
réagit chaque fois qu’un tel message circule sur le bus logiciel Android
ou d’autres applications diffusent des messages.
en exécutant la méthode onRecieve(). Il est possible d’envoyer des
message sur le bus avec les appels sendBroadcast() et
sendOrderedBroadcast().
Les messages sont des Intents, diffusés par des « appels
systèmes » (Context.sendBroadcast(),
Context.sendOrderedBroadcast())

Déclaration dans le fichier AndroidManifest.xml


(élément avec Intent-Filters + permissions) ou de façon
programmatique : Context.registerReciever()
Le traitement de l’Intent par redéfinition de onRecieve()
Attention : géré par l’UIThread
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.
J.-F. Susini 06/02/2024

Les Broadcast Receivers


60

Implantation d’un abonnement au bus logiciel à message


du système Android. Sur ce bus, le système lui même,
ou d’autres applications diffusent des messages.
Les messages sont des Intents, diffusés par des « appels
systèmes » (Context.sendBroadcast(),
Context.sendOrderedBroadcast())

Déclaration dans le fichier AndroidManifest.xml


(élément avec Intent-Filters + permissions) ou de façon
programmatique : Context.registerReciever()
Le traitement de l’Intent par redéfinition de onRecieve()
Attention : géré par l’UIThread
This document is shared by Jean-Ferdy Susini according to terms described in the Creative Commons Attribution-ShareAlike 3.0 Unported License.

Vous aimerez peut-être aussi