Cours android

Support de cours architectures mobiles et programmation Android en java


Télécharger Support de cours architectures mobiles et programmation Android en java

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Support de cours architectures mobiles et programmation Android en java

...

Constat

Explosion du marché des terminaux mobiles

  • Faible coût
  • Marché grande consommation
  • Evolution technologique exponentielle

AVANT :

  • Affichage limité
  • 100x60 pour les écrans N/B
  • 640x240 pour les terminaux avec écrans couleurs
  • Faible mémoire
  • Ne dépasse pas 1Mo de mémoire morte et vive réunies
  • Faibles capacités de calcul
  • Moyens de communication limités

MAINTENANT :

  • Hautes résolutions, GPS, WIFI, extension mémoire…
  • L’évolution technologique dépasse le marché de développement

...

Enjeux

Fournir l’information partout et à tout moment

  • Téléphone mobile
  • PALM
  • PDA
  • Tablettes
  • eBook / cartable électronique

Origines

Google? Pas tout à fait, c’est une PME américaine qui s’appelle Android créé en 2003 et rachetée par Google en 2005

Google voulait s’introduire dans le marché mobile (pas réussi au début)

L’objectif est d’avoir un OS mobile qui peut apercevoir la situation de l’utilisateur (notamment l’emplacement géographique)

En 2007, Apple dévoile l’Iphone (un gouffre de technologie apparait)

...

L’influence de l’Open Handset Alliance (OHA)

L’objectif est d’avoir de la standard open source pour les appareils mobiles

Et pourquoi pas un OS mobile open source pour concurrencer les OS propriétaires iOS et Windows

Mobile (à l’image de Linux par rapport à MacOS et Windows)?

Android est ainsi né de l’OHA qui a attiré des dixaines d’autres entreprises y compris Samsung, LG, HTC, Asus… (plus de 80 à l’heure actuelle)

Philosophie et avantages d’android

Open Source

Gratuit (même pour les constructeurs)

  • 25$ pour publier des applications android via le market (play store)
  • publier autant d’application qu’on veut à vie pour 25 $ Facile pour le développement
  • API très complète basé sur JDK 1.6 (+ d’autres classes complémentaires)
  • API simple de haut niveau (2 lignes de code pour envoyer un SMS) Facile à vendre (via le play store)

Flexibilité

  • s’adapte à différentes architectures matérielles (avec clavier, tactile, téléphones, tablettes et même micro-ondes)
  • distribution intelligente
  • Exemple : application nécessitant bluetooth  ne sera visible qu’à partir des terminaux avec bluetooth)

Ingénieux

  • réutiliser le maximum de l’existant et combiner les composants :
  • Exemple : utiliser le répertoire téléphonique
  • Combiner les composants (Appareil photo + GPS par exemple)
  • Collecte de contributions d’amateurs (avantage de l’open source)

Contraintes du développement mobile

Peu de mémoire (8 fois moins qu’un PC en général)

Respecter l’ordre de priorité des tâches

  • Les applications doivent interagir avec le système sans le bloquer
  • Un SMS ou un appel est toujours plus prioritaire que les autres applications

Respecter des contraintes de sécurité plus strictes

  • risque d’abimer le matériel est plus fort

Autonomie (des jeux/applications usent toute la batterie en 30 min)

Puissance de calcul limité (risque de surchauffe)

Taille de l’écran

  • Réduite voire variable
  • L’interface doit d’adapter à plusieurs écrans (risque de perdre des utilisateurs)

Nature de l’écran

avec stylet  petits composants

sensitif  composants plus gros

Hétérogénéité (langues, composants matériels, versions de l’OS…)

Utilisateur plus exigeant (ce ne sont plus les mêmes besoins qu’avec un Nokia 3310)

Java : un choix stratégique

Portabilité (la plus grande motivation)

Partager le même langage et la même conception depuis les serveurs jusqu’aux terminaux

Programmes compacts et portables

Ateliers et Outils homogènes

Interaction plus évoluée que les applications WEB

Gestion complète des ressources matérielles

Les technologies actuelles JAVA

Coté serveur : J2EE

Développement standard (PC) : J2SE

Coté clients légers : J2ME  Android

