Vous êtes sur la page 1sur 39

DÉVELOPPEMENT DES APPLICATIONS

MOBILES

Android
Architecture

Badis Djamaa & Adnane Benaissa


EMP
2

AUJOURD'HUI

1. L’architecture d'Android

1. Développement d’applications pour Android

1. Environnement de développement
3

ANDROID ARCHITECTURE
4

ANDROID ARCHITECTURE #Linux kernel 1


Un noyau linux 2.6: Les points communs avec les noyaux

• Gestion de le mémoire,

• Gestion des processus,

• Gestion du matériel (écran clavier …),

• Gestion des capteurs (appareil photo, GPS, accéléromètre …),

• …
5

ANDROID ARCHITECTURE #Linux kernel 2


Un noyau linux 2.6: Les points spécifiques à Android

• Gestion de l'Energie,

• Mémoire partagée Android,

• Faible tueur de mémoire (low memory killer daemon, lmkd), deprecated

• Communication inter-processus,

• Et bien plus….
6

ANDROID ARCHITECTURE #Bibliothèques


• Des bibliothèques (C et C++),
• Framework Média,
• Webkit (Moteur de navigation),
• OpenGL (Moteurs graphiques),
• SQLite (Moteur de base de données relationnelle).
7

ANDROID ARCHITECTURE #La machine virtuelle

Une machine virtuelle java Dalvik (une JVM


par application) code spécifique Android

Pour Android version 5.0 (API 21) ou supérieur,


chaque application s'exécute dans son propre
processus et avec sa propre instance d'Android
Runtime (ART).
ART est écrit pour exécuter plusieurs machines
virtuelles sur des appareils à faible mémoire
8

ANDROID ARCHITECTURE #Framework des applications

• Des gestionnaires pour les applications


• Une API en java
• Gestion des fenêtres, des activités, des ressources
• API pour développement des programmes
9

ANDROID ARCHITECTURE #Applications


10

DÉVELOPPEMENT #Structure d’une application

Code Source
11

DÉVELOPPEMENT #Code source Java

o Un langage de programmation orienté


objets

o Une architecture Virtual Machine (JVM)

o Un ensemble d'API variées

o Un ensemble d'outils (le JDK)


12

DÉVELOPPEMENT #Code source KOTLIN (2017)


• KOTLIN permet d’écrire moins de code. Il est plus expressif, concis, extensible et
plus performant. Il facilite la programmation multi-plateforme.

• KOTLIN travaille cote a cote avec Java:

• On peut ajouter du code Kotlin dans un


projet existant
• On peut faire appel au code Java dans
Kotlin et l’inverse.
• On peut mélanger du code Kotlin et Java
dans une application sans limite.

• https://kotlinlang.org/
https://play.kotlinlang.org
13

DÉVELOPPEMENT #Code source OTHERS


• C++ peut être utilisé pour le développement d'applications Android à l'aide du kit de
développement natif Android (NDK).

• C # est assez similaire à Java et est donc idéal pour le développement


d'applications Android. Auparavant, C# dépendait du .NET Framework. Cependant,
ce problème a été traité par Xamarin. Désormais, les outils Xamarin Android peuvent
être utilisés pour écrire des applications Android natives et partager le code sur
plusieurs plates-formes.

• HTML, CSS, JavaScript : les applications Android peuvent être créées à l'aide de
HTML, CSS et JavaScript à l'aide du framework Adobe PhoneGap optimisé par
Apache Cordova.

• Dart est un langage de programmation open source qui alimente le framework


Flutter, qui obtient beaucoup de traction ces jours-ci en raison de sa capacité à
fournir une application belle et performante pour le Web, le bureau et le mobile en
moins de temps.
14

DÉVELOPPEMENT #Le manifeste de l'application


Le fichier AndroidManifest.xml déclare l'ensemble des éléments de l'application.

On peut modifier ce fichier pour déclarer les éléments de l’application, les


permissions, etc.
15

DÉVELOPPEMENT #Rubriques du fichier androidManifest


• Manifest
• Nom du paquetage
• Versions, SDK
• Application
• Nom
• Icône
• Eléments constituant
l’application (activités, services, )
• Permissions
• Accès aux capteurs
• Accès au réseau
• Accès à la téléphonie

• Instrumentation (pour les tests)


16

DÉVELOPPEMENT #Les ressources 1


• Ce sont des fichiers de ressources externes ne
contenant pas d'instructions de codage et qui sont
utilisés dans l’application tel que:

• des fichiers images JPEG et PNG, les fichiers


XML...;
• des chaînes de caractères, des styles (couleur,
dimensions).

• Toutes les ressources sont accessibles au travers de la


classe statique R, dés qu'elles sont déclarées dans le
fichier XML ou que le fichier associé est déposé dans le
répertoire adéquat.

• La classe R.java est générée automatiquement par


Android et permet à l’application (code source)
d’accéder aux ressources.
17

