• Aucun résultat trouvé

Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer"

Copied!
31
0
0

Texte intégral

(1)

mobiles avec Android

1 Inspiré du cours de Olivier Le Goaer

(2)

OS mobile : outils de développement

D’après le cours de Olivier Le Goaer

(3)

Plateforme de développement

 MobileApp vs. WebApp

(4)

Android

 Startup rachetée par Google en 2005

 Open Alliance Handset (OHA)

Regroupement de + de 50 entreprises : fabricants de matériel, opérateurs mobiles, développeurs d’applications, … dont Google.

Objectif : développer des normes ouvertes pour des applications de téléphonie mobile

 Matériel supportant Android

Tablette, smartphone, netbook, télévision, embarqué (frigo?)

(5)

Android

 Points forts

Système linux + java

Projet open source

Système fonctionnel, intuitif et évolutif

SFK complet fourni

 Versions d’Android

cupcake donut eclair froyo gingerbread honeycomb Icecream sandwich

(6)

Architecture Android

(7)

Architecture Android

 Linux Kernel

Le noyau linux fournit le pilotes matériels, la gestion de

processus, la mémoire, le réseau et la gestion de l’alimentation

 Les bibliothèques

J2SE (subset) : java.io.*, java.lang.*, ...

Android : android.view.*, android.telephony.*, ...

Google : com.google.android.maps.*

 Le moteur d’exécution Android

Offre les bases du framework applicatif

Utilise la machine virtuelle java Dalvik

 Le framework applicatif

Fournit les classes utiles et des abstractions matérielles

 La couche applicative

IHM (interface graphiques) décrites en XML

Modèle de données et controleurs applicatifs écrits en java

(8)

Machine virtuelle « Dalvik »

 Offre l'avantage de toute machine virtuelle

Couche d'abstraction entre le développeur d'applications et des implémentations matérielles particulières

 La VM Dalvik n'est pas une VM (Virtual Machine) Java

Tient compte des contraintes de CPU et mémoire

Exécute des fichiers .dex (Dalvik Executable) optimisés

 La VM créé une instance Dalvik pour chaque processus (lourd)

Les applications sont totalement indépendantes ("sandbox")

Espaces protégés (mémoire, disque)

Evite un plantage généralisé !

(9)

Le petit univers java

 Concepts

Paquetage, classe, annotation, héritage, interface...

 Idiomes

Classes anonymes, classes internes, POJO...

 Bibliothèques(API)

J2SE (subset) : java.io.*, java.lang.*...

Android : android.view.*, android.telephony.*...

Google : com.google.android.maps.*...

 Design Patterns

Singleton, Builder, Observer (Listener), DAO..

(10)

Outil de développement

 Plugin Eclipse ADT (Android Development Tools)

Assistant à la création de projets

Créateur d'interface graphique (WYSIWYG)

Vues et perspectives dédiées

(11)

Outil de développement

 Plugin Eclipse ADT (Android Development Tools)

Arborescence des projets

Dossier du projet

Fichiers source (.java) Fichier source R.java

automatiquement généré à partir du répertoire /res Version Android

Ressources organisées (layout, icones, texte,...)

Ressources non organisées (.pdf, .zip, .html,...)

Fichier Manifest.xml

(12)

Développement d'une application

 Code source

Ecrit en Java et compilé en Dalvik bytecode (.dex)

 Packaging

Archive .apk

 Signing

Les applications doivent être signées pour être déployées (pas nécessaire en développement)

 Exécution

Sur un support mobile (smartphone par ex)

Dans un émulateur

(13)

L'émulateur

 AVD (Android Virtual Device)

AVD Manager

 Lent au démarrage et à l'usage

