0% ont trouvé ce document utile (0 vote)
28 vues63 pages

Introduction au développement Android

Le document présente le développement logiciel sur la plateforme Android, une pile logicielle open-source pour les appareils mobiles. Il décrit l'architecture d'Android, ses composants principaux, et les bonnes pratiques pour le développement d'applications. Le document souligne également les défis tels que la fragmentation des appareils et l'importance de cibler le bon public lors du développement.

Transféré par

Yasmina Abou-el-abbas
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
28 vues63 pages

Introduction au développement Android

Le document présente le développement logiciel sur la plateforme Android, une pile logicielle open-source pour les appareils mobiles. Il décrit l'architecture d'Android, ses composants principaux, et les bonnes pratiques pour le développement d'applications. Le document souligne également les défis tels que la fragmentation des appareils et l'importance de cibler le bon public lors du développement.

Transféré par

Yasmina Abou-el-abbas
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Développement Logiciel et Mobilité – Android

Développement Logiciel et Mobilité



Android

Arnaud Dieumegard
Xavier Crégut
<Pré[Link]@[Link]>

Département Télécommunications & Réseaux


ENSEEIHT

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

Android : une plateforme ouverte pour le développement mobile


Extrait de [Link] :
Android is an open-source software stack for mobile devices, and a corresponding open-source
project led by Google. We created Android in response to our own experiences launching mobile
apps. We wanted to make sure that there was no central point of failure, so that no industry player
can restrict or control the innovations of any other. That’s why we created Android, and made its
source code open.

[Link] : actuellement 84 entreprises qui visent à développer des


standards ouverts pour les appareils mobiles incluant :
I des fabricants d’appareils : Motorola, HTC, etc.
I des entreprises de semi-conducteurs : ARM, Freescale, Gemalto, Intel...
I des entreprises de développement logiciel : Google, eBay,
I des entreprises de commercialisation : Wind River, etc.
Android est en fait la combinaison de trois composants :
I un système d’exploitation gratuit et open-source pour les appareils mobiles
I une plateforme de développement open-source pour créer des applications mobiles
I des appareils (en particulier téléphones) qui exécutent le système d’exploitation Android et les
applications créées pour lui

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 ?

I Une plateforme logicielle ouverte pour le développement d’application mobiles


I Une pile complète :
I Système d’exploitation
I Middleware
I Applications
I S’appuie sur le système d’exploitation Linux
I Développement rapide d’application en Java
I En open-source sous une licence Apache 2.

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

Versions d’Android utilisées

I Les dernières versions ne sont pas les plus utilisées


Bien cibler le public de l’application
Dernière version d’Android = Plus de fonctionnalités MAIS Moins d’utilisateurs