DÉVELOPPEMENT #Les ressources 2

Type Description
Dessin/image Type de fichiers images (PNG, JPG) ou des
(res/drawable) fichiers XML décrivant des formes
Mise en page ou Les fichiers XML qui représentent la
interface graphique disposition des vues (on abordera cet aspect,
(res/layout) qui est très vaste, dans la prochaine partie).

Menu Les fichiers XML pour pouvoir constituer des


(res/menu) menus.
Donnée brute Données diverses au format brut: musique
(res/raw) ou des fichiers HTML par exemple.
Différentes variables Des chaînes de caractères, des dimensions,
(res/values) des couleurs, etc.

https://developer.android.com/guide/topics/resources/providing-resources
DÉVELOPPEMENT #Un exemple d’application
18
19

PRODUCTION DE LOGICIEL #Build process


• Gradle est un moteur de production (build) fonctionnant sur
la plateforme Java. Il permet de construire des projets en
Java, Scala, Groovy voire C++.
• Gradle permet d'écrire des scripts de constructions (build)
en utilisant le langage Groovy
• The Gradle build system est conçu pour prendre en charge
des scénarios complexes lors de la création d'applications
Android tels que la Multi-distribution (même app pour
plusieurs clients) et Multi-apk (multiple apk pour différents
types d'appareils en réutilisant des parties du code.
• Gradle et le plugin Android vous aident à configurer les
aspects suivants de votre build:

Build types Product flavors Build variants

Manifests
Dependencies Signing
entries
20

PRODUCTION DE LOGICIEL #Gradle build files


Chaque fois que vous créez un projet dans Android Studio, Gradle génère automatiquement
les fichiers suivants:
• The Gradle settings file: settings.gradle, situé dans le
répertoire racine du projet, indique à Gradle, quels modules il
doit inclure lors de la création de l’application.
• The top-level build file: définit les configurations de build qui
s'appliquent à tous les modules de votre projet.
• The module-level build file: permet de configurer les
paramètres de build pour le module spécifique dans lequel il se
trouve tels que: additional build types and product flavors, and
override settings in the main/ app manifest or top-level
build.gradle file.
• Other Gradle Files: Le dossier Gradle Scripts contient d'autres
fichiers Gradle. La plupart du temps, vous n'aurez pas à les
modifier. gradle-wrapper.properties (Gradle Version),
gradle.properties (Project Properties), local.properties
(SDK Location)
21

PRODUCTION DE LOGICIEL #Outils


Android Asset Packaging Tool
dx tool

adb tool
22

PRODUCTION DE LOGICIEL #La machine virtuelle dalvik


(avant lollipop v 5.0)
L'utilitaire «dx» convertit plusieurs fichiers .class en classes.dex
• Le code d'octet Java est converti en bytecode DEX
• Les pools de constantes, chaînes, types et méthodes peuvent
être fusionnés.
• Économies importantes pour les chaînes, les types et les
méthodes dans plusieurs classes

Iceland

Globalement, L'empreinte mémoire d’une application a diminué d'environ 50% avec Dalvik
23

PRODUCTION DE LOGICIEL #Inconvénients de dalvik


• La maintenance des machines virtuelles coûte
cher
• L'interprèteur/JIT n'est tout simplement pas
efficace comme le code natif
• Refaire JIT à chaque exécution est un
gaspillage
• Les threads de maintenance nécessitent
beaucoup plus de cycles CPU
• Les cycles du processeur se traduisent par
des performances plus lentes
• une durée de vie de la batterie plus courte

• Le Garbage Collector (GC) Dalvik provoque


fréquemment des bloquages / pauses

• L'architecture de la machine virtuelle est de 32


bits uniquement
• Android suit iOS dans l'espace 64 bits

• JIT: Just In Time


PRODUCTION DE LOGICIEL #Android Runtime (ART) 24

(après Lollipop, V 5.0)

dexopt
.ODEX
• ART présente une compilation à l'avance (AOT),
qui peut améliorer les performances de dex2aot
l'application. (Executable and Linkable Format)
• Fichiers DEX en entrée et génère un exécutable
compilé pour le périphérique cible
• ART a également une vérification du temps
d'installation plus stricte que Dalvik.
• Amélioration du GC (Garbage Collector)
• Amélioration du développement et du débogage
• ART prend en charge plusieurs architectures
(x86, ARM / 64, MIPS)
• Le compilateur est une architecture en couches
25

ENVIRONNEMENT #Developer workflow basics


26

ENVIRONNEMENT #Android SDK et Android Studio

IDE de la plate-forme Android Outils et cadres de test étendus

Basé sur IntelliJ IDEA Outils Lint pour détecter les


performances, la convivialité, la
Outils clés de développement compatibilité des versions

Build flexible basé sur Gradle Modèles de code et intégration


GitHub
Un émulateur rapide et riche
en fonctionnalités Prise en charge de C ++ et NDK

Prise en charge intégrée de Google Cloud Platform, facilitant l'intégration de Google Cloud
Messaging et App Engine

https://developer.android.com/studio
27

ENVIRONNEMENT #OTHERS
28

ENVIRONNEMENT #Structure d’un projet

• java: Contient les fichiers source


• gen: Contient les fichiers générés
• res: Contient les ressources (images,
descriptions d’interfaces, valeurs)
• drawable-(h)(m)(l)dpi/ images dans
différentes résolutions
• layout/ GUI design général
• values/ valeurs des variables
• menu/ définition des menus

• AndroidManifest: Décrit les propriétés de


l’application
29

ENVIRONNEMENT #L’interface Android Studio


30

ENVIRONNEMENT #Synchronisation Gradle


• La synchronisation Gradle est une tâche Gradle qui examine toutes vos dépendances répertoriées
dans vos fichiers build.gradle et essaie de télécharger la version spécifiée.

• Elle nécessite une connexion Internet car elle télécharge généralement ces dépendances à partir
d'un emplacement distant. La synchronisation est requise lorsqu’une modification dans les fichiers
de configuration de génération du projet sont détectés.

• Pour synchroniser manuellement le projet, cliquez sur Synchroniser maintenant ou cliquez sur
Synchroniser le projet dans la barre de menus. Si Android Studio remarque des erreurs dans votre
configuration, par exemple, votre code source utilise des fonctionnalités d'API qui ne sont
disponibles qu'à un niveau d'API supérieur à votre version compileSdk, la fenêtre Messages
apparaît pour décrire le problème.
31

ENVIRONNEMENT #Synchronisation Gradle

• Si différentes ensembles sources contiennent différentes versions du même fichier, Gradle utilise
l'ordre de priorité suivant pour décider quel fichier il va utiliser:
variante de build > type de build > saveur du produit > ensemble de sources principal >
dépendances de la bibliothèque.

• Cela permet à Gradle d'utiliser des fichiers spécifiques à la variante de build (génération) que vous
essayez de créer tout en réutilisant les activités, la logique d'application et les ressources communes
aux autres versions de votre application.

• Lors de la fusion de plusieurs manifestes, Gradle utilise le même ordre de priorité, de sorte que
chaque variante de build puissent définir différents composants ou autorisations dans le manifeste
final
32

ENVIRONNEMENT #Modes de compilation (Build Type)


• Debug: L’application est automatiquement signée avec une clé de debug
connue. Le mode debug permet de déployer rapidement une application lors de la
phase de debug.

• Release: L’application n’est pas signée . Le mode release indique que l’on
souhaite diffuser l’application générée qui doit alors être signée avec une clé
privée.
33

ENVIRONNEMENT #Outils 1
Accessibles à partir d’une ligne de commande (fenêtre DOS)

• Adb: permet la connexion au terminal (smartphone ou simulateur) pour :

• Transférer des fichiers (push / pull)


• Travailler en ligne de commande unix (shell)
• Installer une application (install)
• Paramétrer le réseau (forward)
• Déboguer une application (logcat)

• dx: transforme le bytecode java en code Dalvik

• Apkbuilder: constitue un fichier .apk téléchargeable sur le terminal


34

ENVIRONNEMENT #outils 2 (Visionneuse de hiérarchie)


35

ENVIRONNEMENT #Android Emulateur 1


• Le SDK fournit un émulateur de périphérique Android
configurable:
• Version d’Android,
• dimension de l’écran,
• taille mémoire,
• support de périphériques,
• ...

• Une configuration pour cet émulateur se nomme un AVD


(Android Virtual Device).
36

ENVIRONNEMENT #Android Emulateur 2

L’émulateur est lent !


37

ENVIRONNEMENT #Debugging
Android Debug Bridge (ADB):
• Utilisé pour une grande variété de tâches de développement
• Lire à partir du fichier journal
• Afficher les périphériques Android disponibles (adb serveur localise les
émulateurs en analysant les ports impairs dans la plage 5555 à 5585).
• Installer des applications Android (fichiers .apk), dans le répertoire
'platform-tools' du répertoire principal de sdk pour Android.
ADB avec USB debugging:
• Doit être activer sur le téléphone pour utiliser les fonctionnalités du
développeur
• Dans l'écran principal des applications, sélectionnez Paramètres ->
Applications -> Développement -> Débogage USB (il doit être coché)
ADB avec Wi-Fi debugging:
https://developer.android.com/studio/command-line/adb#wireless
38

ENVIRONNEMENT #Bibliothèque Android Jetpack

• Jetpack est une suite de bibliothèques pour aider les développeurs à suivre
les meilleures pratiques, à réduire le code passe-partout et à écrire du code
qui fonctionne de manière cohérente sur les versions et les appareils
Android

https://developer.android.com/jetpack
39

Thank You

Ready for Your


Questions

Vous aimerez peut-être aussi