Emulation (i.e. couche d'indirection) vs. simulation

Noyau Linux + services + composants android

 Fonctionnalités non-disponibles

Appareil photo (Camera↔Webcam supporté)

Vibreur

Appels téléphoniques réels

Capteurs en général

Connexions USB

Évolution de la charge de la batterie

(14)

Développement d'applications

 Environnement d'exécution contraint

 Pour vos développements, gardez à l'esprit que les appareils mobiles ont :

Une puissance processeur plus faible

Une RAM limitée

Des capacités de stockage permanent limitées

De petits écrans avec de faibles résolutions

Des coûts élevés de transfert de données

Des taux de transfert plus lents avec une latence élevée

Des connexions réseau moins fiables

Des batteries à autonomie limitée

(15)

Applications Android

 Applications de premier plan

Utilisable quand elle est visible et mis en pause lorsqu’elle ne l’est pas

Jeux, mashup de cartes géographiques

 Applications d’arrière-plan

Interaction limitée en dehors de sa configuration

Filtrage d’appels, réponse automatique aux SMS

 Applications intermittente

Interactivé par moment, l’essentiel de sa tâche est en arrière-plan

Lecteur de musique

 Widget

Composant visuel interactif que les utilisateurs peuvent ajouter à leur écran d’accueil

Affichage de l’heure, prévisions météo

(16)

Cycle de vie d’une application Android

 Contrairement aux applications classiques, les

applications Android n’ont pas un contrôle complet sur leur cycle de vie

 Les composants doivent être à l’écoute des

changements d’états de l’application pour être près à une fin intempestive

 La mémoire et la gestion des processus est prise en

charge exclusivement par le moteur d’exécution

(17)

Les ressources

 chaınes de caracteres, images, audio, presentation visuelle, . . .

 dossier res/

Images

Interfaces graphiques

Valeurs constantes

(18)

Principe R.java

 Chaque élément défini dans le répertoire /res impacte le fichier R.java  (à ne pas toucher)

 Génération automatique de classes internes à la classe R, ainsi que des constantes de type entier sur 32bits

 Chemin d'accès aux ressources via R.java

user-defined : fr.polytech.tp1.R.color.rose_bonbon

system-defined : android.R.color.darker_gray

Exemple  : obj.setColor(R.color.rose_bonbon)

 Objet java représentant les ressources

Instance de la classe : android.content.res.Resources

Ressources du projet en cours : context.getResources()

(19)

AndroidManifest.xml

 Décrit les composants de l’application

Un point d’entrée potentiel dans l’application

Une application peut lancer un composant différent (pas de main)

 Quatre types de composants

activités (activities)

services (services)

fournisseurs de contenu (content providers)

récepteurs de diffusion (broadcast receivers)

 Décrit les permissions requises par l’application

accès a l’Internet, lecture-écriture dans la liste de contacts, géo-localisation, . . .

 Décrit les besoins matériels et logiciels de l’application

appareil photo, bluetooth, ecran multitouch, . . .

(20)

AndroidManifest.xml

 Fichier XML obligatoire, à la racine du projet

 Seuls les éléments <manifest> et <application> sont obligatoires

 catégorie LAUNCHER = point d’entrée possible pour exécuter l'application

<manifest>

  <application>

    <activity android:name=".MyFirstActivity" 

      android:label="@string/app_name">

      <intent­filter>

       <action android:name="fr.polytech.resmob.MyFirstActivity"/>

       <category android:name="android.intent.category.LAUNCHER"/>

      </intent­filter>

    </activity>

  </application>

</manifest>

http://developer.android.com/guide/topics/manifest/manifest-intro.html

(21)

Activité

 Une activité = un écran graphique

Incarne souvent un cas d'utilisation (use case UML)

 IHM

structurée par une hiérarchie de vues et de contrôles des éléments définis par du code Java

Certains éléments (texte, dimension, couleur) définis dans des fichiers XML (/res)

 Une application est formée de n activités

 Sous-classe de  

android.app.Activity

(22)

Activité

 7 méthodes de callback:

void onCreate(...) 

void onStart()

void onRestart()

void onResume()

void onPause()

void onStop()

void onDestroy() 

(23)

Activité

 action MAIN = un point d’entrée principal (pas d’information particulière à fournir)

 catégorie LAUNCHER = point d’entrée possible pour exécuter l'application

package fr.polytech.resmob;

import android.app.Activity;

public class MyFirstActivity extends Activity {   @Override

  public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);

    /* Allocation des ressources ici */

  }

  @Override

  protected void onDestroy() {     super.onDestroy();

       /* Désallocation des ressources ici */

  } }

Le bundle mémorise l'état de l'UI

lorsqu'elle passe en arrière-plan

(24)

Description des interfaces graphiques

 Description

Déclarative (Fichiers XML dans le répertoire /res/layout/)

Ou directement dans le code java

 Vues ( View )

Composant élémentaire des interfaces graphiques sous Android

Instance de la classe View

Sensible aux événements

