Vous êtes sur la page 1sur 112

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

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

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

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


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

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

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
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
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

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
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
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


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
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.
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
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

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
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

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
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

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
!"#$%&!
!

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

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
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
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

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


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

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

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é
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

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
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

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

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


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

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

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)
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
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

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.

Vous aimerez peut-être aussi