SlideShare une entreprise Scribd logo
1  sur  70
Télécharger pour lire hors ligne
session sept 2014 Yann Caron (c) 2014 1
IN01
Programmation Android
02 – La plateforme Android
Yann Caron
Avec l'aide de Jean-Marc Farinone
session sept 2014 Yann Caron (c) 2014 2
Sommaire - Séance 02
 Anatomie d'un projet Android : Manifest, Resources et
qualifications, R.java, Internationalisation string.xml, Assets,
Libraries
 Les composants : Activity, Service, Content Provider, Broadcast
Receiver
 Cycle de vie d'une application et persistance
 Un premier projet
 Exécution et adb
 Logcat
session sept 2014 Yann Caron (c) 2014 3
IN01 – Séance 02
Anatomie d'un projet
session sept 2014 Yann Caron (c) 2014 4
Workflow

Les phases sont :
➔
Installation de l'environnement (setup)
➔
Développement (sources et ressources)
➔
Débogage et tests (DDMS et JUnit) : Test Driven Developpment ?
➔
Publication sur le Google Play (nécessite une clé
cryptographique propre au fournisseur (nous), et un compte
Google Developper)

Plus de détails :
http://developer.android.com/tools/index.html
session sept 2014 Yann Caron (c) 2014 5
Concepts de base

Les programmes sont écrits en Java (ce n'est pas un hasard !
C'est un des langages les plus utilisés)

ADK compile l'ensemble du projet (code Java, données, fichier
de ressources, fichier XML) dans un package APK (une
application)

La JVM = stack based virtual machine

La Dalvik = register based virtual machine

Le Dexer convertit les JAR d'un bytecode à l'autre (et ça marche
plutôt bien, 80 % du code Algoid est compatible PC / Android)
session sept 2014 Yann Caron (c) 2014 6
Anatomie d'un projet

src : les sources Java
➔
Packages et .java

gen : sources générées par l'IDE
➔
R.java : identifie toutes les ressources

assets : fichiers ressources additionnels
et non compilés

bin : le résultat de la compilation

libs : les JAR nécessaires

res : les ressources du projet

AndroidManifest.xml
session sept 2014 Yann Caron (c) 2014 7
Manifest

Fichier obligatoire (point d'entrée) ne doit pas être
renommé ni déplacé

Définit le nom de l'application, son icône, son
package (identifiant unique sur le Play Store)

Définit les composants (activities, services,
broadcast receivers et content provider)

Précise quels composants peuvent accueillir
l'application
session sept 2014 Yann Caron (c) 2014 8
Manifest

Déclare les permissions de l'application en
interaction avec le matériel ou d'autres
applications

Déclare les permissions des autres applications
avec les composants de l'application

Des informations pour l'instrumentation
(kesako ?)
session sept 2014 Yann Caron (c) 2014 9
Manifest

Définit les niveaux de compatibilité
(notablement l'API minimum pour que
l'application s'exécute)
➔
Exclut d'anciens appareils qui ne seraient pas
compatibles

Liste les “libraries” (Android) nécessaires

Définit les intents
session sept 2014 Yann Caron (c) 2014 10
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="fr.cnam.in01.db4o"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="fr.cnam.in01.db4o.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Permissions
API level
Activities
Main Activity !
session sept 2014 Yann Caron (c) 2014 11
Manifest

Toutes les activities du projet doivent être référencées
dans le Manifest

Sinon, elles ne fonctionnent pas ! Exception !

L'activity Main (le point d'entrée du programme) est
déclarée grâce à un intent-filter
➔
Action : android.intent.action.MAIN
➔
Catégorie : android.intent.category.LAUNCHER

Attention !! Un seul point d'entrée par projet
session sept 2014 Yann Caron (c) 2014 12
Ressources

drawable : images ou XML
descriptifs

layout : les vues (MVC basé sur
une description XML)

menu

values : constantes nécessaires
à l'application : strings,
dimensions, styles, couleurs
session sept 2014 Yann Caron (c) 2014 13
Organisation

Organisation des ressources selon le matériel (ldpi,
v14, etc.)

Ordre de priorité des qualificateurs

Les paramètres par défaut sont ceux dans le
répertoire sans modificateur
➔
ex. :

layout-land

layout
Disposition de l'écran lorsque
l'appareil est en mode paysage
Défaut (portrait)
session sept 2014 Yann Caron (c) 2014 14
Qualificateurs
Priorité 2
Langue
fr
en
en-US
en-UK
etc ....
Priorité 3
Taille de la
diagonale
small
normal
large
xlarge
Priorité 6
Orientation
port
land
Priorité 14
Version de
l'API
v3
v5
v7
v8
etc ....
Priorité 8
Densité
ldpi 120 dpi
mdpi 160 dpi
hdpi 240 dpi
xhdpi 320 dpi (>= API 8)
nodpi non redimenssioné

ex. : des images pour de petits écrans en
portrait de petite densité
➔ drawable­small­port­ldpi
session sept 2014 Yann Caron (c) 2014 15
Arborescence type

drawable-ldpi

drawable-mdpi

drawable-hdpi

drawable-xhdpi

drawable-xxhdpi

layout-land

layout

menu-fr

menu

values-fr
➔
string.xml

values-v11
➔
style.xml

values-w820dp
➔
dimens.xml

values
➔
string.xml
➔
style.xml
➔
dimens.xml
session sept 2014 Yann Caron (c) 2014 16
R.java
public final class R {
public static final class attr {}
public static final class dimen {
public static final int padding_large = 0x7f040002;
public static final int padding_medium = 0x7f040001;
public static final int padding_small = 0x7f040000;
}
public static final class drawable {
public static final int ic_launcher = 0x7f020001;
}
public static final class id {
public static final int menu_settings = 0x7f080000;
}
public static final class layout {
public static final int activity_main = 0x7f030000;
}
public static final class menu {
public static final int activity_main = 0x7f070000;
}
public static final class string {
public static final int app_name = 0x7f050000;
public static final int hello_world = 0x7f050001;
}
public static final class style {
public static final int AppTheme = 0x7f060000;
}
}
session sept 2014 Yann Caron (c) 2014 17
R.java

Généré automatiquement lors de la phase de
compilation du projet

Référence toutes les ressources du projet et les rend
utilisables depuis Java

Association identifiant (R.string.app_name) /
index (0x7f050000)
➔
Optimise : entiers plus efficaces que des strings (hashage)
➔
Autocomplétion : accessible depuis les sources Java
session sept 2014 Yann Caron (c) 2014 18
Les vues

Les ressources se trouvent dans le répertoire
res/layout

Disponible depuis la class R.java depuis la
classe interne R.layout.*

Utilisable dans le projet avec
setContentView(R.layout.activity_ma
in)
session sept 2014 Yann Caron (c) 2014 19
Les composants et les id

Les composants graphiques présents dans les layouts
sont identifiés par un id

Ils sont créés dans le fichier XML de layout comme suit
: android:id="@+id/myTextView"

@+id signifie “créer l'id”

Ils sont accessibles depuis les sources Java avec
l'instruction findViewById(R.id.myTextView)