Source : [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 6 / 52
Développement Logiciel et Mobilité – Android
Introduction

Types d’écrans sur les terminaux

Source : [Link]

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 7 / 52
Développement Logiciel et Mobilité – Android
Introduction

Résolutions d’écrans sur les terminaux

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

I canevas d’application (application framework) qui permet de réutiliser des composants et


de les remplacer
I DalvikVM, une machine virtuelle optimisée pour les appareils mobiles
I un navigateur Web basé sur le moteur WebKit 1 . Android 4.4 a désormais un nouveau
navigateur Web basé sur Chromium.
I SQLite : une base de donnée relationnelle
I le support des formats image, audio et vidéo courants (mp3, jpeg, avi, . . . )
I téléphonie (GSM)
I Bluetooth, EDGE, 3G, 4G, Wifi
I Camera, GPS, boussole, accéléromètre, ...
I un environnement de développement riche

1. [Link]
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 10 / 52
Développement Logiciel et Mobilité – Android
Introduction

Android SDK : Le Kit de Développement Android

I Les API Android : le cœur du SDK.


I Les outils de développement pour compiler et déboguer les applications
I Les émulateurs Android : émulateurs d’un appareil Android qui s’exécute dans un appareil
virtuel, AVD (Android Virtual Device).
I Une documentation complète
I Des exemples de code
I Support en ligne : [Link]

Il existe aussi un plugin pour Eclipse (ADT plugin) !

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

Architecture d’Android : pile 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

La machine virtuelle Dalvik


I fournit l’environnement sur lequel toute application Android s’exécute
I chaque application s’exécute dans son process, dans sa propre instance de la VM Dalvik
I Dalvik est conçue pour exécuter efficacement plusieurs VM
I utilise un format différent de la JVM : format .dex (plus compact)
dx : transformer les .class en .dex (Dalvik EXecutable)
I s’appuie sur le noyau linux pour les threads et la gestion de la mémoire bas niveau
Core libraries : fournit les fonctionnalités disponibles pour les bibliothèques Java :
I structures de données
I accès aux fichiers
I réseaux
I graphique
I ...
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 15 / 52
Développement Logiciel et Mobilité – Android
Architecture logicielle

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

I Android fournit un ensemble d’applications de base :


I Client de messagerie
I Application pour les SMS
I Navigateur Web
I Calendrier
I Gestion des contacts
I ...
I Les applications sont généralement développées en Java
Remarque : possibilité de développement natif avec NDK.
I Même les applications de base peuvent être remplacées

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 18 / 52
Développement Logiciel et Mobilité – Android
Architecture logicielle

Caractéristiques des appareils mobiles (par rapport aux ordinateurs)

I faible puissance de calcul -


I mémoire vive (RAM) limitée -
I capacité de stockage permanent limitée –
I petits écrans avec des résolutions limités –
I coût élevé des transferts de données +
I transferts de données lents avec une grande latence ++
I connexions de données non fiables ++
I quantité d’énergie limitée (batteries) ++

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)

1. Créer un Android Project


2. Renseigner les informations demandées : Nom de l’application, paquetage, nom de
l’activité principale, version des API visée, etc.
3. Lancer l’émulateur (AVD) : il suffit de le faire une seule fois
4. Exécuter l’application en faisant : Run As / Android Application

Regarder les éléments du projet


I Les ressources : res/ et la classe R engendrée automatiquement
I values : externaliser les valeurs : strings, colors, styles
I drawable (avec différentes densités)
I layout : description des vues des interfaces utilisateurs
I raw : fichiers binaires (son, etc.)
I Le fichier de manifest : [Link]
I src/ pour les sources Java
I gen/ pour ce qui est engendré automatiquement, en particulier [Link]
Tous les éléments d’une application sont regroupés dans un paquet Android (.apk)

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

I Activity : composant d’interface utilisateur qui correspond à un écran/un affichage


I Service : tâche de fond sans interface utilisateur
I possibilité de se connecter à un service (bind)
I Content Provider : composant qui permet à une application de partager ses données avec
d’autres
I Handler : permet la communication entre threads notament pour la modification de
l’affichage
I Broadcast Receiver : composant qui répond aux intentions diffusées (Broadcast Intent)
I Widget : composants visuel d’une application qui peut être placé sur l’écran d’accueil
(home screen)
I Notifications : avertir l’utilisateur sans interrompre l’activité en cours ni voler le focus
(barre de notifications, allumer les lumières, faire vibrer l’appareil, etc.)

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

Cycle de vie d’une Activity (Complet)

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

Construire l’interface utilisateur

Composants élémentaires :
I Button
I ImageButton
I ImageView
I CheckBox
I EditText
I ProgressBar
I RadioButton
I TextView
I ...

L’interface graphique peut être définie de manière déclarative en XML


(res/layout/mon_layout.xml), graphiquement grâce à l’éditeur ou par programmation.

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 28 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Les conteneurs (ViewGroup)

Voir [Link]
et [Link]

Ce sont des sous-classes de ViewGroup.


I LinearLayout : placement des éléments les uns à côté des autres (verticalement ou
horizontalement).
I TableLayout : Organisation sous forme de table.
I contient des TableRow
I chaque TableRow peut contenir des View (placées horizontalement)
I On peut omettre le TableRow si une ligne ne contient qu’un seul élément
I RelativeLayout : Permet un positionnement relatif des éléments
Il y en a d’autres :
I Gallery, Gridview, ListView, ScrollView, WebView, etc.

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