Pour les systèmes embarqués : EmbeddedJava

Pour les cartes à puces : JavaCard

Architecture d’Android

Une architecture complexe pour vous rendre la vie plus facile

...

Dalvik VM, au lieu de JVM

Machines à registres

Chaque application à sa propre DVM

  • Communication inter-applications assurée par le middleware
  • Multi thread assuré par Linux
  • Accès à la couche matérielle par le noyau Linux

Le noyau android

Noyau standard Linux assurant :

  • Gestion de mémoire et de processus
  • Gestion de la pile réseau
  • Gestion des pilotes des capteurs
  • Gestion des permissions d’accès

Avec quelques retouches pour le matériel du mobile :

  • Alarm
  • Process Binder
  • Power Management
  • Low Memory Killer
  • Kernel Debugger
  • Logger

Gestion de l’énergie avec le noyau android (1/2)

Gestion de l’énergie

  • Problème
  • Limite de la capacité des batteries et sa dégradation continue avec leur utilisation
  • Propriétés du module de gestion d’énergie (PM)
  • PM est basé sur la gestion standard de l’énergie dans un noyau linux
  • PM ajoute des règles un peu plus agressives pour préserver l’énergie
  • Principe de la course à la mise en veille (Race to idle)
  • Les couches supérieures demande d’activer les composants matériels à travers des signaux appelés “Wake Locks”.
  • Support de plusieurs types de “Wake Locks”.

Gestion de l’énergie avec le noyau android (2/2)



Fonctionnement du module de gestion d’énergie

If there are no active wake locks, CPU will be turned off.

If there are no partial wake locks, screen and keyboard will be turned off.

Environnement d’exécution Android (1/3)

Core Libraries

  • Fournit les fonctionnalités offertes par les librairies de bases du langage Java
  • APIs
  • Structures de données
  • Utilitiés
  • Gestion d’accès aux fichiers
  • Accès au réseau
  • Composants graphiques
  • Etc

Environnement d’exécution Android

Dalvik Virtual Machine

  • Fournit un environnement sur lequel toute application android est exécutée
  • Chaque application Android est exécutée dans son propre processus et dans sa propre instance de Dalvik VM.
  • Dalvik VM a été réalisé d’une façon efficace que la grande majorité des terminaux puissent exécuter plusieurs instances de la machine virtuelle sans problèmes.
  • Machine virtuelle basée sur des registres et non sur une pile

Environnement d’exécution Android (3/3)

Dalvik Virtual Machine

  • Execute des fichiers avec un format spécial (.dex)
  • Le format .dex est optimisé pour consommer le moins de mémoire
  • Compilation
  • Utilise le noyau Linux pour:
  • Threading (gestion des processus)
  • Gestion de la mémoire physique du système

Librairies (1/2)

Développées en C/C++

Fournissent des fonctions de base pour les applications Android (développées en Java)

Librairies (2/2)

Suite de la liste des librairies principales

  • System C Library (Bionic)
  • Media Libraries
  • Surface Manager (Surface Flinger)
  • Audio Manager (Audio Flinger)
  • 3D Libraries (OpenGL)
  • LibWebCore (WebKit)
  • Gestion de la persistance (SQLite)

Bionic

  • Custom libc implementation optimized for embedded use
  • Problem with GNU libc

License The authors want to keep GPL out of user-space.

Size Libc will load in each process, so it needs to be small.

Speed Limited CPU power means it needs to be fast.

Couche « Applications »

Applications de base pour utiliser le téléphone

  • Répertoire téléphonique
  • Application de téléphone
  • Navigateur
  • Paramètres du téléphone
  • Lanceur d’applications

...

Outils Android

Le outils fournis pour le développement Android ont fait son succès

Contenu de “Android SDK” (Cont)

