Introduction au développement Android
Introduction au développement Android
Arnaud Dieumegard
Xavier Crégut
<Pré[Link]@[Link]>
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 1 / 52
Développement Logiciel et Mobilité – Android
Introduction
Introduction
Architecture logicielle
Hello, World !
Composants d’Android
Bonnes pratiques
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 2 / 52
Développement Logiciel et Mobilité – Android
Introduction
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 3 / 52
Développement Logiciel et Mobilité – Android
Introduction
Qu’est ce qu’Android ?
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 4 / 52
Développement Logiciel et Mobilité – Android
Introduction
Quelques dates
I Octobre 2003, Création de Android Inc. par Andy Rubin, Rich Miner et al.
I Juillet 2005, Google acquiert Android, Inc.
I Novembre 2007, Open Handset Alliance constituée pour développer des standards ouverts
pour les appareils mobiles
I Octobre 2008, Android est disponible en open-source
I ...
I Décembre 2010 : Android 2.3.X - Gingerbread
I Février 2011 : Android 3.X - Honeycomb
I Octobre 2011 : Android 4.0.X (fusion 2.* et 3.*) - Ice Cream Sandwich
I Juillet 2012 : Android 4.1/2/3 - Jelly Bean
I Octobre 2013 : Android 4.4 - Kit Kat
I November 2014 : Android 5.0 - Lollipop
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 5 / 52
Développement Logiciel et Mobilité – Android
Introduction
Source : [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 6 / 52
Développement Logiciel et Mobilité – Android
Introduction
Source : [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 7 / 52
Développement Logiciel et Mobilité – Android
Introduction
Source : [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 8 / 52
Développement Logiciel et Mobilité – Android
Introduction
Le problème de la fragmentation
I ≈ 18000 terminaux différents
I Modèle de terminal
Source : [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 9 / 52
Développement Logiciel et Mobilité – Android
Introduction
Le problème de la fragmentation
I ≈ 18000 terminaux différents
I Format d’écran
Source : [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 9 / 52
Développement Logiciel et Mobilité – Android
Introduction
Principales caractéristiques
1. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 10 / 52
Développement Logiciel et Mobilité – Android
Introduction
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 11 / 52
Développement Logiciel et Mobilité – Android
Architecture logicielle
Introduction
Architecture logicielle
Hello, World !
Composants d’Android
Bonnes pratiques
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 12 / 52
Développement Logiciel et Mobilité – Android
Architecture logicielle
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 13 / 52
Développement Logiciel et Mobilité – Android
Architecture logicielle
Noyau Linux
I S’appuie sur le noyau linux 2.6 pour les services systèmes fondamentaux :
I gestion de la mémoire et des processus
I pile réseau
I pilotes des différents matériels
I sécurité
I Fournit une couche d’abstraction entre le matériel et le reste de la pile logicielle
I Des améliorations :
I alarmes
I ashmed : Android shared memory
I Binder : Corba-like IPC
I Power Management
I Logger
I ...
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 14 / 52
Développement Logiciel et Mobilité – Android
Architecture logicielle
Android Runtime
Bibliothèques (Librairies)
I Écrites en C/C++
I System C library : une libc standard (dérivée d’une version BSD)
I bibliothèque media : jouer et enregistrer du son et de la vidéo
I graphiques en 2D et 3D (OpenGL)
I FreeType : fontes bitmaps et vectorielles
I SQLite : base de données relationnelle puissante et légère (150kB, dans un fichier)
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 16 / 52
Développement Logiciel et Mobilité – Android
Architecture logicielle
Application framework
Les applications Android s’exécutent dans un canevas (framework) qui leur fournit des services
et des sous-systèmes :
I View system : composants graphiques riches et extensibles pour construire des interfaces
utilisateurs
I Content Providers : permettre à une application de partager et accéder aux données des
autres applications
I Resource Manager : fournit un accès aux ressources tels que les chaînes pour
l’internationalisation, les couleurs, la dispositions des vues, etc.
I Notification Manager : permet aux applications d’afficher les alertes dans la barre de status
I Activity Manager : gère le cycle de vie des applications et de ses constituants et fournit un
système de navigation arrière vers les applications (en fait les activités) précédentes.
I Mais aussi Telephony Manager, Location Manager...
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 17 / 52
Développement Logiciel et Mobilité – Android
Architecture logicielle
Applications
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 18 / 52
Développement Logiciel et Mobilité – Android
Architecture logicielle
Conséquences :
I être efficace ! (voir les aspects listés ci-dessus)
I être réactif (pour l’utilisateur final)
I s’attendre à ce que son application soit interrompue par une autre application (réception
d’un appel, etc.) ou par manque de ressources
I remettre l’application dans son état précédent quand elle redevient active
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 19 / 52
Développement Logiciel et Mobilité – Android
Hello, World !
Introduction
Architecture logicielle
Hello, World !
Composants d’Android
Bonnes pratiques
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 20 / 52
Développement Logiciel et Mobilité – Android
Hello, World !
Hello, World !
Principales étapes (après l’installation du SDK et la configuration d’Eclipse)
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 21 / 52
Développement Logiciel et Mobilité – Android
Hello, World !
Demo
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 22 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Introduction
Architecture logicielle
Hello, World !
Composants d’Android
Bonnes pratiques
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 23 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Composants principaux
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 24 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Activity
I Une activité correspond à un écran de l’application
I codé dans une seule classe qui hérite de [Link]
I affiche les composants graphiques (View)
I réagit aux événements de l’utilisateur
I Une application consiste en plusieurs écrans
I aller vers une nouvel écran = démarrer une nouvelle activité (la précédente passe en pause).
I une activité peut retourner un résultat à l’activité précédente (startActivityForResult)
I une activité peut passer des informations à l’activité suivante (Extras)
I toute activité doit être déclarée dans le manifeste ([Link]) principal
1 <application android:icon="@drawable/icon"android:label="@string/app_name">
2 <activity android:name=".MainActivity" android:label="@string/app_name">
3 <intent-filter>
4 <action android:name="[Link]" />
5 <category android:name="[Link]" />
6 </intent-filter>
7 </activity>
8 <activity
9 android:label="@string/about_title"
10 android:name="About"
11 />
12 </application>
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 25 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Gestionnaires d’événements :
I onCreate : initialiser l’activité
I onRestoreinstanceState : récupérer état de l’UI
I onRestart : charger les changements
I onStart : mise à jour UI
I onResume : reprendre ce qui a été interrompu
I onSaveInstanceState : sauver les changements de l’UI
I onPause : interrompre ce qui peut l’être
I onStop : arrêter ce qui reste et sauvegarder les
données
I onDestroy : nettoyer (threads, connexions BD)
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 26 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 27 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Composants élémentaires :
I Button
I ImageButton
I ImageView
I CheckBox
I EditText
I ProgressBar
I RadioButton
I TextView
I ...
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 28 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Voir [Link]
et [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 29 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 30 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 31 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 32 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 33 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 34 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 35 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 36 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Intent filter
Afin de déclarer qu’une activité est capable de répondre à telle ou telle demande, on doit
déclarer un filtre d’intention (Intent filter) dans le manifeste Android.
I Pour enregistrer notre application comme pouvant ouvrir une page web (répondre à l’action
VIEW sur une uri commençant par ”http”)
1 <activity android:name=".BrowserActivitiy"
2 android:label="@string/app_name">
3 <intent-filter>
4 <action android:name="[Link]" />
5 <category android:name="[Link]" />
6 <data android:scheme="http"/>
7 </intent-filter>
8 </activity>
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 37 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Services
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 38 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 39 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Content Provider
Exemples
I La base de données des contacts
I Le journal des appels
I La liste des contenus multimedias
I ...
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 42 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 43 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Handler
I Les Handler sont utilisés en Android pour effectuer des tâches en parallèle et pour pouvoir
modifier l’UI dans une tâche parallèle.
I Il est possible d’utiliser uniquement des threads MAIS sans impact sur l’affichage.
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 44 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Handler (Utilisation)
1 public class MyActivity extends Activity {
2 final int MSG_CALCUL = 1;
3 Runnable r = new Runnable(){
4 public void run(){
5 String messageString = "Calcul en cours";
6 Message msg = [Link](
7 MSG_CALCUL, (Object) messageString);
8 [Link](msg);
9 doLongCalculus();
10 }
11 };
12
13 final Handler mHandler = new Handler(){
14 public void handleMessage(Message msg){
15 if ([Link]==MSG_CALCUL){
16 [Link](getBaseContext(),
17 "Info:"+ (String)[Link],
18 Toast.LENGTH_LONG).show();
19 }
20 }
21 };
22
23 @Override public void onCreate(Bundle savedInstanceState) {
24 [Link](savedInstanceState);
25 setContentView([Link]);
26 new Thread(r).start();
27 }
28 }
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 45 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Autres aspects
I Notifications
I ContentResolver, Querying
I Permission : une activité doit déclarer les permissions dont elle a besoin
I les permissions sont présentées à l’utilisateur lors de l’installation de l’application
I exemple : accès internet, recevoir un SMS...
I on déclare les permissions dans [Link]
1 <manifest xmlns:android="[Link]
2 package="[Link]" >
3 <uses-permission android:name="[Link].RECEIVE_SMS" />
4 <permission android:name="[Link].DEADLY_ACTIVITY"
5 android:label="@string/permlab_deadlyActivity"
6 android:description="@string/permdesc_deadlyActivity"
7 android:permissionGroup="[Link]-group.COST_MONEY"
8 android:protectionLevel="dangerous" />
9 ...
10 </manifest>
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 46 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 47 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 48 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
Introduction
Architecture logicielle
Hello, World !
Composants d’Android
Bonnes pratiques
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 49 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Paresse
I Gourmandise
I Hostilité
I Arrogance
I Discrimination
2. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 50 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Paresse
I Le temps de réponse de votre application est important
I Ne faites pas ce que vous n’avez pas besoin de faire
I N’allouez pas de mémoire si vous pouvez l’éviter
I Toujours tenir l’utilisateur au courant de l’avancée du traitement (quand les informations arrivent,
les ajouter à la vue).
I Gourmandise
I Hostilité
I Arrogance
I Discrimination
2. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 50 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Paresse
I Gourmandise
I Utiliser les ressources système de manière responsable
I Ne pas mettre à jour les widgets de manière trop fréquente
I Ne pas mettre à jour la position (GPS) si ce n’est pas nécessaire
I Minimiser la duplication de données
I Laisser les utilisateurs gérer les mises à jour
I Minimiser les problèmes de concurrence pour l’accès aux ressources
I Hostilité
I Arrogance
I Discrimination
2. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 50 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Paresse
I Gourmandise
I Hostilité
I Ne combattez pas les utilisateurs
I L’expérience utilisateur doit être votre priorité maximale
I La navigation entre les éléments de l’application doit être intuitive
I Ne pas cacher la barre de status
I Le bouton "back" doit toujours revenir à l’écran précédent
I Ne pas utiliser le bouton "menu" pour d’autres utilisations
I Demander l’autorisation avant de transmettre des informations
I Arrogance
I Discrimination
2. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 50 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Paresse
I Gourmandise
I Hostilité
I Arrogance
I Ne combattez pas le système
I N’utilisez pas d’API non documentée
I Respectez le cycle de vie d’une application
I Supportez les modes portrait et paysage
I Ne désactivez pas la gestion de la rotation de l’écran
I Discrimination
2. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 50 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Paresse
I Gourmandise
I Hostilité
I Arrogance
I Discrimination
I Concevoir pour tout le monde
I Ne pas faire de suppositions à propos de la taille de l’écran
I Disposer les éléments des vues relativement les uns par rapport aux autres
I Si on cherche à utiliser une fonctionnalité, vérifier qu’elle existe bien (GPS...)
2. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 50 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Beauté
I Générosité
I Ubiquité
I Utilité
I Soyez Épique (Voire même légendaire)
3. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 51 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Beauté
I Le design est une affaire de designers
I Le design d’une application est d’une importance capitale
I Attention à la résolution d’écran
I Générosité
I Ubiquité
I Utilité
I Soyez Épique (Voire même légendaire)
3. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 51 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Beauté
I Générosité
I Partagez vos fonctionnalités
I Utilisez les fonctionnalités proposées par d’autres
I Utilisez des intentions (Intents) pour interagir avec d’autres applications
I Définissez des filtres d’intentions (Intent Filters) pour partager vos fonctionnalités
I Ubiquité
I Utilité
I Soyez Épique (Voire même légendaire)
3. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 51 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Beauté
I Générosité
I Ubiquité
I Votre application est plus qu’une icône
I Créez des widgets !
I Créez des notifications
I Ajoutez des résultats de recherche dans la recherche rapide
I Utilité
I Soyez Épique (Voire même légendaire)
3. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 51 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Beauté
I Générosité
I Ubiquité
I Utilité
I Soyez utile/intéressant
I Créez une application qui résout un problème
I Présentez les informations de la manière la plus utile possible
I Soyez Épique (Voire même légendaire)
3. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 51 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I Beauté
I Générosité
I Ubiquité
I Utilité
I Soyez Épique (Voire même légendaire)
I Ne vous contentez pas de quelque chose de bien
I Créez des solutions uniques
I Inventez de nouveaux paradigmes
I Utilisez au mieux le matériel
3. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 51 / 52
Développement Logiciel et Mobilité – Android
Bonnes pratiques
I [Link]
I [Link]
[Link]/fr//events/developerday/2010/slides/
[Link]
I [Link]
I Videos : [Link]
I Ressources des Google Developer Days
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 52 / 52