Définition d’une vue (par programmation)


Programmation [Link]

1 public class Main extends Activity {


2 @Override public void
3 onCreate(Bundle savedInstanceState) {
4 [Link](savedInstanceState);
5
6 LinearLayout main = new LinearLayout(this);
7 [Link]([Link]);
8 TextView te = new TextView(this);
9 [Link](getString([Link]));
10 [Link](te);
11 Button go = new Button(this);
12 [Link](getString([Link].go_label));
13 [Link](go);
14
15 setContentView(main);
16 }
17 }

1 <?xml version="1.0" encoding="utf-8"?>


2 <resources>
3 <string name="hello">Hello World, Main!</string>
4 <string name="app_name">Linear Layout</string>
5 <string name="go_label">Go</string>
6 <string name="go_label_clic">Gone</string>
7 <string name="exit_label">Exit</string>
8 </resources>

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 31 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Définition d’une vue (par déclaration dans les ressource)


Déclarative XML [Link]

1 <?xml version="1.0" encoding="utf-8"?>


2 <LinearLayout xmlns:android=
3 "[Link]
4 android:orientation="vertical"
5 android:layout_width="fill_parent"
6 android:layout_height="fill_parent">
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello"
11 />
12 <Button
13 android:id="@+id/go_button_id"
14 android:layout_width="wrap_content"
15 android:layout_height="wrap_content"
16 android:text="@string/go_label"
17 />
18 </LinearLayout>

1 public class MainActivity extends Activity {


2
3 @Override public void onCreate(Bundle savedInstanceState) {
4 [Link](savedInstanceState);
5 // Charger le layout [Link]
6 setContentView([Link]);
7 }
8 }

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 32 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Définir une réaction


1 public class MainActivity extends Activity implements OnClickListener {
2
3 @Override public void onCreate(Bundle savedInstanceState) {
4 [Link](savedInstanceState);
5 setContentView([Link]);
6
7 Button go_button = (Button) findViewById([Link].go_button_id);
8 go_button.setOnClickListener(this);
9 Button exit_button = (Button) findViewById([Link].exit_button_id);
10 exit_button.setOnClickListener(this);
11 }
12 public void onClick(View v) {
13 switch ([Link]()) {
14 case [Link].go_button_id:
15 Button go_button = (Button) findViewById([Link].go_button_id);
16 go_button.setText([Link].go_label_clic);
17 break;
18 case [Link].exit_button_id:
19 finish(); // Terminer l’activité
20 break;
21 }
22 }
23 }

I faire des méthodes privées pour limiter le code dans onClick()


I on peut faire un listener par bouton (ou élément)
I on peut utiliser des classes anonymes

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 33 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Intent : Intention de lancer une nouvelle activité

Les Intents peuvent être utilisés pour :


I déclarer son intention de lancer une nouvelle activité ou service (en général sur des
données particulières)
I diffuser qu’un événement (ou une action) s’est produite
I explicitement démarrer une activité ou un service particulier
On peut y intégrer des valeurs à passer à la cible de l’Intent :
I lors de la création de l’Intent via les méthodes putExtras()
I Ces ”Extras” sont stockés dans l’objet Bundle passé en paramètre de la méthode
onCreate d’une activité.
I On peut passer différents types de données :
I Des données de types élémentaires (int, String, boolean...)
I Des objects complexes (notion de Parcel) réalisant l’interface Parcelable.

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 34 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Explicit Intent : appeler une autre Activité