ex. : myTextView = (TextView)findViewById(R.id.myTextView);
session sept 2014 Yann Caron (c) 2014 20
Internationalisation : String.xml

Les ressources se trouvent dans le fichier
res/values/strings.xml

Répertoires différents selon la langue (values, values­
fr, values­en, values­fr­rCA)

Classe interne R.string.*

Utilisable dans le projet avec
getString(R.string.hello_world)

Utilisable depuis les fichiers XML
android:text="@string/hello_world"
session sept 2014 Yann Caron (c) 2014 21
Multirésolutions : les images

Les ressources se trouvent dans le répertoire res/drawable et
dérivés

Répertoires différents selon la résolution (drawable­ldpi, 
drawable­mdpi, drawable­hdpi)

Classe interne R.drawable.*

Utilisable dans le projet avec
getResources.getDrawable(R.drawable.ic_launcher)

Utilisable depuis les fichiers XML
android:icon="@drawable/ic_launcher"
session sept 2014 Yann Caron (c) 2014 22
Résumé
Source res/values/* [id] Java getResources().* XML
bool <bool> R.bool.* getBool([id]) @bool/[id]
integer <integer> R.integer.* getInteger([id]) @integer/[id]
array <integer-array><item>
<string-array><item>
R.array.* getIntArray([id])
getStringArray([])
@array/[id]
string <string> R.string.* getString([id]) @string/[id]
types
array
<array><item> R.array.* obtainTypedArray([id]) @array/[id]
color <color> R.color.* getColor([id]) @color/[id]
style <style><item> @style/[id]
dimen <dimen> R.dimen.* @dimen/[id]
session sept 2014 Yann Caron (c) 2014 23
Résumé
Source [id] Java XML
id R.id.* findViewById([id]) @+id/[id]
IHM res/layout/* R.layout.* setContentView([id])
dessins
images
res/drawable/* R.drawable
.*
getResources().
getdrawable([id])
@drawable/
[id]
anim res/anim/* R.anim.* @anim/[id]
menu res/menu/* R.menu.* getMenuInflater().inflat
e([id])
@menu/[id]
style res/values/* < R.style.* @style/[id]

Liste exhaustive :
http://developer.android.com/guide/topics/res
ources/available-resources.html
session sept 2014 Yann Caron (c) 2014 24
Exemple d'utilisation de R.java
public class MainActivity extends ActionBarActivity {
TextView myTextView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// le layout et les vues
setContentView(R.layout.activity_main);
myTextView = (TextView)findViewById(R.id.myTextView);
String text = getString(R.string.hello_world);
// les images
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
ImageView image = (ImageView)findViewById(R.id.image);
// autres
getResources().getColor(R.color.abc_search_url_text_holo);
getResources().getDimension(R.dimen.dialog_fixed_height_major);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// etc.
Layout
View
String
Image
Color
Dimension
Menu
session sept 2014 Yann Caron (c) 2014 25
Context

Les méthodes setContentView,findViewById, 
getString, getResources et 
getMenuInflater sont des méthodes héritées de la
classe Context, dont hérite Activity à son tour.

Dans d'autres classes, le contexte est passé en
paramètre au constructeur (par exemple les vues)
session sept 2014 Yann Caron (c) 2014 26
Assets

Similaire aux ressources, mais sans identifiant
généré automatiquement

répertoire /assets

Accessible depuis la méthode getAsset() : 
AssetManager depuis la classe Context

Plusieurs méthodes : list (String filter), 
open(String fileName), 
openXmlRessource(String filename)
session sept 2014 Yann Caron (c) 2014 27
Un exemple
String line; StringBuilder sb = new StringBuilder(); BufferedReader input = null;
try {
input = new BufferedReader(new InputStreamReader(getAssets().open("hello.txt")));
while ((line = input.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
if (input != null) {
throw new RuntimeException(e);
}
} finally {
try {
if (input != null) { input.close(); }
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Nom du fichier asset
Attention aux ressources !
session sept 2014 Yann Caron (c) 2014 28
Bibliothèques (“Libraries”)

Pour ajouter une bibliothèque (un JAR) au projet,
rien de plus simple

Il suffit de l'ajouter dans le répertoire
[project]/libs

Eclipse se charge de créer la référence dans le
projet

Le Dexer se chargera de convertir le bytecode JVM
en bytecode Dalvik
session sept 2014 Yann Caron (c) 2014 29
IN01 – Séance 02
Les composants
session sept 2014 Yann Caron (c) 2014 30
Les composants

Une app peut être composée d'un ou plusieurs
composants
➔
Des activities
➔
Des services
➔
Content provider
➔
Broadcast receiver
session sept 2014 Yann Caron (c) 2014 31
Activity et Service

Une activity
➔
Une application peut présenter une ou plusieurs Activities
➔
Une “page” avec un HMI
➔
Pris en charge avec le bouton back
➔
Hérite de la classe android.app.Activity

Un service et un composant en tâche de fond
➔
Pas de HMI
➔
Hérite de la classe android.app.Service
session sept 2014 Yann Caron (c) 2014 32
Content provider

Fournisseur de contenu

Donne accès à un ensemble de données
structurées

Un certain nombre de providers sont à
disposition : Clock, Calendar, CallLog, Contacts,
Documents, Media, Settings, Telephony

Possibilité de créer son propre provider
session sept 2014 Yann Caron (c) 2014 33
Broadcast Receiver

Abonne l'application à un évènement applicatif ou système

Ex. : ACTION_BOOT_COMPLETED émet un évènement
lorsque l'appareil est démarré

Une méthode onReceive est appelée sur une classe dite
“receiver”

Processus asynchrone

Hérite de la classe android.content.BroadcastReveiver

Possibilité de créer son propre “emiter”
session sept 2014 Yann Caron (c) 2014 34
Résumé

Activité == logique associée aux interfaces utilisateur

Service == opération s'exécutant en arrière-plan

Content Provider == fournisseur de contenu ! c'est-à-dire
gestionnaire des données partageables et/ou persistantes

Broadcast receiver == gestionnaire des messages
système ou applicatifs

Intent == message indiquant une intention à faire une
certaine action
Slide original (c) JMF
session sept 2014 Yann Caron (c) 2014 35
IN01 – Séance 02
Cycle de vie d'une application
et persistance
session sept 2014 Yann Caron (c) 2014 36
Cycle de vie

Un certain nombre
d'évènements avant et
après le démarrage
d'une application

L'application est détruite
onDestroy et recréée
onCreate à chaque
rotation de l'écran
session sept 2014 Yann Caron (c) 2014 37
Persistance

Pour éviter la perte de données (durant la
rotation, notamment), il faut les faire persister.

Plusieurs options :
➔
Utiliser un outil tout prêt, le Bundle
➔
Faire persister en base de données (cf cours 04)
➔
Sérialiser des objets dans le système de fichier
(dans le cas de structures complexes)
session sept 2014 Yann Caron (c) 2014 38
Bundle

Bundle est un tableau associatif Clé/Valeur typé

Des méthodes pour stocker les données : putBoolean 
(String key, boolean value), putInteger, 
putParceable, putSerializable

Des méthodes pour récupérer les données :
getBoolean (String key), getInteger, 
getParceable, getSerializable

Parceable décrit comment stocker un objet complexe
dans un Parcel
session sept 2014 Yann Caron (c) 2014 39
Évènements

Deux méthodes sont disponibles dans l'objet
Activity pour réaliser la persistance.

onSaveInstanceState et
onRestoreInstanceState

Il suffit de les surcharger dans notre Activity
spécialisée
session sept 2014 Yann Caron (c) 2014 40
Un exemple
static final String STATE_SCORE = "playerScore";
private int currentScore = 10;
@Override
protected void onSaveInstanceState (Bundle outState) {
outState.putInt(STATE_SCORE, currentScore);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
currentScore = savedInstanceState.getInt(STATE_SCORE);
}
Sauve l'état
Appel de la méthode surchargée
Stocke les états au travers la hiérarchie de classes
Comme précédemment
Récupère l'état
session sept 2014 Yann Caron (c) 2014 41
IN01 – Séance 02
Un premier projet
session sept 2014 Yann Caron (c) 2014 42
Création

Donner un nom (celui qui
s'affiche sous l'icône)

Un nom de projet (utile
pour Eclipse)

Un chemin de package
fr.cnam.*

Min, Target, Compile SDK

Thème
session sept 2014 Yann Caron (c) 2014 43
Quelques options

Créer une icône par
défaut

Créer l'activity
principale
(Main_Activity)

Workspace Eclipse
session sept 2014 Yann Caron (c) 2014 44
L'icône par défaut

L'icône par défaut

Quelques options

Conseil : utilisez
inkscape pour créer
une icône vectorisée
(ligne graphique ?)
session sept 2014 Yann Caron (c) 2014 45
Outils web

Google met à
disposition des
outils HTML

Disponible ici :
http://romannurik.gi
thub.io/AndroidAsse
tStudio/
session sept 2014 Yann Caron (c) 2014 46
L'Activity

Crée le layout de
base

Modifiable par la
suite
session sept 2014 Yann Caron (c) 2014 47
Options de navigation
session sept 2014 Yann Caron (c) 2014 48
WYSIWYG
Palette
Fenêtre graphique
Options d'affichage
Zoom
Outline
Sélecteur de mode
Outline

Préférer le mode
XML
➔
compréhension
➔
copier/coller
➔
+ efficace à
l'usage
➔
code maîtrisé
(+ propre)
session sept 2014 Yann Caron (c) 2014 49
Manifest

Un outil graphique pour éditer le manifest
session sept 2014 Yann Caron (c) 2014 50
Eclipse DDMS

La perspective DDMS d'Eclipse

Toutes les informations sur les processus
s'exécutant sur l'appareil
CPU usage Memory usage
session sept 2014 Yann Caron (c) 2014 51
Eclipse DDMS

Un explorateur de fichiers

Screen Capture (utile lors de la publication sur
le Play Store)

Statistiques réseau

Threads, Heap, Allocation
session sept 2014 Yann Caron (c) 2014 52
Dump view hierarchy
Coordonnées utiles pour l'automatisation
des tests de vues
session sept 2014 Yann Caron (c) 2014 53
IN01 – Séance 02
Exécution et adb
session sept 2014 Yann Caron (c) 2014 54
Exécution

Deux possibilités
➔
l'émulateur (plus lent,
mais plus flexible,
capable de simuler
diverses résolutions)
➔
sur le device (les
vraies performances)
session sept 2014 Yann Caron (c) 2014 55
Des exemples dans l'émulateur

Des exemples sont disponibles
dans l'émulateur

Il est possible de les exécuter
depuis les menus

Le code est accessible à partir
de :
%SDK%sampleandroid-
XXXApiDemos
session sept 2014 Yann Caron (c) 2014 56
Sources

Si les sources ne
sont pas
présentes dans le
SDK, il faut les
télécharger
session sept 2014 Yann Caron (c) 2014 57
Appareil - Activer le débogage

Pour développer depuis
l'appareil

Dans le menu Options de
développement, il faut
activer le menu Débogage
USB

Et brancher le câble USB
entre le PC et l'appareil
session sept 2014 Yann Caron (c) 2014 58
Astuce Samsung

Sur certains appareils Samsung, le menu
“Developer” est caché

Pour le réactiver, il faut aller dans
Settings/About Device et toucher 7 fois (!!!!) le
menu Build number

Sur les appareils en français, Paramètres/À
propos de l'appareil, menu Numéro de version
session sept 2014 Yann Caron (c) 2014 59
Sous Windows

Les drivers ne sont pas présents par défaut. Il
fait aussi les télécharger
session sept 2014 Yann Caron (c) 2014 60
adb devices

Android debug bridge

Lancer une fenêtre DOS ou un shell

Tester si l'appareil est connecté adb devices
session sept 2014 Yann Caron (c) 2014 61
adb start, kill

Très utile lors d'un dysfonctionnement

adb kill­server et adb start­server
session sept 2014 Yann Caron (c) 2014 62
adb shell

Un remote shell sur l'appareil depuis le PC
 adb shell

Le reste, c'est du Linux (ls, mkdir, chmod, cat, exit)
session sept 2014 Yann Caron (c) 2014 63
adb transfert

Installer une APK à distance
➔ adb install c:file.apk

Envoyer un fichier sur le téléphone
➔ adb push c:file.txt /sdcard

Télécharger un fichier depuis le téléphone
➔ adb pull /sdcard/file.txt c:
session sept 2014 Yann Caron (c) 2014 64
IN01 – Séance 02
Logcat
session sept 2014 Yann Caron (c) 2014 65
android.util.Log
 Le logger interne à la plateforme
 Accessible par programmation : android.util.Log
 Une méthode statique générale :
println(Int priority, String tag, String 
msg)
 Des priorités DEBUG, ERROR, INFO, VERBOSE, WARN
 Des méthodes statiques utilitaires
d(String tag, String msg), e, i, v ,w 
session sept 2014 Yann Caron (c) 2014 66
Exemple

Utile pour tracer le programme et comprendre
ce qu'il se passe, sans utiliser le débogueur
Log.d(MainActivity.class.getName(), "My debug log");
Log.i(MainActivity.class.getName(), "My info log");
Log.w(MainActivity.class.getName(), "My warning log");
Log.e(MainActivity.class.getName(), "My error log");
session sept 2014 Yann Caron (c) 2014 67
DDMS LogCat
session sept 2014 Yann Caron (c) 2014 68
Filtres

Eclipse filtre automatiquement sur le nom de l'application
session sept 2014 Yann Caron (c) 2014 69
adb logcat

Accès au Logcat en ligne de commande
 adb logcat
session sept 2014 Yann Caron (c) 2014 70
Fin
 Merci de votre attention
 Des questions ?

Contenu connexe

Tendances

Programmation Android - 06 - Publication
Programmation Android - 06 - PublicationProgrammation Android - 06 - Publication
Programmation Android - 06 - PublicationYann Caron
 
Programmation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridgeProgrammation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridgeYann Caron
 
In01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiquesIn01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiquesYann Caron
 
In01 - Programmation Android - 04 - databases
In01 - Programmation Android - 04 - databasesIn01 - Programmation Android - 04 - databases
In01 - Programmation Android - 04 - databasesYann Caron
 
Programmation Android - 02 - Android
Programmation Android - 02 - AndroidProgrammation Android - 02 - Android
Programmation Android - 02 - AndroidYann Caron
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web servicesYann Caron
 
Programmation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - GeomatiqueProgrammation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - GeomatiqueYann Caron
 
In01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancéesIn01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancéesYann Caron
 
In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionYann Caron
 
Programmation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancéesProgrammation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancéesYann Caron
 
Applications Android - cours 13 : Connectivité et services Web
Applications Android - cours 13 : Connectivité et services WebApplications Android - cours 13 : Connectivité et services Web
Applications Android - cours 13 : Connectivité et services WebAhmed-Chawki Chaouche
 
Cours android
Cours androidCours android
Cours androidAd Hafsa
 
5 android web_service
5 android web_service5 android web_service
5 android web_serviceSaber LAJILI
 
Applications Android - cours 6 : Structure d’un projet Android
Applications Android - cours 6 :  Structure d’un projet AndroidApplications Android - cours 6 :  Structure d’un projet Android
Applications Android - cours 6 : Structure d’un projet AndroidAhmed-Chawki Chaouche
 

Tendances (19)

Programmation Android - 06 - Publication
Programmation Android - 06 - PublicationProgrammation Android - 06 - Publication
Programmation Android - 06 - Publication
 
Programmation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridgeProgrammation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridge
 
In01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiquesIn01 - Programmation Android - Travaux pratiques
In01 - Programmation Android - Travaux pratiques
 
In01 - Programmation Android - 04 - databases
In01 - Programmation Android - 04 - databasesIn01 - Programmation Android - 04 - databases
In01 - Programmation Android - 04 - databases
 
Programmation Android - 02 - Android
Programmation Android - 02 - AndroidProgrammation Android - 02 - Android
Programmation Android - 02 - Android
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
Programmation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - GeomatiqueProgrammation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - Geomatique
 
In01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancéesIn01 - Programmation Android - 07 - techniques avancées
In01 - Programmation Android - 07 - techniques avancées
 
In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introduction
 
Programmation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancéesProgrammation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancées
 
Android wear
Android wearAndroid wear
Android wear
 
Cours Android
Cours AndroidCours Android
Cours Android
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
 
1 tours horizon
1 tours horizon1 tours horizon
1 tours horizon
 
Applications Android - cours 13 : Connectivité et services Web
Applications Android - cours 13 : Connectivité et services WebApplications Android - cours 13 : Connectivité et services Web
Applications Android - cours 13 : Connectivité et services Web
 
Cours android
Cours androidCours android
Cours android
 
Hello droid
Hello droidHello droid
Hello droid
 
5 android web_service
5 android web_service5 android web_service
5 android web_service
 
Applications Android - cours 6 : Structure d’un projet Android
Applications Android - cours 6 :  Structure d’un projet AndroidApplications Android - cours 6 :  Structure d’un projet Android
Applications Android - cours 6 : Structure d’un projet Android
 

En vedette

Développement Android
Développement AndroidDéveloppement Android
Développement AndroidFranck SIMON
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidHoussem Lahiani
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebHarrathi Mohamed
 
Alphorm.com Formation Android 5
Alphorm.com Formation Android 5Alphorm.com Formation Android 5
Alphorm.com Formation Android 5Alphorm
 
Mobile app development services
Mobile app development servicesMobile app development services
Mobile app development servicesbrsolutions
 
Panorama Medias Sociaux Midi Pyrenees
Panorama Medias Sociaux Midi PyreneesPanorama Medias Sociaux Midi Pyrenees
Panorama Medias Sociaux Midi PyreneesSystonic
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux ServletsFrançois Charoy
 
Sécurité android par Philippe Prados 25/07/2012
Sécurité android par Philippe Prados 25/07/2012Sécurité android par Philippe Prados 25/07/2012
Sécurité android par Philippe Prados 25/07/2012Paris Android User Group
 
Ecoscan guide fr
Ecoscan guide frEcoscan guide fr
Ecoscan guide frGroupe One
 
Coordination of Activities in Dynamic Situations – The Case Of Crisis Management
Coordination of Activities in Dynamic Situations – The Case Of Crisis ManagementCoordination of Activities in Dynamic Situations – The Case Of Crisis Management
Coordination of Activities in Dynamic Situations – The Case Of Crisis ManagementFrançois Charoy
 
Les outils technologiques au service de l'accueil sur le territoire : le proj...
Les outils technologiques au service de l'accueil sur le territoire : le proj...Les outils technologiques au service de l'accueil sur le territoire : le proj...
Les outils technologiques au service de l'accueil sur le territoire : le proj...UETR2011Bergerac
 
Keynote IEEE Wetice conference 2016 - From group collaboration to large scale...
Keynote IEEE Wetice conference 2016 - From group collaboration to large scale...Keynote IEEE Wetice conference 2016 - From group collaboration to large scale...
Keynote IEEE Wetice conference 2016 - From group collaboration to large scale...François Charoy
 

En vedette (20)

Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'Android
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site Web
 
Alphorm.com Formation Android 5
Alphorm.com Formation Android 5Alphorm.com Formation Android 5
Alphorm.com Formation Android 5
 
Mobile app development services
Mobile app development servicesMobile app development services
Mobile app development services
 
Panorama Medias Sociaux Midi Pyrenees
Panorama Medias Sociaux Midi PyreneesPanorama Medias Sociaux Midi Pyrenees
Panorama Medias Sociaux Midi Pyrenees
 
Fxos
FxosFxos
Fxos
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
 
Sécurité android par Philippe Prados 25/07/2012
Sécurité android par Philippe Prados 25/07/2012Sécurité android par Philippe Prados 25/07/2012
Sécurité android par Philippe Prados 25/07/2012
 
Ecoscan guide fr
Ecoscan guide frEcoscan guide fr
Ecoscan guide fr
 
Pilote5
Pilote5Pilote5
Pilote5
 
Coordination of Activities in Dynamic Situations – The Case Of Crisis Management
Coordination of Activities in Dynamic Situations – The Case Of Crisis ManagementCoordination of Activities in Dynamic Situations – The Case Of Crisis Management
Coordination of Activities in Dynamic Situations – The Case Of Crisis Management
 
Les outils technologiques au service de l'accueil sur le territoire : le proj...
Les outils technologiques au service de l'accueil sur le territoire : le proj...Les outils technologiques au service de l'accueil sur le territoire : le proj...
Les outils technologiques au service de l'accueil sur le territoire : le proj...
 
SQLite 3
SQLite 3SQLite 3
SQLite 3
 
Les applications mobiles
Les applications mobilesLes applications mobiles
Les applications mobiles
 
Keynote IEEE Wetice conference 2016 - From group collaboration to large scale...
Keynote IEEE Wetice conference 2016 - From group collaboration to large scale...Keynote IEEE Wetice conference 2016 - From group collaboration to large scale...
Keynote IEEE Wetice conference 2016 - From group collaboration to large scale...
 
Lifi ppt
Lifi pptLifi ppt
Lifi ppt
 

Similaire à In01 - Programmation Android - 02 - android

Introduction à Android
Introduction à AndroidIntroduction à Android
Introduction à AndroidYoann Gotthilf
 
introAndroid_2023_V6.5.2pp1-162.pdf
introAndroid_2023_V6.5.2pp1-162.pdfintroAndroid_2023_V6.5.2pp1-162.pdf
introAndroid_2023_V6.5.2pp1-162.pdfRihabBENLAMINE
 
Présentation Flutter
Présentation FlutterPrésentation Flutter
Présentation FlutterAppstud
 
Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010François Wauquier
 
Initiation au développement mobile sous Android
Initiation au développement mobile sous AndroidInitiation au développement mobile sous Android
Initiation au développement mobile sous AndroidAbdelkader Rhouati
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdfmed_univ78
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptxYaminaGh1
 
Présentation de la plateforme Android
Présentation de la plateforme AndroidPrésentation de la plateforme Android
Présentation de la plateforme AndroidMohamed BOURAOUI
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contactJasmine Conseil
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contactJasmine Conseil
 
Programmation Android - 10 - Spatialite
Programmation Android - 10 - SpatialiteProgrammation Android - 10 - Spatialite
Programmation Android - 10 - SpatialiteYann Caron
 
De iOS à bada présentation complète_octobre 2011
De iOS à bada présentation complète_octobre 2011De iOS à bada présentation complète_octobre 2011
De iOS à bada présentation complète_octobre 2011BeMyApp
 
01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)TECOS
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Introduction_Android_-_Complet.pdf
Introduction_Android_-_Complet.pdfIntroduction_Android_-_Complet.pdf
Introduction_Android_-_Complet.pdfmed_univ78
 

Similaire à In01 - Programmation Android - 02 - android (20)

Développement Sous Android
Développement Sous AndroidDéveloppement Sous Android
Développement Sous Android
 
Introduction à Android
Introduction à AndroidIntroduction à Android
Introduction à Android
 
introAndroid_2023_V6.5.2pp1-162.pdf
introAndroid_2023_V6.5.2pp1-162.pdfintroAndroid_2023_V6.5.2pp1-162.pdf
introAndroid_2023_V6.5.2pp1-162.pdf
 
Présentation Flutter
Présentation FlutterPrésentation Flutter
Présentation Flutter
 
Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010
 
Android introvf
Android introvfAndroid introvf
Android introvf
 
Initiation au développement mobile sous Android
Initiation au développement mobile sous AndroidInitiation au développement mobile sous Android
Initiation au développement mobile sous Android
 
Cours android
Cours androidCours android
Cours android
 
cours-android.pdf
cours-android.pdfcours-android.pdf
cours-android.pdf
 
cours Android.pptx
cours Android.pptxcours Android.pptx
cours Android.pptx
 
Présentation de la plateforme Android
Présentation de la plateforme AndroidPrésentation de la plateforme Android
Présentation de la plateforme Android
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
 
Android Studio, premier contact
Android Studio, premier contactAndroid Studio, premier contact
Android Studio, premier contact
 
Programmation Android - 10 - Spatialite
Programmation Android - 10 - SpatialiteProgrammation Android - 10 - Spatialite
Programmation Android - 10 - Spatialite
 
De iOS à bada présentation complète_octobre 2011
De iOS à bada présentation complète_octobre 2011De iOS à bada présentation complète_octobre 2011
De iOS à bada présentation complète_octobre 2011
 
01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Introduction_Android_-_Complet.pdf
Introduction_Android_-_Complet.pdfIntroduction_Android_-_Complet.pdf
Introduction_Android_-_Complet.pdf
 
Catalogue PFE 2019
Catalogue PFE 2019Catalogue PFE 2019
Catalogue PFE 2019
 
IF-RMI.pdf
IF-RMI.pdfIF-RMI.pdf
IF-RMI.pdf
 

Plus de Yann Caron

Théorie des langages - TP - WellKnownText
Théorie des langages - TP  - WellKnownTextThéorie des langages - TP  - WellKnownText
Théorie des langages - TP - WellKnownTextYann Caron
 
Théorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langagesThéorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langagesYann Caron
 
Théorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesThéorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesYann Caron
 
Théorie des langages - 02 - Code gen
Théorie des langages - 02 - Code genThéorie des langages - 02 - Code gen
Théorie des langages - 02 - Code genYann Caron
 
Théorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbresThéorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbresYann Caron
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationYann Caron
 
Théorie des langages - 00 - Introduction
Théorie des langages - 00 - IntroductionThéorie des langages - 00 - Introduction
Théorie des langages - 00 - IntroductionYann Caron
 
Algea - 04 - conclusion
Algea - 04 - conclusionAlgea - 04 - conclusion
Algea - 04 - conclusionYann Caron
 
Algea - 03 - ennemis
Algea - 03 - ennemisAlgea - 03 - ennemis
Algea - 03 - ennemisYann Caron
 
Algea - 02 - gemmes
Algea - 02 - gemmesAlgea - 02 - gemmes
Algea - 02 - gemmesYann Caron
 
Algea - 01 - hero
Algea - 01 - heroAlgea - 01 - hero
Algea - 01 - heroYann Caron
 
ALGEA - 00 - introduction
ALGEA - 00 - introductionALGEA - 00 - introduction
ALGEA - 00 - introductionYann Caron
 
Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014Yann Caron
 

Plus de Yann Caron (13)

Théorie des langages - TP - WellKnownText
Théorie des langages - TP  - WellKnownTextThéorie des langages - TP  - WellKnownText
Théorie des langages - TP - WellKnownText
 
Théorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langagesThéorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langages
 
Théorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesThéorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmes
 
Théorie des langages - 02 - Code gen
Théorie des langages - 02 - Code genThéorie des langages - 02 - Code gen
Théorie des langages - 02 - Code gen
 
Théorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbresThéorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbres
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - Compilation
 
Théorie des langages - 00 - Introduction
Théorie des langages - 00 - IntroductionThéorie des langages - 00 - Introduction
Théorie des langages - 00 - Introduction
 
Algea - 04 - conclusion
Algea - 04 - conclusionAlgea - 04 - conclusion
Algea - 04 - conclusion
 
Algea - 03 - ennemis
Algea - 03 - ennemisAlgea - 03 - ennemis
Algea - 03 - ennemis
 
Algea - 02 - gemmes
Algea - 02 - gemmesAlgea - 02 - gemmes
Algea - 02 - gemmes
 
Algea - 01 - hero
Algea - 01 - heroAlgea - 01 - hero
Algea - 01 - hero
 
ALGEA - 00 - introduction
ALGEA - 00 - introductionALGEA - 00 - introduction
ALGEA - 00 - introduction
 
Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014Cours CNAM In01 - Programmation Android - Septembre 2014
Cours CNAM In01 - Programmation Android - Septembre 2014
 

In01 - Programmation Android - 02 - android

  • 1. session sept 2014 Yann Caron (c) 2014 1 IN01 Programmation Android 02 – La plateforme Android Yann Caron Avec l'aide de Jean-Marc Farinone
  • 2. session sept 2014 Yann Caron (c) 2014 2 Sommaire - Séance 02  Anatomie d'un projet Android : Manifest, Resources et qualifications, R.java, Internationalisation string.xml, Assets, Libraries  Les composants : Activity, Service, Content Provider, Broadcast Receiver  Cycle de vie d'une application et persistance  Un premier projet  Exécution et adb  Logcat
  • 3. session sept 2014 Yann Caron (c) 2014 3 IN01 – Séance 02 Anatomie d'un projet
  • 4. session sept 2014 Yann Caron (c) 2014 4 Workflow  Les phases sont : ➔ Installation de l'environnement (setup) ➔ Développement (sources et ressources) ➔ Débogage et tests (DDMS et JUnit) : Test Driven Developpment ? ➔ Publication sur le Google Play (nécessite une clé cryptographique propre au fournisseur (nous), et un compte Google Developper)  Plus de détails : http://developer.android.com/tools/index.html
  • 5. session sept 2014 Yann Caron (c) 2014 5 Concepts de base  Les programmes sont écrits en Java (ce n'est pas un hasard ! C'est un des langages les plus utilisés)  ADK compile l'ensemble du projet (code Java, données, fichier de ressources, fichier XML) dans un package APK (une application)  La JVM = stack based virtual machine  La Dalvik = register based virtual machine  Le Dexer convertit les JAR d'un bytecode à l'autre (et ça marche plutôt bien, 80 % du code Algoid est compatible PC / Android)
  • 6. session sept 2014 Yann Caron (c) 2014 6 Anatomie d'un projet  src : les sources Java ➔ Packages et .java  gen : sources générées par l'IDE ➔ R.java : identifie toutes les ressources  assets : fichiers ressources additionnels et non compilés  bin : le résultat de la compilation  libs : les JAR nécessaires  res : les ressources du projet  AndroidManifest.xml
  • 7. session sept 2014 Yann Caron (c) 2014 7 Manifest  Fichier obligatoire (point d'entrée) ne doit pas être renommé ni déplacé  Définit le nom de l'application, son icône, son package (identifiant unique sur le Play Store)  Définit les composants (activities, services, broadcast receivers et content provider)  Précise quels composants peuvent accueillir l'application
  • 8. session sept 2014 Yann Caron (c) 2014 8 Manifest  Déclare les permissions de l'application en interaction avec le matériel ou d'autres applications  Déclare les permissions des autres applications avec les composants de l'application  Des informations pour l'instrumentation (kesako ?)
  • 9. session sept 2014 Yann Caron (c) 2014 9 Manifest  Définit les niveaux de compatibilité (notablement l'API minimum pour que l'application s'exécute) ➔ Exclut d'anciens appareils qui ne seraient pas compatibles  Liste les “libraries” (Android) nécessaires  Définit les intents
  • 10. session sept 2014 Yann Caron (c) 2014 10 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="fr.cnam.in01.db4o" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="fr.cnam.in01.db4o.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> Permissions API level Activities Main Activity !
  • 11. session sept 2014 Yann Caron (c) 2014 11 Manifest  Toutes les activities du projet doivent être référencées dans le Manifest  Sinon, elles ne fonctionnent pas ! Exception !  L'activity Main (le point d'entrée du programme) est déclarée grâce à un intent-filter ➔ Action : android.intent.action.MAIN ➔ Catégorie : android.intent.category.LAUNCHER  Attention !! Un seul point d'entrée par projet
  • 12. session sept 2014 Yann Caron (c) 2014 12 Ressources  drawable : images ou XML descriptifs  layout : les vues (MVC basé sur une description XML)  menu  values : constantes nécessaires à l'application : strings, dimensions, styles, couleurs
  • 13. session sept 2014 Yann Caron (c) 2014 13 Organisation  Organisation des ressources selon le matériel (ldpi, v14, etc.)  Ordre de priorité des qualificateurs  Les paramètres par défaut sont ceux dans le répertoire sans modificateur ➔ ex. :  layout-land  layout Disposition de l'écran lorsque l'appareil est en mode paysage Défaut (portrait)
  • 14. session sept 2014 Yann Caron (c) 2014 14 Qualificateurs Priorité 2 Langue fr en en-US en-UK etc .... Priorité 3 Taille de la diagonale small normal large xlarge Priorité 6 Orientation port land Priorité 14 Version de l'API v3 v5 v7 v8 etc .... Priorité 8 Densité ldpi 120 dpi mdpi 160 dpi hdpi 240 dpi xhdpi 320 dpi (>= API 8) nodpi non redimenssioné  ex. : des images pour de petits écrans en portrait de petite densité ➔ drawable­small­port­ldpi
  • 15. session sept 2014 Yann Caron (c) 2014 15 Arborescence type  drawable-ldpi  drawable-mdpi  drawable-hdpi  drawable-xhdpi  drawable-xxhdpi  layout-land  layout  menu-fr  menu  values-fr ➔ string.xml  values-v11 ➔ style.xml  values-w820dp ➔ dimens.xml  values ➔ string.xml ➔ style.xml ➔ dimens.xml
  • 16. session sept 2014 Yann Caron (c) 2014 16 R.java public final class R { public static final class attr {} public static final class dimen { public static final int padding_large = 0x7f040002; public static final int padding_medium = 0x7f040001; public static final int padding_small = 0x7f040000; } public static final class drawable { public static final int ic_launcher = 0x7f020001; } public static final class id { public static final int menu_settings = 0x7f080000; } public static final class layout { public static final int activity_main = 0x7f030000; } public static final class menu { public static final int activity_main = 0x7f070000; } public static final class string { public static final int app_name = 0x7f050000; public static final int hello_world = 0x7f050001; } public static final class style { public static final int AppTheme = 0x7f060000; } }
  • 17. session sept 2014 Yann Caron (c) 2014 17 R.java  Généré automatiquement lors de la phase de compilation du projet  Référence toutes les ressources du projet et les rend utilisables depuis Java  Association identifiant (R.string.app_name) / index (0x7f050000) ➔ Optimise : entiers plus efficaces que des strings (hashage) ➔ Autocomplétion : accessible depuis les sources Java
  • 18. session sept 2014 Yann Caron (c) 2014 18 Les vues  Les ressources se trouvent dans le répertoire res/layout  Disponible depuis la class R.java depuis la classe interne R.layout.*  Utilisable dans le projet avec setContentView(R.layout.activity_ma in)
  • 19. session sept 2014 Yann Caron (c) 2014 19 Les composants et les id  Les composants graphiques présents dans les layouts sont identifiés par un id  Ils sont créés dans le fichier XML de layout comme suit : android:id="@+id/myTextView"  @+id signifie “créer l'id”  Ils sont accessibles depuis les sources Java avec l'instruction findViewById(R.id.myTextView)  ex. : myTextView = (TextView)findViewById(R.id.myTextView);
  • 20. session sept 2014 Yann Caron (c) 2014 20 Internationalisation : String.xml  Les ressources se trouvent dans le fichier res/values/strings.xml  Répertoires différents selon la langue (values, values­ fr, values­en, values­fr­rCA)  Classe interne R.string.*  Utilisable dans le projet avec getString(R.string.hello_world)  Utilisable depuis les fichiers XML android:text="@string/hello_world"
  • 21. session sept 2014 Yann Caron (c) 2014 21 Multirésolutions : les images  Les ressources se trouvent dans le répertoire res/drawable et dérivés  Répertoires différents selon la résolution (drawable­ldpi,  drawable­mdpi, drawable­hdpi)  Classe interne R.drawable.*  Utilisable dans le projet avec getResources.getDrawable(R.drawable.ic_launcher)  Utilisable depuis les fichiers XML android:icon="@drawable/ic_launcher"
  • 22. session sept 2014 Yann Caron (c) 2014 22 Résumé Source res/values/* [id] Java getResources().* XML bool <bool> R.bool.* getBool([id]) @bool/[id] integer <integer> R.integer.* getInteger([id]) @integer/[id] array <integer-array><item> <string-array><item> R.array.* getIntArray([id]) getStringArray([]) @array/[id] string <string> R.string.* getString([id]) @string/[id] types array <array><item> R.array.* obtainTypedArray([id]) @array/[id] color <color> R.color.* getColor([id]) @color/[id] style <style><item> @style/[id] dimen <dimen> R.dimen.* @dimen/[id]
  • 23. session sept 2014 Yann Caron (c) 2014 23 Résumé Source [id] Java XML id R.id.* findViewById([id]) @+id/[id] IHM res/layout/* R.layout.* setContentView([id]) dessins images res/drawable/* R.drawable .* getResources(). getdrawable([id]) @drawable/ [id] anim res/anim/* R.anim.* @anim/[id] menu res/menu/* R.menu.* getMenuInflater().inflat e([id]) @menu/[id] style res/values/* < R.style.* @style/[id]  Liste exhaustive : http://developer.android.com/guide/topics/res ources/available-resources.html
  • 24. session sept 2014 Yann Caron (c) 2014 24 Exemple d'utilisation de R.java public class MainActivity extends ActionBarActivity { TextView myTextView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // le layout et les vues setContentView(R.layout.activity_main); myTextView = (TextView)findViewById(R.id.myTextView); String text = getString(R.string.hello_world); // les images Drawable d = getResources().getDrawable(R.drawable.ic_launcher); ImageView image = (ImageView)findViewById(R.id.image); // autres getResources().getColor(R.color.abc_search_url_text_holo); getResources().getDimension(R.dimen.dialog_fixed_height_major); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } // etc. Layout View String Image Color Dimension Menu
  • 25. session sept 2014 Yann Caron (c) 2014 25 Context  Les méthodes setContentView,findViewById,  getString, getResources et  getMenuInflater sont des méthodes héritées de la classe Context, dont hérite Activity à son tour.  Dans d'autres classes, le contexte est passé en paramètre au constructeur (par exemple les vues)
  • 26. session sept 2014 Yann Caron (c) 2014 26 Assets  Similaire aux ressources, mais sans identifiant généré automatiquement  répertoire /assets  Accessible depuis la méthode getAsset() :  AssetManager depuis la classe Context  Plusieurs méthodes : list (String filter),  open(String fileName),  openXmlRessource(String filename)
  • 27. session sept 2014 Yann Caron (c) 2014 27 Un exemple String line; StringBuilder sb = new StringBuilder(); BufferedReader input = null; try { input = new BufferedReader(new InputStreamReader(getAssets().open("hello.txt"))); while ((line = input.readLine()) != null) { sb.append(line); } } catch (IOException e) { if (input != null) { throw new RuntimeException(e); } } finally { try { if (input != null) { input.close(); } } catch (IOException e) { throw new RuntimeException(e); } } Nom du fichier asset Attention aux ressources !
  • 28. session sept 2014 Yann Caron (c) 2014 28 Bibliothèques (“Libraries”)  Pour ajouter une bibliothèque (un JAR) au projet, rien de plus simple  Il suffit de l'ajouter dans le répertoire [project]/libs  Eclipse se charge de créer la référence dans le projet  Le Dexer se chargera de convertir le bytecode JVM en bytecode Dalvik
  • 29. session sept 2014 Yann Caron (c) 2014 29 IN01 – Séance 02 Les composants
  • 30. session sept 2014 Yann Caron (c) 2014 30 Les composants  Une app peut être composée d'un ou plusieurs composants ➔ Des activities ➔ Des services ➔ Content provider ➔ Broadcast receiver
  • 31. session sept 2014 Yann Caron (c) 2014 31 Activity et Service  Une activity ➔ Une application peut présenter une ou plusieurs Activities ➔ Une “page” avec un HMI ➔ Pris en charge avec le bouton back ➔ Hérite de la classe android.app.Activity  Un service et un composant en tâche de fond ➔ Pas de HMI ➔ Hérite de la classe android.app.Service
  • 32. session sept 2014 Yann Caron (c) 2014 32 Content provider  Fournisseur de contenu  Donne accès à un ensemble de données structurées  Un certain nombre de providers sont à disposition : Clock, Calendar, CallLog, Contacts, Documents, Media, Settings, Telephony  Possibilité de créer son propre provider
  • 33. session sept 2014 Yann Caron (c) 2014 33 Broadcast Receiver  Abonne l'application à un évènement applicatif ou système  Ex. : ACTION_BOOT_COMPLETED émet un évènement lorsque l'appareil est démarré  Une méthode onReceive est appelée sur une classe dite “receiver”  Processus asynchrone  Hérite de la classe android.content.BroadcastReveiver  Possibilité de créer son propre “emiter”
  • 34. session sept 2014 Yann Caron (c) 2014 34 Résumé  Activité == logique associée aux interfaces utilisateur  Service == opération s'exécutant en arrière-plan  Content Provider == fournisseur de contenu ! c'est-à-dire gestionnaire des données partageables et/ou persistantes  Broadcast receiver == gestionnaire des messages système ou applicatifs  Intent == message indiquant une intention à faire une certaine action Slide original (c) JMF
  • 35. session sept 2014 Yann Caron (c) 2014 35 IN01 – Séance 02 Cycle de vie d'une application et persistance
  • 36. session sept 2014 Yann Caron (c) 2014 36 Cycle de vie  Un certain nombre d'évènements avant et après le démarrage d'une application  L'application est détruite onDestroy et recréée onCreate à chaque rotation de l'écran
  • 37. session sept 2014 Yann Caron (c) 2014 37 Persistance  Pour éviter la perte de données (durant la rotation, notamment), il faut les faire persister.  Plusieurs options : ➔ Utiliser un outil tout prêt, le Bundle ➔ Faire persister en base de données (cf cours 04) ➔ Sérialiser des objets dans le système de fichier (dans le cas de structures complexes)
  • 38. session sept 2014 Yann Caron (c) 2014 38 Bundle  Bundle est un tableau associatif Clé/Valeur typé  Des méthodes pour stocker les données : putBoolean  (String key, boolean value), putInteger,  putParceable, putSerializable  Des méthodes pour récupérer les données : getBoolean (String key), getInteger,  getParceable, getSerializable  Parceable décrit comment stocker un objet complexe dans un Parcel
  • 39. session sept 2014 Yann Caron (c) 2014 39 Évènements  Deux méthodes sont disponibles dans l'objet Activity pour réaliser la persistance.  onSaveInstanceState et onRestoreInstanceState  Il suffit de les surcharger dans notre Activity spécialisée
  • 40. session sept 2014 Yann Caron (c) 2014 40 Un exemple static final String STATE_SCORE = "playerScore"; private int currentScore = 10; @Override protected void onSaveInstanceState (Bundle outState) { outState.putInt(STATE_SCORE, currentScore); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); currentScore = savedInstanceState.getInt(STATE_SCORE); } Sauve l'état Appel de la méthode surchargée Stocke les états au travers la hiérarchie de classes Comme précédemment Récupère l'état
  • 41. session sept 2014 Yann Caron (c) 2014 41 IN01 – Séance 02 Un premier projet
  • 42. session sept 2014 Yann Caron (c) 2014 42 Création  Donner un nom (celui qui s'affiche sous l'icône)  Un nom de projet (utile pour Eclipse)  Un chemin de package fr.cnam.*  Min, Target, Compile SDK  Thème
  • 43. session sept 2014 Yann Caron (c) 2014 43 Quelques options  Créer une icône par défaut  Créer l'activity principale (Main_Activity)  Workspace Eclipse
  • 44. session sept 2014 Yann Caron (c) 2014 44 L'icône par défaut  L'icône par défaut  Quelques options  Conseil : utilisez inkscape pour créer une icône vectorisée (ligne graphique ?)
  • 45. session sept 2014 Yann Caron (c) 2014 45 Outils web  Google met à disposition des outils HTML  Disponible ici : http://romannurik.gi thub.io/AndroidAsse tStudio/
  • 46. session sept 2014 Yann Caron (c) 2014 46 L'Activity  Crée le layout de base  Modifiable par la suite
  • 47. session sept 2014 Yann Caron (c) 2014 47 Options de navigation
  • 48. session sept 2014 Yann Caron (c) 2014 48 WYSIWYG Palette Fenêtre graphique Options d'affichage Zoom Outline Sélecteur de mode Outline  Préférer le mode XML ➔ compréhension ➔ copier/coller ➔ + efficace à l'usage ➔ code maîtrisé (+ propre)
  • 49. session sept 2014 Yann Caron (c) 2014 49 Manifest  Un outil graphique pour éditer le manifest
  • 50. session sept 2014 Yann Caron (c) 2014 50 Eclipse DDMS  La perspective DDMS d'Eclipse  Toutes les informations sur les processus s'exécutant sur l'appareil CPU usage Memory usage
  • 51. session sept 2014 Yann Caron (c) 2014 51 Eclipse DDMS  Un explorateur de fichiers  Screen Capture (utile lors de la publication sur le Play Store)  Statistiques réseau  Threads, Heap, Allocation
  • 52. session sept 2014 Yann Caron (c) 2014 52 Dump view hierarchy Coordonnées utiles pour l'automatisation des tests de vues
  • 53. session sept 2014 Yann Caron (c) 2014 53 IN01 – Séance 02 Exécution et adb
  • 54. session sept 2014 Yann Caron (c) 2014 54 Exécution  Deux possibilités ➔ l'émulateur (plus lent, mais plus flexible, capable de simuler diverses résolutions) ➔ sur le device (les vraies performances)
  • 55. session sept 2014 Yann Caron (c) 2014 55 Des exemples dans l'émulateur  Des exemples sont disponibles dans l'émulateur  Il est possible de les exécuter depuis les menus  Le code est accessible à partir de : %SDK%sampleandroid- XXXApiDemos
  • 56. session sept 2014 Yann Caron (c) 2014 56 Sources  Si les sources ne sont pas présentes dans le SDK, il faut les télécharger
  • 57. session sept 2014 Yann Caron (c) 2014 57 Appareil - Activer le débogage  Pour développer depuis l'appareil  Dans le menu Options de développement, il faut activer le menu Débogage USB  Et brancher le câble USB entre le PC et l'appareil
  • 58. session sept 2014 Yann Caron (c) 2014 58 Astuce Samsung  Sur certains appareils Samsung, le menu “Developer” est caché  Pour le réactiver, il faut aller dans Settings/About Device et toucher 7 fois (!!!!) le menu Build number  Sur les appareils en français, Paramètres/À propos de l'appareil, menu Numéro de version
  • 59. session sept 2014 Yann Caron (c) 2014 59 Sous Windows  Les drivers ne sont pas présents par défaut. Il fait aussi les télécharger
  • 60. session sept 2014 Yann Caron (c) 2014 60 adb devices  Android debug bridge  Lancer une fenêtre DOS ou un shell  Tester si l'appareil est connecté adb devices
  • 61. session sept 2014 Yann Caron (c) 2014 61 adb start, kill  Très utile lors d'un dysfonctionnement  adb kill­server et adb start­server
  • 62. session sept 2014 Yann Caron (c) 2014 62 adb shell  Un remote shell sur l'appareil depuis le PC  adb shell  Le reste, c'est du Linux (ls, mkdir, chmod, cat, exit)
  • 63. session sept 2014 Yann Caron (c) 2014 63 adb transfert  Installer une APK à distance ➔ adb install c:file.apk  Envoyer un fichier sur le téléphone ➔ adb push c:file.txt /sdcard  Télécharger un fichier depuis le téléphone ➔ adb pull /sdcard/file.txt c:
  • 64. session sept 2014 Yann Caron (c) 2014 64 IN01 – Séance 02 Logcat
  • 65. session sept 2014 Yann Caron (c) 2014 65 android.util.Log  Le logger interne à la plateforme  Accessible par programmation : android.util.Log  Une méthode statique générale : println(Int priority, String tag, String  msg)  Des priorités DEBUG, ERROR, INFO, VERBOSE, WARN  Des méthodes statiques utilitaires d(String tag, String msg), e, i, v ,w 
  • 66. session sept 2014 Yann Caron (c) 2014 66 Exemple  Utile pour tracer le programme et comprendre ce qu'il se passe, sans utiliser le débogueur Log.d(MainActivity.class.getName(), "My debug log"); Log.i(MainActivity.class.getName(), "My info log"); Log.w(MainActivity.class.getName(), "My warning log"); Log.e(MainActivity.class.getName(), "My error log");
  • 67. session sept 2014 Yann Caron (c) 2014 67 DDMS LogCat
  • 68. session sept 2014 Yann Caron (c) 2014 68 Filtres  Eclipse filtre automatiquement sur le nom de l'application
  • 69. session sept 2014 Yann Caron (c) 2014 69 adb logcat  Accès au Logcat en ligne de commande  adb logcat
  • 70. session sept 2014 Yann Caron (c) 2014 70 Fin  Merci de votre attention  Des questions ?