tous les composants graphiques (widgets) d’Android sont des vues : Button, EditText, TextView, Spinner, CheckBox

 Regroupement de vues ( ViewGroup )

Le ViewGroup permet de regrouper des vues

Les layouts disponibles sont : LinearLayout, TableLayout,  RelativeLayout, FrameLayout, ScrollView, ...

http://developer.android.com/guide/topics/ui/declaring-layout.html

(25)

Description des interfaces graphiques

 Description

Déclarative (Fichiers XML dans le répertoire /res/layout/)

Ou directement dans le code java

 Vues ( View )

Composant élémentaire des interfaces graphiques sous Android

Instance de la classe View

Sensible aux événements

tous les composants graphiques (widgets) d’Android sont des vues : Button, EditText, TextView, Spinner, CheckBox

 Regroupement de vues ( ViewGroup )

Le ViewGroup permet de regrouper des vues

Les layouts disponibles sont : LinearLayout, TableLayout,  RelativeLayout, FrameLayout, ScrollView, ...

(26)

Layout communs

 Linear Layout : organisation horizontale avec barre de défilement si nécessaire

 Relative Layout : organisation des éléments relativement les uns aux autres (à gauche de, au-dessus de, ...)

 Web view : affiche le contenu d'une page web

http://developer.android.com/guide/topics/ui/declaring-layout.html

(27)

Description des interfaces graphiques

 Orientation

Sens de placement des vues dans un conteneur

android:orientation = vertical | horizontal

 Taille

Surface prise par la vue

android:layout_width = ??px | fill_parent | wrap_content

android:layout_height = ??px | fill_parent | wrap_content

 Gravité

Alignement d'une vue dans son conteneur

android:layout_gravity = left | center_horizontal | top |  bottom | right 

(28)

Description des interfaces graphiques

 action MAIN = un point d’entrée principal (pas d’information particulière à fournir)

 catégorie LAUNCHER = point d’entrée possible pour exécuter l'application

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

<LinearLayout

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

  android:orientation="vertical"

  android:layout_width="match_parent"

  android:layout_height="match_parent">

  <TextView

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:text="@string/hello"/>

  <TextView

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:text="@string/coucou"

    android:id="@+id/msgText"/>

</LinearLayout>

• identifiant unique

• le signe + dans

@+id signifie qu’il s’agit d’un nouveau nom de ressource, à créér et a ajouter a la classe R

(29)

Association des interfaces graphiques

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

public class MyFirstActivity extends Activity {

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    TextView message = (TextView) findViewById(R.id.msgText);

    message.setText("Hello, World!");

  } }

Associe une hiérarchie de

vues ` a une activité

Renvoie la vue à partir de son identifiant généré dans R.java

(30)

Gestion des événements

 Dans le fichier main.xml de /res/layout  on peut associer une méthode à un événement via les attributs événementiels

<Button ... android:onClick="sayHello" .../>

public class MyFirstActivity extends Activity {   private TextView helloLabel;

  

  @Override

  public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    helloLabel = (TextView) findViewById(R.id.hello_label);

  }

  public void sayHello(View v) {

    helloLabel.setText(R.string.hello);

  } }

(31)

android

 http://developer.android.com/training/index.html

 « Programmation des systèmes mobiles & sans fils », cours de Olivier Le Goaer.

 « Programmation Android », cours de Etienne Payet

 wikibook sur programmation android

Références

Documents relatifs

• Ressources = toutes les données (autres que le code) utilisées par l'application. • Rangées dans le dossier res, puis incluses dans

• L’application doit déclarer tous ses composants, notamment les activités et services, dans un fichier AndroidManifest.xml. • Le fichier Manifest indique au

• L’application doit déclarer ce que l’application contient (ses composants, notamment les activités et services,…) dans un fichier AndroidManifest.xml. • Le

La plate-forme Android • Confi gurer l’environnement de développement • Confi gurer le SDK, Eclipse, le module ADT, l’ap- pareil virtuel Android • Maîtriser l’émulateur

➔ une machine virtuelle Java adaptée : la Dalvik virtual machine. ➔ un environnement debugueur DDMS (Dalvik Debug Monitor Service) utilisant adb (Android

 Update() : met à jour les valeurs de la base à partir du POJO.  Delete() : supprime le record selon l'ID

Ce sont des supports de cours mis à votre disposition pour vos études sous la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes

Together we have developed Android TM , the first complete, open, and free mobile