1 public class MainActivity extends Activity {
2 private String name;
3 ...
4 public void onClick(View v) {
5 switch ([Link]()) {
6 case [Link].go_button_id:
7 Button go_button = (Button) findViewById([Link].go_button_id);
8 go_button.setText([Link].go_label_clic);
9 // Création d’une intention
10 Intent playIntent = new Intent(this, [Link]);
11 // Ajout d’un parametre à l’intention
12 [Link]("name", name);
13 startActivity(playIntent);
14 break;
15 }
16 }

1 public class PlayActivity extends Activity {


2
3 @Override public void onCreate(Bundle savedInstanceState) {
4 [Link](savedInstanceState);
5 setContentView([Link]);
6
7 Intent intent = getIntent();
8 String playerName = [Link]("name");
9 }
10 }

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 35 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Implicit Intent : appeler une autre Activité


Exemple : Ouvrir une URL
Au lieu de s’adresser directement à une activité connue, il est possible d’envoyer l’intention au
système Android pour qu’il effectue l’opération adéquate et qu’il lance le traitement avec la
bonne application/activité (ou qu’il demande à l’utilisateur parmi plusieurs possibilités).
1 public class MainActivity extends Activity {
2 private EditText url;
3 private Button go;
4
5 @Override public void onCreate(Bundle savedInstanceState) {
6 [Link](savedInstanceState);
7 setContentView([Link]);
8
9 url = (EditText) findViewById([Link].url_field);
10 go = (Button) findViewById([Link].go_button);
11
12 [Link](new OnClickListener() {
13 public void onClick(View view) {
14 lancerNavigateur();
15 }
16 });
17 }
18
19 private void lancerNavigateur() {
20 Uri uri = [Link]([Link]().toString());
21 Intent intent = new Intent(Intent.ACTION_VIEW, uri);
22 startActivity(intent);
23 }
24 }

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>

I Ou pouvant envoyer du texte (Action SEND sur du texte)


1 <activity
2 android:name=".ActivityTest"
3 android:label="@string/app_name" >
4 <intent-filter>
5 <action android:name="[Link]" />
6 <category android:name="[Link]" />
7 <data android:mimeType="text/plain" />
8 </intent-filter>
9 </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

I Tâche de fond sans interface utilisateur


I Permet d’effectuer une tâche de fond sans interaction de l’utilisateur
I Permet d’accéder à certaines fonctionnalités proposées par d’autres applications
I Un service se lance
I On le crée pour l’utiliser (Create)
Ou
I On se connecte à lui (Bind) s’il est déjà créé et lancé
I Attention : Certaines opérations (lecture de fichier sonore, opérations réseau...) peuvent
être gourmandes en temps CPU. Cela peut avoir pour conséquence de bloquer l’application
appelant le service. Il faut donc dans ces cas là avoir un service qui tourne dans un autre
thread (e.g IntentService Service implementation)
I Attention (Bis) : Un Service ne doit pas être utilisé pour remplacer un thread.

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 38 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Services (Cycle de vie)

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 39 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Services (Utilisation 1/2)


Création d’un service d’effets sonores
1 public class SoundService extends Service {
2 private final IBinder mBinder = new LocalBinder();
3 private SoundPool soundPool;
4 private Map<Integer, Integer> soundsMap;
5 private final int END=1;
6
7 @Override public void onCreate() {
8 [Link]();
9
10 soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 100);
11 soundsMap = new HashMap<Integer, Integer>();
12 [Link](END, [Link](this, [Link], 1));
13 }
14
15 public void playSound(int soundID){
16 AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
17 float streamVolumeCurrent = [Link](AudioManager.STREAM_MUSIC);
18 float streamVolumeMax = [Link](AudioManager.STREAM_MUSIC);
19 float volume = streamVolumeCurrent / streamVolumeMax;
20
21 [Link]([Link](soundID), volume, volume, 1, 0, 1);
22 }
23
24 @Override public IBinder onBind(Intent intent) {
25 return mBinder;
26 }
27 }
Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 40 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Services (Utilisation 2/2)