Development Tools

  • Hierarchy Viewer
  • Un outil permettant le déboguage et l’optimisation des interfaces utilisateurs
  • Cet outil offre une représentation visuelle des dispositions hiérarchique des composants graphiques
  • Android Debug Bridge (adb)
  • Un outil qui permet d’installer et de déboguer les applications développées
  • Ceci peut se faire de la même façon que sur un vrai terminal que sur un émulateur
  • Il offre un ensemble de commandes pour gérer le transfert d’applications entre l’espace de développement et le terminal ou l’émulateur
  • Le déboguage se fait à travers un Log (journal) maintenu sur le terminal ou l’émulateur (adb logcat

Contenu de “Android SDK” (Cont)

Development Tools (Cont)

  • 9-patch: Un éditeur graphique pour la création d’images redimentionnables ou dédiées à une résolution donnée
  • Android Asset Packaging Tool (aapt)
  • C’est l’outil de finalisation du développement qui permet de créer des paquetages d’application (Android Package Files .apk) contenant les fichiers compilés et les ressources (images, fichiers de configuration…)
  • Dalvik Debug Monitor Service (ddms) : un outils qui permet de gérer les processus sur l’émulateur ou le terminal
  • Tuer des processus, sélectionner un processus à déboguer,faire des copiers d’écrans…

Contenu de “Android SDK” (fin)

Development Tools (Cont)

  • Android Interface Description Language (aidl)
  • Un langage qui permet de définir les interfaces déchanges interprocessus
  • Ce sont des interfaces Java
  • sqlite3
  • Un outil permettant d’accéder aux bases de données SQLite des applications Android
  • Traceview
  • Analyse statistiques sur les applications (mémoire utilisée, charge processeur…)
  • dx
  • L’outil qui permet de transformer les .class en bytcode Dalvik

...

Composants principaux d’applications

Android

Le développement d’applications (graphiques) sur Android est basé sur la notion d’activités

Introduction au développement Android

Mots-clés

  • Applications,
  • Communication, évènements, intentions,
  • Services en tâche de fond,

Une Application hérite le la classe Activity

  • Surcharge de certaines méthodes
  • Du déjà vu : MIDlet, Applet, Servlet,…
  • Le cycle de vie est imposé par le framework
  • Déjà vu : pour une Applet init() puis …

Contenu d’une application Andoid

Les applications android sont développées en Java

Une application android (.apk) et construite par l’outil aapt

.apk

Java

Code

Data Files

Resources

Files

  • res/layout: declaration layout files
  • res/drawable: intended for drawing
  • res/anim: bitmaps, animations for transitions
  • res/values: externalized values

strings, colors, styles, etc

  • res/xml: general XML files used at runtime
  • res/raw: binary files (e.g. sound)

...

Applications Android une application graphique est un assemblage de fenêtres entre lesquelles il est possible de naviguer

Ces différentes fenêtres sont appelées des activités comme une activité remplie tout l'écran, alors votre application ne peut en afficher qu'une à la fois

Une activité est un ensemble de composants appelés vues (View)

Elle contient aussi des informations sur l’application appelé contexte (Context)

...

Les sous types de ressources

Dans chaque type de ressources on peut avoir des sous types (langue, taille de l’écran…)

Ces sous typessont spécifiés par des quantificateur séparés par des “-”



  • res/<type_de_ressource>[<-quantificateur 1>…<-quantificateur N>]

Exemples de quantificateurs :

  • Langues : fr,en, fr-rFR, fr-rCA…
  • Taille de l’écran : small, normal, large, xlarge
  • résolution de l’écran : ldpi (160 dpi), mdpi (160 dpi), hdpi (240 dpi), xhdpi (320 dpi)
  • orientation de l’écran : land (paysage), port (portrait)

Les sous types les plus utilisés :

res/drawable-xhdpi, res/drawable-hdpi, res/drawable-ldpi,

res/drawable-mdpi, res/layout-land, res/layout, res/values-fr-rFR

Les ressources (2/2)

  • Les ressources sont utilisées de la manière suivante:

– R.type_ressource.nom_ressource qui est de type int.

– Il s'agit de l'identifiant de la ressource.

  • On peut alors utiliser cet identifiant ou récupérer l'instance de

la ressource en utilisant la classe Resources:

– Resources res = getResources();

– String hw = res.getString(R.string.hello);

– XXX o = res.getXXX(id);

  • Une méthode spécifique pour les objets graphiques permet de les récupérer à partir de leur id, ce qui permet d'agir sur ces

instances même si elles ont été créées via leur définition XML:

– TextView texte = (TextView)findViewById(R.id.le_texte);

– texte.setText("Here we go !");

Référencement entre ressources

  • On peut utiliser les ressources comme valeurs d’attributs dans d’autres ressources sous forme XML. Cette possibilité est très utilisée dans les mises en page par exemple.
  • La notation pour faire référence à une autre ressource est la suivante :

–attribute="@[package_name:]resource_type/resource_identifier"

  • En voici l’utilisation au sein d’un exemple qui crée une mise en page sous forme de table (d’une ligne et de deux colonnes) dont les cellules sont remplies par des chaînes de caractères :

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

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:stretchColumns="1">

<TableRow>

<TextView android:text="@string/table_cellule_gauche" />

<TextView android:text="@string/table_cellule_droite" />

</TableRow>

</TableLayout>

J2ME 7373

Les chaînes

  • Les chaînes constantes de l'application sont situées dans res/values/strings.xml.
  • L'externalisation des chaînes permettra de réaliser l'internationalisation de l'application.
  • Voici un exemple:

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

<resources>

<string name="hello">Hello Hello JFL !</string>

<string name="app_name">AndroJF</string>

</resources>

  • La récupération de la chaîne se fait via le code:

–Resources res = getResources();

–String hw = res.getString(R.string.hello);

J2ME 7474

Internationalisation

  • Le système de ressources permet de gérer facilement l'internationalisation d'une application.

–Il suffit de créer des répertoires values-XX où XX est le code de la langue que l'on souhaite implanter.

–On place alors dans ce sous répertoire le fichier xml strings.xml contenant les chaines traduites associées aux même clefs que dans values/strings.xml.

–Android chargera le fichier de ressources approprié en fonction de la langue du système.

–On obtient par exemple pour les langues es (espagnol) et fr (français) l'arborescence:

MyProject/

res/

values/

strings.xml

values-es/

strings.xml

values-fr/

strings.xml

J2ME 7575

Autres valeurs simples

  • Plusieurs fichies xml peuvent être placés dans

res/values.

–Cela permet de définir des chaines, des couleurs, des tableaux,...

  • L'assistant de création permet de créer de nouveaux fichiers de ressources contenant des valeurs simples, comme par exemple un tableau de chaines:

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

<resources>

<string-array name="test">

<item>it1</item>

<item>it2</item>

</string-array>

</resources>

J2ME 7676

  • Une couleur définit une valeur RVB (rouge, vert et bleu) et une transparence.

–Cette couleur peut être utilisée à de multiples endroits comme pour définir la couleur d’un texte.

–Il existe différents formats dont la syntaxe globale est la suivante :

  • <color name=nom_couleur>valeur_de_la_couleur</color>
  • Exemple de déclaration d'une couleur

<resources>

<color name="bleu_transparent">#50F00FF</color>

</resources>

  • Utilisation des couleurs (exemple avec la déclaration de la couleur bleu_transparent):

–Java : R.color.bleu_transparent

–XML : @[package:]color/bleu_transparent

Les couleurs

J2ME 7777

  • Les dimensions sont la plupart du temps référencées dans les styles et les mises en page.
  • Les unités prises en charge par Android : px (pixels), in (pouces), mm (millimètres), pt (points), dp (densityindependant pixel), sp (scale-independant pixel).

–dp : une unité relative se basant sur une taille physique de l’écran de 160 dpi.

  • Avec cette unité, 1 dp est égal à 1 pixel sur un écran de 160 pixels.
  • Si la taille de l’écran est différente de 160 pixels, les vues s’adapteront selon le ratio entre la taille en pixels de l’écran de l’utilisateur et la référence des 160 pixels;

–sp : fonctionne de la même manière que dp. Ils sont aussi fonction de la taille de polices spécifiée par l’utilisateur.

Les dimensions

J2ME 7878

  • Exemple de fichier de ressources de dimensions

<resources><dimen name="taille_texte">5sp</dimen></resources>

  • Utilisation des dimensions :

–Java : R.dimen.un_nom

  • Resources.getDimen(R.dimen.taille_texte);

–XML : @dimen/un_nom

<TextView android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textSize="@dimen/taille_texte"/>

 



10