Développement d’Application Android
Mr BELLO Daouda Adébayo
Ingénieur en développement d’application
1
Objectif du cours
➔ Comprendre l’architecture du système Android
➔Comprendre l’organisation d’une application
Android
➔ Développer et déployer des applications
natives Android
➔ Connaître les bonnes pratiques du
développement d’application Android
2
Référence
➢L’art du développement Android par Mark L.
Murphy
➢Professional NFC application development for
android by Vedat
➢https://fr.wikipedia.org/wiki/Android
➢Android developer : http://developer.android.com/
index.html
3
Contrainte
➢Tenir compte du matériel :
➢Un processeur faible; Une RAM limitée;
➢Plusieurs type de résolutions de l’écran;
➢Des coûts élevés de transferts de données;
➢Des connexions réseau moins stables;
➢Efficacité : optimiser votre code afin qu’il soit rapide et réactif.
La performance; La réactivité; La sécurité;La
transparence; 4
Pourquoi Android
Plusieurs langages :
Multi OS
5
Pourquoi Android
Plusieurs outils :
Déploiement facile (multi plateforme)
6
Historique et Définition
➢Android est un système d’exploitation OPEN SOURCE
pour terminaux mobiles (smartphones, PDA, tablet, …)
➢Conçu à la base par une startup (Android) et rachetée par
Google en 2005
➢Pour la promotion de ce système Google a fédéré autour
de lui une trentaine de partenaires réunis au sein de l’Open
Handset Alliance (OHA)
➢C’est aujourd’hui le système d’exploitation mobile le plus
utilisé à travers le monde
7
Version d’Android
8
Plateforme Android
Le système d’exploitation Android est basé sur
Linux. Au plus bas niveau de ce système se trouve
un noyau Linux destiné à la gestion du matériel
comme :
➢Drivers de ces terminaux,
➢La gestion de la mémoire,
➢La gestion des processus
➢L’accès au réseau
➢…
9
Plateforme et composante
10
Android pour tous
Développeurs :
◦ Pas besoin de licence
◦ Simple et intuitifs
◦ Modulables
Constructeurs :
◦ Tous les constructeurs peuvent utiliser Android
◦ Un ensemble de services sont déjà disponibles dans le
core
◦ API disponible pour les accès de bas niveau
11
Programmation en Android
Android n’est pas un langage de
programmation
Pour développer sous Android, il existe deux
possibilités :
◦ Développement native (Java ou Kotlin)
◦ Développement hybride
12
Programmation en Android
Sources Java (ou Kotlin) compilés pour une machine
virtuelle appelée «ART », amélioration de l’ancienne
machine « Dalvik » (versions 4.4).
Fichiers appelés ressources :
• format XML : interface, textes. . .
• format PNG : icônes, images. .
Manifeste = description du contenu du logiciel
• fichiers présents dans l’archive
• demandes d’autorisations
• signature des fichiers, durée de validité,
13
Programmation en Android
Tout cet ensemble est géré à l’aide d’un IDE (environnement
de développement) appelé Android Studio qui s’appuie sur
un ensemble logiciel (bibliothèques, outils) appelé SDK
Android
14
Android et Java
➢Le SDK Android est développé en Java Permet de
développer des applications avec un haut niveau
d’abstraction
➢Android a sa propre machine virtuelle (DVM)
➢Ne supporte pas toutes les fonctionnalités de la JRE
➢Une application Android ne peut pas s’exécuter sur
une machine virtuelle Java
➢Une application Java (native) ne peut pas
s’exécuter sous Android
➢Android dispose de sa propre machine virtuelle
15
Android et Kotlin
➢C’est un langage de programmation concurrent et
symbiotique de Java : un programme Kotlin est
compilé dans le même langage machine que Java, un
programme Kotlin peut utiliser les classes Java et
réciproquement. On peut mélanger des sources Java
et Kotlin dans une même application
➢Kotlin est promu par Google parce qu’il permet de
développer des programmes plus sains. Par
exemple, Kotlin oblige à valider chaque appel de
méthode sur des variables objets pouvant valoir null,
ce qui évite les NullPointerException.
16
Vérification des variables objet
En Java :
void getNomComplet(Personne p) {
return p.getPrenom()+" "+p.getNom();
}
private Personne p1 = getPersonne(); // retourne null
System...println(getNomComplet(p1)); // NullPointerException
En Kotlin :
fun getNomComplet(p: Personne): String {
return p.prenom+" "+p.nom
}
var p1: Personne = getPersonne() // retour null interdit
println(getNomComplet(p1)) // ne se compile pas
17
Android et développement hybride
Android supporte le développement hybride
◦ Titanium
◦ Phonegap
◦ Neomad
18
Dans ce cours
Framework et langage
◦ Android SDK
◦ Java
◦ XML
Outils
◦ Android Studio
19
L'environnement Android Studio
Depuis mi-2015, il faut utiliser Android Studio (IDE IntelliJ
●
ayant subi l'intégration de fonctionnalités de développement
Android).
20
Avantage d’Android Studio
● meilleur intégration du SDK dans Android Studio
● puissance de l'IDE IntelliJ
21
Inconvénient Android Stutio
● Lourdeur de l'IDE IntelliJ
● Moins d'outils standalone (gestion des émulateurs, du SDK)
● Obligation de s'habituer à un autre IDE
● Nouvelle architecture des répertoires
● Meilleur gestion des dépendances avec gradle
22
Android SDK
Outil de développement d’application Android
Fournit un environnement unifié permettant de
développer « facilement » des applications Android
Mise à jour automatique via le SDKManager Prise en
charge de toutes les versions d’Android Plusieurs Outils
et API
◦ Android xx
◦ Google API xx
◦ Outils d’administration, de débogage …
23
Installation de Android Stutio
24
SDK sur Androi Studio
25
Dossiers du SDK
Le gestionnaire installe plusieurs Go dans différents sous-
dossiers :
➢SDK Tools : indispensable, contient le gestionnaire,
➢SDK Platform-tools : indispensable, contient adb,
➢SDK Platform : indispensable, contient les librairies,
➢System images : pour créer des AVD,
➢Android Support : divers outils pour créer des applications,
➢Exemples et sources.
26
Compilation en Android
➢La compilation sous Android avec le plugin ADT
est automatisée.
➢Android SDK utilise aussi ANT pour automatiser la
compilation.
➢Android 2.2 Froyo intégre le compilateur JIT(Just
in Time compiler) stable.
27
Dalvik et ART
●[Dalvik] est le nom de la machine virtuelle open-source
utilisée sur les systèmes Android. Cette machine virtuelle
exécute des fichiers .dex, plus ramassés que les .class
classiques. Ce format évite par exemple la duplication des
String constantes. La machine virtuelle utilise elle-même
moins d'espace mémoire et l'adressage des constantes se
fait par un pointeur de 32 bits.
[Dalvik] n'est pas compatible avec une JVM du type Java SE
●
ou même Java ME. La librairie d'accès est donc redéfinie
entièrement par Google.
●A partir de Lollipop, Android dispose d'ART qui compile
l'application au moment du déploiement (Ahead-of-time
28
compilation).
Compilation en Android
29
Composante d’une application
Android
Les applications Android sont constitués de composants à
couplage
Les composantes sont liées par un Manifest qui décrit chacun
d’eux ainsi que les interactions entre elles.
30
31
Composante d’une application
Android
1. Activities : Couche de présentation de l’application;
2. Services : les composants qui tournent en arrière plan;
3. Content providers : Partage de contenus entre
applications;
4. Intents : Framework de communication interapplications.
5. Broadcast receivers : Consommateurs des messages
diffusés par les intents.
6. Widgets : Composant d’application visuels;
7. Notifications :Framework de notifications aux utilisateurs
32
Type de Projet Android
Il existe trois catégories de projets sous Android:
Application Android: Type primaire des applications
Android destiné à être executé directement sur un
terminal
Test Projects: Projet de test d’une application
Android
Library project: Projet de types librairies, equivalents à
une API exposant certaines fonctionnalités pouvant
être réutilisé par d’autres applications.
33
Type de Projet Android
1.Application de premier plan: c’est une application
qui est utilisable uniquement lorsqu’elle est visible et
mise en suspens lorqu’elle ne l’est pas;
2.Application d’arrière plan (Services): N’interagit
pas avec l’utilsateur, elle s’exécute en tâche de
fond.
3.Intermittente : c’est une application qui présente
une certaine interactivité mais effectue l’essentiel de
sa tâche en arrière plan. Ces applications notifient
l’utilisateur lorsque cela est nécessaire;
4.Widget : ces applications représentées sous forme
d’un widget de l’écran d’accueil;
34
Structure d’une application Android
35
Android Manifest
Chaque projet Android contient un fichier aux
format XML nommé manifeste
(AndroidManifest.xml).
Le manifeste permet de définir la structure et les
métadonnées d’une application, ses composants
et ses prérequis.
Il contient des balises pour chacun des
composants qui constituent l’application
(Activities, Services, Content Providers et
Broadcast Receivers)
36
Android Manifest
Le manifeste fournit aussi des attributs
permettant de spécifier les métadonnées d’une
application (Exemple son icône, son thème) .
Il contient également les paramètres de
sécurité, les tests unitaires et la définition des
prérequis matériels et de plateforme.
Le fichier manifeste (AndroidManifest.xml) se
trouve à la racine du projet.
37
Android Manifest
38
Activité (Activity)
Une activité décrit les actions que peuvent
effectuer un utilisateur. Elles sont
destinées à interagir avec l’utilisateur
Classe héritant de la classe Activity d’Android
Doit être déclarée dans le Manifest pour
être visible par le système
Ne peut être instanciée directement, cette
tache se fait par le système
Activity a = new Activity(); A ne pas faire !!!
L’instanciation d’une activité se fait par
les intentions
39
Activity: cycle de vie
Une bonne compréhension du cycle de vie de
l’Activity permet de garantir que votre
application satisfait respecte les bonnes
pratiques de développement Android.
1.L’état de chaque Activity est déterminé par sa
position dans la pile des Activities:
2.Active : Quand l’Activity est au sommet de la
pile;
3.En pause : Si l’Activity est visible sans avoir
le focus;
4.Arrêtée: Lorsque l’Activity n’est plus visible;
5.Inactive : Quand elle est tuée ou qu’elle n’est
pas démarrée;
40
Activity: cycle de vie
41
public class ExampleActivity extends
Activity {
@Override
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
// The activity is being created.
}
@Override
protected void onStart() {
super.onStart();
// The activity is about to become visible.
} 42
@Override
protected void onResume() {
super.onResume();
// The activity has become visible (it is now
"resumed").
}
@Override
protected void onPause() {
super.onPause();
Another activity is taking focus (this activity is
about to be
"paused").
}
}
43
Contexte (context)
➢Interface fournissant des informations globales sur
l’environnement de l’application:
➢C’est une classe abstraite implémentée par le système
Android
➢Il permet d’accéder aux principales ressources de l’application
➢Obtenir le contexte courant d’une application
➢Context c = getApplicationContext(): Contexte global de l’application
➢Context c = Activity.this / getContext(): Contexte d’une activité ou
➢un service
44
Resolution des Intents
Il existe deux principaux types d’intentions :
Explicite : Spécifie les composants qui
précisent la classe exacte qui doit être
exécutée (setComponant (nom) ou
setClass(context, class))
Implicite : Ne spécifie pas le composant mais
fournit assez d’informations permettant au
système de déterminer les composants
nécessaires correspondant à cette action.
45
Initialisations des Intents
Intent i = new Intent();
Intent i = new Intent(action:String)
Intent i = new Intent(action:String, uri:Uri)
Intent i = new Intent (context:Context,
class:Class<?>)
46
Les paramètres des Intents
Les intentions peuvent être utilisées pour
transiter des données entre deux activités
putExtra(nom:String, valeur:Object)
getxxxExtra(nom:String)
dépend du type de données: Int, String, StringArray
47
Action sur les Intents
addCategory(category: String)
setDataAndType(uri:Uri, mime:String)
48
Quelques valeurs prédéfinis
Actions
android.intent.action.CALL appel téléphonique
android.intent.action.EDIT affichage de données pour
édition par l’utilisateur
android.intent.action.MAIN activité principale d’une
application
android.intent.action.VIEW affichage de données
android.intent.action.WEB_SEARCH recherche sur le WEB
49
Quelques valeurs prédéfinis
Catégories
android.intent.category.DEFAULT activité
pouvant être lancée explicitement
android.intent.category.BROWSABLE
peut afficher une information
désignée par un lien
android.intent.category.LAUNCHER
activité proposée au lancement par
Android
android.intent.category.TAB activité
associée dans un onglet d’interface
(TabHost)
50
Lancement d’une activité Intent
Lancer explicitement une activité Intent
demarre = new Intent(context,
nomActiviteALancer.class);
startActivity(demarre);
51
Première application
52
Objectif
Création d’une application « HelloWorld » avec un assistant,
Tour du propriétaire,
Exécution de l’application,
Mise sous forme d’un paquet.
Android Studio contient un assistant de création d’applications
L’apparence change d’une version à l’autre du SDK.
53
Choix de la version
Chaque version d’Android, dénotée par son API level, ex: 25,
apporte des améliorations et supprime des dispositifs obsolètes
Toute application exige un certain niveau d’API :
Minimum SDK : il faut au moins cette API car on utilise certaines
classes et méthodes absentes des précédentes APIs,
Il y a aussi deux notions à connaître :
Target SDK : l’application sera testée et marchera
correctement jusqu’à ce niveau d’API,
Compile With : c’est le niveau maximal de fonctionnalités
qu’on se limite à employer. Si on fait appel à quelque chose de
plus récent que ce niveau, le logiciel ne se compilera pas.
54
55
Choix du type d’application
56
Points à configurer
L’assistant demande ensuite plusieurs informations :
Nom de l’application, ex : HelloWorld,
Nom de la classe principale : MainActivity,
Nom du layout de la classe principale : activity_main2,
Nom du layout du menu principal : menu_main.
Tout peut être renommé ultérieurement, voir refactor/rename.
Le package du logiciel a été défini dans le premier écran.
57
Noms des packages et classes
58
Résultat de l’assistant
L’assistant a créé de nombreux éléments visibles dans la
colonne de gauche de l’IDE :
manifests : description et liste des classes de l’application
java : les sources, rangés par paquetage,
res : ressources = fichiers XML et images de l’interface, il
y a des sous-dossiers :
layout : interfaces (disposition des vues sur les écrans)
menu : menus contextuels ou d’application
mipmap et drawable : images, icônes de l’interface
values : valeurs de configuration, textes. . .
Gradle scripts : c’est l’outil de compilation du projet.
59
60
Éditeur du manifeste
61