Connexion d’une activité sur le service d’effets sonores
1 public class MyActivity extends Activity {
2 private SoundService soundServ;
3 private boolean soundServiceBounded = false;
4
5 @Override public void onCreate(Bundle savedInstanceState) {
6 [Link](savedInstanceState);
7 setContentView([Link]);
8
9 Intent soundIntent = new Intent(this, [Link]);
10 bindService(soundIntent, mConnection, Context.BIND_AUTO_CREATE);
11 }
12
13 private ServiceConnection mConnection = new ServiceConnection() {
14 public void onServiceConnected(ComponentName name, IBinder service) {
15 LocalBinder binder = (LocalBinder) service;
16 soundServ = [Link]();
17 soundServiceBounded = true;
18 }
19 public void onServiceDisconnected(ComponentName name) {
20 soundServiceBounded = false;
21 }
22 };
23
24 public void onFinished(){
25 if (soundServiceBounded)
26 [Link]([Link]);
27 }
} Dieumegard & Xavier Crégut (N7)
28 Arnaud Développement Logiciel et Mobilité – Android 41 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Content Provider

I Les ContentProviders permettent de publier du contenu pour des applications


I Permettent de stocker des informations par sérialisation ou dans une base de données
I Peut servir d’interface entre l’utilisateur et une base de données
I On ne doit utiliser un ContentProvider que si l’information doit être partagée entre plusieurs
applications

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

Création d’un ContentProvider


Déclaration
I Le ContentProvider doit être déclaré dans le manifest ([Link])

1 <application android:icon="@drawable/icon" android:label="@string/app_name">


2 <provider
3 android:authorities="[Link]"
4 android:name="MonContentProvider">
5 </provider>
6 </application>

Avoir un chemin d’accès déclaré dans MonContentProvider


1 public static final Uri CONTENT_URI = [Link]("content://[Link]");

Redéfinir les méthodes de la classe ContentProvider


I onCreate() : Initialiser le Content Provider
I query() : Retourne un objet Cursor pour itérer sur les données
I insert() : Utilisé pour rajouter des données à notre ContentProvider
I update() : Utilisé pour mettre à jour une données déjà existante dans notre Content Provider
I delete() : Supprimer une donnée du Content Provider
I getType() : Retourne le type MIME des données contenues dans le Content Provider

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.

Communication par message


I [Link](int ID, Object data) : Créer un message pour le handler.
I [Link](Message m) : Envoyer un message à un Handler.
I [Link](Messge msg) : Méthode appelée automatiquement quand on
envoie un message à un Handler.

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

Outils du SDK pour le développement d’une application Android

I Jaune : les outils du SDK


I Orange : les fichiers créés par le
développeur
I Blanc : les fichiers engendrés

Arnaud Dieumegard & Xavier Crégut (N7) Développement Logiciel et Mobilité – Android 47 / 52
Développement Logiciel et Mobilité – Android
Composants d’Android

Aide à la mise au point


La classe [Link]
I différents niveau de Log :
I v : verbeux
I d : debug
I i : information
I w : warning
I e : erreur
I Syntaxe générale :
private static final String TAG = "Mon Appli";
...
Log.v(TAG, "valeur = " + valeur);

La vue Eclipse LogCat


I permet de voir les messages de Log émis par l’AVD
Et le débogueur !

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

Les cinq péchés capitaux du développeur Android


D’après les conseils de design de Google 2

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

Les cinq péchés capitaux du développeur Android


D’après les conseils de design de Google 2

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

Les cinq péchés capitaux du développeur Android


D’après les conseils de design de Google 2

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

Les cinq péchés capitaux du développeur Android


D’après les conseils de design de Google 2

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

Les cinq péchés capitaux du développeur Android


D’après les conseils de design de Google 2

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

Les cinq péchés capitaux du développeur Android


D’après les conseils de design de Google 2

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

Les cinq vertus du développeur Android


D’après les conseils de design de Google 3

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

Les cinq vertus du développeur Android


D’après les conseils de design de Google 3

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

Les cinq vertus du développeur Android


D’après les conseils de design de Google 3

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

Les cinq vertus du développeur Android


D’après les conseils de design de Google 3

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

Les cinq vertus du développeur Android


D’après les conseils de design de Google 3

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

Les cinq vertus du développeur Android


D’après les conseils de design de Google 3

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

Pour aller plus loin

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

Vous aimerez peut-être aussi