✗ 2003: Démarrage d'une startup appelée Android Inc. à Palo Alto /CA, axée sur le
développement d'un système d'exploitation ouvert pour les smartphones.
✗ 2007: Open Handset Alliance est créé, un consortium d'entreprises s'intéressant au domaine mobile
(Google, Intel, IT, Qualcomm, Nvidia, Motorola, HTC, Samsung, etc.).
An Version An Version
2010 2.2 (yogourt glacé) 2014 5 (sucette)
2010 2.3 (pain d'épice) 2015 6 (guimauve)
2011 3.0 /3.1 /3.2 (nid d'abeille) 2016 7 (Nougat)
✗
Accélérateurs graphiques via OpenGL ES.
✗
Technologies de communication sans fil(Bluetooth, WiFi, NFC, GSM, CDMA, UMTS, LTE, etc.).
✗ Avec chaque version, Google publie le code source du projet via le projet Open Source
Android (AOSP).
https://source.android.com/
https://groups.google.com/d/forum/android-platform
✗ Tout le monde peut contribuer au projet grâce à l'outil de révision de code Gerrit, créé
par Google.
https://android-review.googlesource.com
✗ L'évolution du projet et les fonctionnalités qui seront disponibles dans une future version
d'Android sont contrôlées exclusivement par Google.
LICENCES
Apache et BSD permissifs, donnant aux fabricants la liberté de décider de publier ou non le code
source modifié (les licences permissives ne nécessitent que l'attribution de la paternité).
Certaines applications Google sont fermées (Google Play, Gmail, Google Maps, YouTube, etc.).
✗
✗
Ces applications sont disponibles dans un package appelé Google Mobile Services
(GMS), et pour les obtenir, il est nécessaire de certifier l'appareil (ACP).
CERTIFICATION
✗Pour que l'appareil puisse avoir le label Android etutiliser les Applications Google, il est
nécessaire de le certifier via le programme de compatibilité Android (ACP):
✗ Compatibility Test Suite (CTS): outil qui fournitun ensemble de tests unitaires à effectuer sur
l'appareil pour garantir sa compatibilité avec Android.
http://source.android.com/compatibility/
VERSIONS ALTERNATIVES D'ANDROID
✗
Android TV.
✗ Android Auto.
✗ Android Wear.
✗ Choses Android.
✗ CopperheadOS.
✗ Replicant.
ARCHITECTURE DU SYSTÈME GNU / LINUX
Application Application
Système
GNU /Linux
Bibliothèque Bibliothèque
Noyau Linux
Bootloader
Matériel
ARCHITECTURE DU SYSTÈME ANDROID
Plate-forme
Android Framework (services etAPI)
Noyau Linux
Bootloader
Matériel
Android embarqué
Code source
MACHINE DE DÉVELOPPEMENT
✗ Il est recommandé d'utiliser une machine 64 bits avec Ubuntu 14.04, car c'est la configuration utilisée ettestée par
Google, mais le système de construction (Build) doit fonctionner sur d'autres machines Linux ou MacOS
(installation native ou machine virtuelle).
✗ Une machine avec une bonne capacité de traitement, beaucoup de mémoire et d'espace disque (au
moins 200 Go pour une construction complète) est nécessaire.
https://source.android.com/setup/build/initializing
REPOSITOIRES (depôts) AOSP ET GIT
https://android.googlesource.com/
Embarqué Labworks
✗ repo peuvent être téléchargés à partir du site Web de Google comme suit:
✗Via un fichier XML ( manifest.xml) qui décrit tous les référentiels qui
composent AOSP, l'outil repo est capable de télécharger et de gérer une
version spécifique d'Android.
MANIFEST.XML
<project path ="developer /build" name ="platform /developer /build" groups ="developer" /><project path ="developer /demos" name ="platform
/developer /demos" groups ="developer" /><project path ="device /common" name ="device /common" groups ="pdk-cw-fs, pdk" /><project path ="device /generic /arm64"
name ="device /generic /arm64" groupes ="pdk" /><project path ="device /generic /car" name ="device /generic /car" groups ="pdk" />
...
TÉLÉCHARGER AOSP AVEC REPO
-b android-9.0.0_r22
✗La liste des branches et balises existantes est disponible sur le projet:
https://source.android.com/setup/start/build-numbers
AUTRES CONTRÔLES REPO
✗
repo diff( diff sur tous les dépôts Git).
✗ repo status
( vérifie l'état de tous les dépôtsGit).
✗
repo start
( crée une nouvelle branche dans AOSP).
✗
repo branches
( affiche les branches existantes).
✗ repo forall ( exécute une commande sur tous les référentiels Git).
✗ À travers les outils gitet repo, toutle monde peut contribuer au développement d'Android:
$ repo start<nom_branch>
Linaro fournitune arborescence alternative etmise à jour avec prise en charge d’un plus grand
✗
https://www.nxp.com/design/development-boards/i.mx-evaluation-and-
dev elopment-boards /android-os-for-i.mx-applications-processors:
IMXANDROID
https://developer.qualcomm.com/hardware/dragonboard
-410c/software
https://wiki.odroid.com/getting_started/os_installation_gui
de https://www.wandboard.org/downloads/
REPOSITORIES ANDROID (suite)
La source: https://android-developers.googleblog.com
RÉPERTOIRES: HARDWARE
✗ bootable/
image de partition de récupération.
✗ kernel/
fichiers de configuration et scripts de test du noyau.
✗ hardware /
définition de HAL et implémentation standard pour certains périphériques
matériels.
✗ device /
✗
dalvik /:code source de la machine virtuelle Dalvik.
✗
✗ packages/: Applications Android.
RÉPERTOIRES: OUTILS
✗
sdk /:Outils SDK (Software Development Kit).
✗
pdk /:Outils PDK (Platform Development Kit).
✗
development /,test/,platform_testing /,developpers /,tools/:outils de
développement, de testetde débogage.
✗
BUILD /:Fichiers et scripts de constructionAndroid.
✗
prebuilts/:
/:binaires précompilés, y compris les chaînes d'outils.
✗
compatibility /:code source du document de définition de compatibilité (CDD).
NAVIGUER DANS LE CODE SOURCE
✗ Comme il n'y a pas beaucoup de documentation sur AOSP, il est courant de devoir
parcourir le code source pour comprendre une certaine fonctionnalité Android.
✗ Pour cela, nous pouvons générer un fichier de projet AOSP et utiliser Android Studio pour
parcourir le code source Android.
Construire le système
CONSTRUIRE DES SYSTÈMES
Sous Linux, les deux principaux projets de systèmes de construction sont les
✗
performances dans les versions incrémentielles, eta été remplacé dans les dernières versions d'Android par le
✗ Dans le système de construction Soong, les règles de compilation des composants logiciels sont définies
dans les fichiers Blueprint ( Android.bp), qui ont une syntaxe de type JSON.
✗ Les fichiers Blueprint sont traités par l'outil Blueprint, qui produit un fichier avec une extension. ninja avec
toutes les règles de traitement des composants logiciels Android.
https://opensource.google.com/projects/blueprint
✗ Le fichier avec l'extension. ninja est traitépar l'outil Ninja, qui compilera tous les composants
logiciels et générera les images Android.
https://ninja-build.org/
CONSTRUIRE UN SYSTÈME SOONG (suite)
✗ Pour cette raison, un outil appelé kati est responsable de la conversion des fichiers
Android.mk dans les fichiers. ninja.
https://github.com/google/kati
✗ La tendance est que peu à peu les fichiers Android.mk sont convertis en Android.bp,
éliminant le besoin d'utiliser l'outil kati dans le système de construction Android.
CONSTRUIRE UN SYSTÈME SOONG (suite)
plan
Android.bp . ninja
kati
Android.mk . ninja
ENVSETUP.SH
✗ La commande la source est nécessaire pour garantir que les modifications sont appliquées au terminal
actuel de l'utilisateur.
ENVSETUP.SH (suite)
✗
lunch: sélectionne le produit et la variante de construction pour la compilation.
✗
croot: retourne au répertoire racine AOSP.
✗
godir: allez dans le répertoire contenant le fichier spécifié.
✗ cgrep: fichiers grep. c, .cpp et. H. jgrep: fichiers grep. Java. porter secours: fichiers
✗Un produit définit les caractéristiques matérielles (architecture, périphériques, etc.) et des logiciels
(configuration, applications, etc.) qui seront utilisés pour générer l'image d'Android.
✗La variante de build indique le type de build que vous souhaitez faire:
✗
TARGET_BUILD_VARIANT: construire une variante.
✗Ces variables peuvent être définies dans un fichier appelé buildspec.mk, qui
doit être stocké dans le répertoire racine AOSP (exemple dans build /
buildspec.mk.default).
$ lunch
$ lunch aosp_x86_64-fra
$ choosecombo
Les choix de type de construction sont:
1. release
2. debug
$ make
M$
$ m -j4
RÉPERTOIRE /
annuaire en dehors /.
✗Dans l'annuaire out /hôte /nous aurons les outils, les exécutables et
bibliothèques compilées pour l'hôte (ex: émulateur, mke2fs, etc).
Dans l'annuaire out /target /nous aurons les binaires compilés pour le
✗
cible.
$ make help
$ make clean
$ make clobber
$ make showcommands
AUTRES COMMANDES (suite)
$ mm
$ mmm <repertoire>
$ make snod
$ make vnod
RÉGLER UNE IMAGE
$ m -j4
et régénérer les images Android séparément (le résultat final est le même). Exemple:
✗Android dispose d'un émulateur d'appareil mobile, capable de fonctionner dans la machine hôte
et émuler le système généré.
✗Cet émulateur peut être compilé à l'aide des produits qui démarrent avec aosp ( aosp_arm,
aosp_x86, aosp_x86_64, etc).
✗Il est capable d'émuler l'interface utilisateur via le moniteur, le clavier et la souris.
✗Divers autres périphériques matériels et événements tels que les coordonnées GPS, réception de
SMS ou changement d'état de la batterie peuvent être émulés via une interface graphique ou via
une connexion telnet.
ÉMULATEUR (suite)
✗En interne, l'émulateur Android est une interface graphique développésur QEMU.
https://www.qemu.org/
$ emulator
ÉMULATEUR (suite)
ÉMULATEUR (suite)
LABORATOIRE
Android intégré
Architecture du systèmed'exploitation
ARCHITECTURE ANDROID
Plate-forme
Android Framework (services etAPI)
Noyau Linux
Bootloader
Matériel
MATÉRIEL
Plate-forme
Android Framework (services etAPI)
Noyau Linux
Bootloader
Matériel
MATÉRIEL TYPIQUE AVEC ANDROID
La source: http://www.opersys.com/
CPU
✗Le plus courant est de trouver Android sur les appareils architecturaux ARM avec un ou
plusieurs cœurs fonctionnant au-dessus de 1 GHz.
✗Les architectures comme x86 et MIPS sont également prises en charge par d'autres
les entreprises ou la communauté: https://www.android-x86.org/
https://www.mips.com/develop/android/
✗ Selon Google, un minimum de 416 Mo de RAM est requis (dépend de la taille de l'écran),
mais un système avec 1 Go est asseztypique.
Actuellement, sur les appareils Android, il est courant d'utiliser des technologies stockage en
✗ bloc au lieu de
la mémoire flash, comme les puces eMMC.
AUTRES CARACTÉRISTIQUES RECOMMANDÉES
✗ Écran tactile (spécification minimale définie par Google: 2,5 ", 426x320, 16 bits).
✗ Boutons de navigation (MENU, HOME, BACK). Les boutons peuvent également être émulés dans
le logiciel.
Plate-forme
Android Framework (services etAPI)
Noyau Linux
Bootloader
Matériel
BOOTLOADER
✗ Initialisez le matériel.
✗ Chargez et exécutez le système d'exploitation.
il dispose d'un terminal de commande pour l'exécution de différentes opérations, telles que la vérification
de la mémoire, le formatage flash etles routines de diagnostic matériel.
BOOTLOADER SUR ANDROID
✗ Aucune fonctionnalité spécifique n'est requise dans le chargeur de démarrage pour Android, à part la possibilité
✗ Étant donné que le chargeur de démarrage dépend entièrement du matériel, il n'y a pas de code
source du chargeur de démarrage dans AOSP.
✗ Une fonctionnalité normalement disponible dans les chargeurs de démarrage pour Android est la démarrage
rapide:
https://goo.gl/WYyd5
✗ O démarrage rapide est un protocole de communication avec le bootloader via USB, accessible via l'outil de
ligne de commande fastboot.
✗
Supprimer les partitions de périphérique.
$ fastboot -h
utilisation: démarrage rapide [<option>] <commande>
commandes:
mettre à jour <nom defichier>
Réfléchissez le périphérique à partirde update.zip. Définit l'emplacement
flashall flashé comme actif. Démarrage Flash, système, fournisseur et-si trouvé -
récupération. Si le périphérique prend en charge les emplacements,
l'emplacement sur lequel le flash a été flashé est défini comme actif. Les
images secondaires peuvent être flashées sur un emplacement inactif.
flash <partition> [<filename>] clignotantverrouillé Ecrivez un fichier sur une partitionflash. Verrouille l'appareil. Clignotant
empêche. Déverrouille l'appareil. Permet de flasher n'importe quelle
déverrouillage clignotant
partition sauf
Plate-forme
Android Framework (services etAPI)
Noyau Linux
Bootloader
Matériel
APERÇU DU KERNEL
Application Application
Bibliothèque C
Noyau Linux
Matériel
KERNEL LINUX S U R ANDROID
✗ Comme pour les distributions GNU /Linux, le noyau utilisé sur Android est modifié pour
répondre aux besoins du projet.
✗ Cependant, les changements dans le noyau sont si importants (des centaines de correctifs) que la couche
✗Pour le moment, la plupart des changements sont déjà intégrés dans la version
noyau officiel, étant possible d'exécuter un système Android avec un noyau principal.
LIANT
✗ Toutes les communications entre les applications, les services et HAL ont lieu via Binder. Sans cela, Android ne
fonctionne pas!
✗ Le classeur est exposé à l'utilisateur dans des fichiers sur /dev, étant accédé par des appels
ioctl().
Capteur
Application Un service
Directeur
Android Directeur
Un service
4 3 1 deux
✗ Ashmem (Anonymous Shared Memory) est un mécanisme de partage de mémoire entre les
processus utilisés surAndroid.
✗ Certaines lacunes du mécanisme standard de partage de mémoire Linux (POSIX SHM) comme la
fuite de ressources ont conduit à la création de cette nouvelle interface par Google.
✗ Par exemple, cette implémentation utilise un compteur de référence pour détruire les régions de
mémoire qui ne sont plus utilisées par aucun processus.
✗ À travers le fichier /dev /ashmem une application demande une région mémoire et la partage avec
d'autres processus via Binder.
WAKELOCKS
✗ L'idée est de mettre le CPU en mode veille chaque fois que possible:
✗ Lorsque le système est à court de mémoire, le noyau Linux exécute le Killer OOM (Out-of-Memory)
par défaut, qui tentera de tuer certains processus pour libérer de la mémoire.
✗ OOM Killer n'est pas prévisible etpourrait tuer un processus Android important. Pour
cette raison, Google a développé le Low Memory Killer.
S'il s'agit d'une version récente du noyau, les fonctionnalités de base d'Android
✗
S'il s'agit d'un noyau plus ancien, ou si vous voulez que toutsoit disponible
✗
les modifications apportées au noyau par Google, vous pouvez extraire les correctifs de l'arborescence
du noyau Google etles appliquer à votre noyau.
https://source.android.com/devices/architecture/kernel/android-common
SYSTÈMES DE FICHIERS
Plate-forme
Android Framework (services etAPI)
Noyau Linux
Bootloader
Matériel