• Aucun résultat trouvé

Présentation du système d exploitation Open Source ANDROID

N/A
N/A
Protected

Academic year: 2022

Partager "Présentation du système d exploitation Open Source ANDROID"

Copied!
91
0
0

Texte intégral

(1)

ANDROID

Commission OpenSource Telecom Valley

- Jeudi 2 Juillet 2009 -

(2)

Introduction : Commission Open Source Telecom Valley

Le marché Android et les enjeux - positionnement et dernières avancées - Pascal Flamand - Janua

Anatomie de la plateforme Android et environnement de développement - Arnaud Farine - Expertise@ndroid

Pause café

Intégration d'un provider cryptographique / module Kernel / Framework Dalvik - retour d'expérience - Nicolas Ponsini - Trusted Logic

Intégration d'une application de géolocalisation "off board" sous Android - retour d'expérience - Christophe Tomasini - Altran

Q/R avec la salle, partage d'expériences

(3)

Introduction : Commission Open Source Telecom Valley

Le marché Android et les enjeux - positionnement et dernières avancées - Pascal Flamand - Janua

Anatomie de la plateforme Android et environnement de développement - Arnaud Farine - Expertise@ndroid

Pause café

Intégration d'un provider cryptographique / module Kernel /

Framework Dalvik - retour d'expérience - Nicolas Ponsini - Trusted Logic

Intégration d'une application de géolocalisation "off board" sous Android - retour d'expérience - Christophe Tomasini - Altran

Q/R avec la salle, partage d'expériences

(4)

Telecom Valley

 Une commission créé fin 2007 pour permettre aux membres de Télécom Valley d'échanger et de s'enrichir mutuellement sur les sujets et

problématiques de l'Open Source…

 Un groupe pluri-disciplinaire (utilisateurs,développeurs, éditeurs, architectes, juristes, marketing, commerce...)

 Un groupe dynamique, ouvert et vivant où chacun apporte son expérience/expertise et apprend des autres...

 En résumé une vraie communauté professionnelle sur Sophia....

(5)

Introduction : Commission Open Source Telecom Valley

Le marché Android et les enjeux - positionnement et dernières avancées - Pascal Flamand - Janua

Anatomie de la plateforme Android et environnement de développement - Arnaud Farine - Expertise@ndroid

Pause café

Intégration d'un provider cryptographique / module Kernel /

Framework Dalvik - retour d'expérience - Nicolas Ponsini - Trusted Logic

Intégration d'une application de géolocalisation "off board" sous Android - retour d'expérience - Christophe Tomasini - Altran

Q/R avec la salle, partage d'expériences

(6)

Société de services (SS2L)/éditeur fondée en 2004 à Sophia Antipolis Notre métier : l'expertise

Notre crédo : l'Open Source

Nos prestations : consulting, assistance ponctuelle et développement au forfait

Nos compétences :

Consulting, implémentations et déploiement de solutions de gestion des identités (LDAP, SSO, PKI..),

Etudes d'opportunités et accompagnement à la migration Open Source, déploiement de solutions d'infrastructures.

Développement au forfait, assistance et expertise sur des composants Open Source et embarqués,

Consulting réseaux et sécurité, ISO 27001, expertise base de données, cluster et virtualisation

Editeur des logiciels CmakeBuilder, Jaguards, JAC, KressourcesWCAP et EZ-Slony.

(7)

Le marché, le matériel, le potentiel

Google

 Acteur majeur d'internet

 1er moteur de recherche

 1er publicité en ligne

 Solutions d'entreprises: Google Apps, Google Enterprise Appliance...

 Services gratuits: gmail, apps, photos, vidéos...

2005 : Rachat d'Android Inc.

 Développement d'applications mobiles

 Richard Miner* + Andy Rubin

Objectif du rachat : créer une plateforme mobile

 Flexible

 Accessible à tous les intégrateurs et développeurs

 Profiter de la convergence web / mobile

* Richard Miner a quitté Google fin 2008

(8)

Acteurs système d'exploitation mobile 2009

 Symbian

 Windows Mobile

 RIM

 Palm Source (Palm Os)

 Apple

 Linux

Baisse des parts de marché

 OS: Palm Source, Windows

 Décroissance du marché téléphone Marché du smartphones en hausse

 Décroissance du marché « téléphone »

 Croissance smartphone: +37% en 2009 (GFK)

 Croissance smartphone: +12% en 2009 (Gartner)

 Services mobiles: nouveaux usages, multimédia

Le marché, le matériel, le potentiel

(9)

Le marché, le matériel, le potentiel

Open Handset Alliance (OHA)

(10)

Le marché, le matériel, le potentiel

Stratégie Google :

OpenSource

Android Market / Google Checkout

Publicité mobile

Plateforme mobile ouverte

Application Web riche

Développeurs nombreux Utilisateurs

nombreux Plus de revenus

(11)

Le marché, le matériel, le potentiel Android pour qui ?

 Constructeurs de matériels (téléphones, GPS, netbook, e- book, lecteur multimédia, bornes internet...)

 Opérateurs

 Éditeurs de solutions logicielles, SSII...

Points forts

Constructeurs Linux Open Source Coût de licence nul Adaptabilité

Développeurs Langage Java

Modularité, partage

Kit de développement gratuit SDK complet

Android Market

Utilisateurs Fonctionnel, intuitif et évolutif Multitâches

Applications nouvelles

Nombreuses applications par défaut

(12)

Le marché, le matériel, le potentiel

Version T-Mobile (US) –Noir, bronze et blanc

Version Orange (FR) –Blanc

Matériels disponible (Avril 2009) - Orange

 HTC Dream G1

Dernière minute : HTC annonce pour septembre le modèle HERO avec une nouvelle version d’android (sense) et interface entièrement redessinée… Juillet 2009

(13)

Le marché, le matériel, le potentiel Matériels disponible (Mai 2009) - SFR

 HTC Magic G2

(14)

Le marché, le matériel, le potentiel Matériels disponible (juin 2009)-BT

 Samsung i7500/s8000 (Orion)

(15)

Le marché, le matériel, le potentiel Matériels à venir

 Motorola (fin 2009)

 LG

 Sony Ericsson (fin 2009) *

 Huawei

 Leonovo

 Acer

 …

Des téléphones mais aussi

 Netbooks

 GPS **

 Lecteurs multimédia (Archos annonce pour septembre)

 TV !

* Sony Ericsson a annoncé qu’il utiliserait la prochaine version Android 2.0 Donut

** 22/6 :Le géant américain du GPS Garmin a décidé de ne plus recourir à ses propres intégrations de Linux sur ses terminaux. Elle a choisi pour les remplacer d’intégrer Android et Windows Mobile.

La présence d'Android par Fujitsu

(16)

Evolution de l’ IHM

 Android M3 –Nov 2007

 Android M5 –Mars 2008

(17)

Evolution de l’ IHM

 Android - R1.1RC33 Novembre 2008

 Android Cupcake Fevrier 2009

(18)

Evolution de l’ IHM

 Android Cupcake Custom HTC Sense UI

Juin 2009

(19)

Conclusions (provisoire…)

Les facteurs potentiellement bloquants :

L'omniprésence de Google peut agacer et faire peur...

La position de leader de l'iPhone et son arrivée il y a déjà plusieurs années sur le marché..

La création d'un véritable app-store avec des milliers d'applications...

La frilosité des opérateurs => partage de la valeur avec Google

Les facteurs clés de succès :

Le nom Google et les services associés

Une plateforme de développement banalisée => beaucoup plus de compétences disponibles que Symbian par exemple

L'Open Source, facteur de création d'un communauté productive et d'une adoption par la majorité des acteurs

Toutes les compétences autour d'Android existent sur Sophia, une opportunité à saisir pour notre communauté....

(20)

Introduction : Commission Open Source Telecom Valley

Le marché Android et les enjeux - positionnement et dernières avancées - Pascal Flamand - Janua

Anatomie de la plateforme Android et environnement de développement - Arnaud Farine - Expertise@ndroid

Pause café

Intégration d'un provider cryptographique / module Kernel /

Framework Dalvik - retour d'expérience - Nicolas Ponsini - Trusted Logic

Intégration d'une application de géolocalisation "off board" sous Android - retour d'expérience - Christophe Tomasini - Altran

Q/R avec la salle, partage d'expériences

(21)

Android: 2 parties

Système d'exploitation Linux

Environnement d'exécution Dalvik (Java)

Kit de développement Java disponible depuis 2007

Concours Android Developer Challenge (Google) –4 versions

Mai 2009 SDK 1.5 –Décembre 2009 Donut 2.0 Versions disponibles sur les matériels

 Souvent personnalisées par l'opérateur ou le constructeur

 1.0, puis 1.1_RC33

 Cupcake 1.5: correctifs, clavier virtuel, enrichissement fonctionnel (widget)

 Mise à jour via OTA

OS et SDK sont disponibles en Open Source

Développer une application ne requiert pas l'obtention de l'OS et réciproquement

(22)
(23)

OS Android: 2 couches inférieures

Linux kernel 2.6.24 ARM

Pas de système natif de fenêtrage

Pas de support Glibc

Optimisation mémoire, processus et alimentation

Gestion utilisateurs

Dalvik

VM Android

Optimisée embarqué

Multi instance

Optimisation mémoire, sécurité

Optimisation bytecode

Fichier Dex

(24)

Base de l'API

Point d'entrée pour les applications

Accès à toutes les ressources inférieures via librairie

Accès possible aux ressources C via JNI (bypass de cette couche)

(25)

Développement

Environnement

Windows XP/Vista

Mac OS 10

Linux J2SE

1.5

1.6

SDK Android

Eclipse Ganymede + plugin ADT

Optionnel: Outil dev C: Intégration code C/C++ en tant que librairie (JNI)

(26)

Une application est une succession d'écrans

Elle inclut un ensemble de descripteurs pour chaque écran

Un écran peut ouvrir un autre écran d'une même application ou d'une autre application

5 composantes majeures

Intent

Activity

Broadcast Receiver

Content Provider

Service

L'ensemble de ces composantes est décrit dans le fichier AndroidManifest.xml

Les applications ont pour extension APK (Android Package)

Développement

(27)

Activity

Une classe par Activity

Généralement le point d'entrée d'une application

Généralement une interface graphique, un écran

Cycle de vie Intent

Type d'action possible déclaré auprès du système

Indique le besoin ou le service offert Content Provider

Accès aux données partagées

Données internes ou externes à l'application

Encapsulation du schéma de la base

Pas de requête

-URI

-Services de manipulation des données fournis par le package

Développement

(28)

Services

Composants sans interface graphique

Activité de longue durée

Démarrer par context.startService: interne à l'application

Démarrer par context.bindService: externe à l'application Broadcast Receiver

Réagit à des évènements externes

- Logiciel: Alarme, notifications...

- Matériel: Activation puce GPS, exting

Réveiller une application, afficher un message, lancer une activity

Développement

(29)

Développement

Construction d'une application

Code source

Byte Code Java

Byte code optimisé Génération fichier.dex

Construction du package destiné à être installé

(30)

Hello Android

Création d'un nouveau projet

(31)

Hello Android

Arborescence du fichier créé

Construire le projet via le menu Project/Build

(32)

Activity

Une classe étendant de Activity Point d'entrée d'une application

Généralement un écran d'une application (plein écran ou non) Comportement défini dans le fichier AndroidManifest.xml

Une Activity peut

Être sans interface

Être une fenêtre flottante

Retourner des valeurs

Lancer d'autres Activity Possède un cycle de vie

(33)

Activity

Cycle de vie d'une Activity

(34)

Activity

Différentes Activity disponibles - android.app.*

ActivityGroup

ListActivity

AliasActivity

ExpandableListActivity

PreferenceActivity

LauncherActivity

TabActivity

Une Activity est capable de lancer une autre Activity –que nous nommerons SubActivity

Interne à l'application

Externe à application

Récupérer le résultat d'une SubActivity

Notion importante d'Intent

(35)

Intent

Intent

Définir une action à effectuer

Créer des liens entre application

Décrit par une action (VIEW, EDIT, MAIN,...)

URI pour renseigner les données à traiter

IntentFilter

Décrit les capacités d'une application

Attaché à une Activity

Écoute les demandes d'Intent (handler)

Enregistré au niveau système

Appelant (intent) Activity, Services...

Recherche de l'IntentFilter le mieux adapté par

l'IntentResolver Activity est lancée

(36)

Activity

Lancer une autre Activity

Définition du type d'Intent

Définition du chemin de l'Activity

startActivity

StartActivityForResult

Lancer l'activity

Récupérer le résultat

startActivity(new Intent(this, ScoreActivity.class));

(37)

Descripteur d’ application

1 fichier de description de l'application: AndroidManifest.xml Descripteur de l'application

Renseignements sur l'application (nom, version de code, SDK supporté...)

Définit le comportement des Activity et leurs actions

Déclare auprès du système les Intent accessibles

Définit les services, broascat receiver et content provider

Déclaration des ressources nécessaires (applications, Internet, matériels, données...)

L'utilisateur est toujours prévenu à l'installation des ressources

requises pour le bon fonctionnement de l'application. Il peut accepter ou refuser.

(38)

IHM : Présentation

Différents de J2ME, AWT ou Swing

Deux méthodes de création

XML (recommandé)

Code Java

Avantages XML

Lisibilité du code Java

Lisibilité de la construction de l'IHM

Allègement du code Java

Rapidité de développement (Similaire à un page HTML)

Moins de risque d'erreur

Large éventail de composants déjà disponibles Personnalisation possible de chaque élément Système de « thèmes » disponible

(39)

IHM : les layouts, les vues

Chaque composant correspond à un Layout

Présent dans /res/layout

Représente un écran

Représente un composant spécifique d'un écran

Chaque composant

Dispose d'un identifiant unique (de préférence)

Peut être accédé, ajouté, modifié et supprimé depuis le code Java

android:id=@+id/monidentifiant pour votre composant

android:id=@android:id/empty pour référencer un composant spécifique d'Android

Identification par le fichier R.java (généré par aapt)

Compiler sous forme de vue embarquée dans le fichier dex

(40)

IHM : les layouts, les vues

Ecrire son fichier XML

Contient obligatoire un élément racine (Root)

Peut contenir autant de layout ou vue que désiré

Sauvegardé sous /res/layout/monlayout.xml

Ne pas contenir de majuscule ou de chiffre

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

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

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

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

</LinearLayout>

(41)

IHM : les layouts, les vues

Charger le layout désiré

Référencés sur le nom de fichier (sans extension) dans R.java

R.layout.monlayout

setContentView(layout)

Un layout peut être chargé au sein d'un autre composant en utilisant l'objet LayoutInflater

Chaque composant dispose d'un certain nombre de paramètres

android:layout_width et android:layout_height (fill_parent, wrap_content...)

android:id, android:text, android:background...

Chaque composant dispose de ses arguments propres:

android:orientation pour LinearLayout (vertical, horizontal)

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

(42)

IHM : string et multilinguisme

Les chaines de caractères et l'IHM

Fichier XML

/res/values

Par défaut: string.xml

<string name=''cle''>Valeur à afficher</string>

Multilingues

Basée sur la locale du système

/res/values-fr, /res/values-en contenant un fichier string.xml

Utiliser les mêmes clés pour afficher la valeur dans la langue correspondante

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

<resources>

<string name="hello">Hello World, HelloActivity!</string>

<string name="app_name">Mon Hello Android</string>

</resources>

(43)

IHM : Les menus

Menu Option Sous menu Menu contextuel

(44)

IHM : évènements

Gérés comme en Java / AWT / Swing / J2ME Mise en place de Listener (écouteurs)

Peuvent être appliqués sur chaque composant View

Évènements supplémentaires en fonction du type de la vue Processus

Récupérer l'objet vue concerné

Ajout du listener

Implémentation des actions à réaliser par le listener

Button monBoutton = (Button)findViewById(R.id.monBouton);

b.setOnClickListener(evtClickSurMonBoutton);

OnClickListener evtClickSurMonBoutton = new OnClickListener(){

public void onClick(View v){

// Implémentation }; }

(45)

IHM : Boite de dialogue

Une vue affichée sur la couche supérieure du contenu courant Composition

Titre, Texte

Icône

Boutons

Animation, personnalisable

Bloquante

AlertDialog.Builder

Personnalisable à volonté

(46)

IHM : Boite de dialogue

Des listes dans les boites de dialogues

Barre de progression (fin connue ou indéterminée)

Des listes et boutons radios

(47)

3 types de données persistantes:

Préférences utilisateurs

Base de données (Sqlite3)

Content Provider

Gestion de vos données dans des fichiers

(48)

Les préférences utilisateurs

Composants fournis

IHM

Données

Simple

Ensemble de clés (String)/valeurs(primitive) Propre à l'Activity ou à l'application entière Déclarations dans AndroidManifest

Données sauvegardées dans

/data/data/monpackage/shared_prefs/monpackage.xml

(49)

Bases de données

SQLITE

Projet Open Source

Base de données transactionnelles

Pas de partie serveur

Toutes les tables sont contenues dans un seul fichier

Crossplatform

Données typées

Langage SQL

Clé primaire

Non disponible: FOREIGN_KEY, RIGHT/LEFT_OUTER_JOIN, certaines options ALTER_TABLE

SQLITE3

Librairie de manipulation

Accessible par adb shell

Type de données supportées: NULL, INTEGER, REAL, TEXT, BLOB

(50)

Bases de données SQLITE & Android

Aucune base par défaut: tout doit être construit

Manipulation SQLiteDatabase

SQLiteOpenHelper

- onCreate

- onUpdate

Le fichier est sauvegardé par défaut dans

/data/data/monpackage/databases

L'enregistrement de fichier de base de données sur une carte mémoire ne pourra être réalisé par SQLiteOpenHelper, recours à l'objet SQLiteDatabase

(51)

Manipulation des données

execSQL: exécution de commande SQL passée en paramètre sous forme de chaine de caractères (dans la classe de l'adapter)

Insert(), delete() et update() de SQLiteOpenHelper

- Nom de la table concernée

- ContentValues().put(nom de colonne, valuer)

- Permet de retourner des valeurs (ex.: identifiant d'un nouveau élément ajout)

Bases de données

db.execSQL("insert into " + DATABASE_TABLE_USER

+ " (" + COL_TAB_HELLO_USER_NOM

+ ") values('" + name + "');");

ContentValues cv = new ContentValues();

cv.put(COL_TAB_HELLO_USER_NOM, name);

db.insert(DATABASE_TABLE_USER, COL_TAB_HELLO_USER_ID, cv);

(52)

Query

Bases de données

public Cursor query (String table,// nom de la table

String[] Columns, // nom des colonnes a retourner ou null pour toute String Selection, // clause where, sans le mot 'where' ex.: nom=?

String[] SelectionArgs, // tableau ordonné des valeurs // utilisées dans la clause where

String GroupBy, // argument groupBy, ex: nom, prenom –null sinon String Having, // argument clause having –null sinon

String OrderBy) // argument d'ordonnancement ex: nom - null sinon

public void getInfo(String nomRecherche){

String[] columns=new String[]{"nom", "prenom"};

String[] params={nomRecherche};

Cursor result=db.query(this.DATABASE_TABLE_USER, columns, "nom=?",params,

null, null, null);

}

(53)

Toutes les URI commençant par URI

Encapsulation de la structure des données Base de données, fichiers plats, accès distant A partir d'une URI

Create

Read

Update

Delete

Utilisation de ContentProvider existant d'autres applications

Créer, utiliser et partager vos données Définition d'une URI

Content provider

PREFIXE://IDENTIFIANT DU TYPE DE DONNEES/DEFINITION DE LA DONNEES/ENREGISTREMENT content://contact/people/123

content://com.mycompany.hello/user/53

(54)

Réaliser une requête

managedQuery() depuis un objet Activity

- URI

- Un tableau des propriétés du ContentProvider à obtenir dans le résultat (nommé projection)

- Les contraintes (clause Where)

- Ensemble des paramètres permettant de compléter les contraintes (? dans la clause where)

- Clause d'ordonnancement

Retourne un Cursor

Propriété d'un ContentProvider = Colonnes d'une base de données

Content provider

private static final String[] PROJECTION = new String[] { Provider.Constants._ID, Provider.Constants.TITLE, Provider.Constants.VALUE};

....constantsCursor=managedQuery(Provider.Constants.CONTENT_URI, PROJECTION, null, null, null)

(55)

Insérer des enregistrements

insert()

- Uri + contentValues

- Retourne l'identifiant de l'élément inséré

bulkInsert()

- Tableau d'Uri et tableau de ContentValues pour ajouter plusieurs enregistrements en une seule fois

- Retourne le nombre d'éléments insérés

Suppression d'un enregistrement

Delete

- Uri, clause where, arguments complétant la clause where

- Les informations dépendantes à la table visée seront également supprimées (cascading)

- Retourne le nombre d'éléments supprimés

Mise à jour

Update

- Uri, valeurs à insérer, clause where, arguments complétant la clause where

- Retourne le nombre d'éléments mis à jour

Content provider

(56)

Composant dédié à l'affichage de liste

Gestion du Cursor ou de listes

Mise à jour automatique lors d'un ajout, modification, suppression

Composants graphiques déjà disponibles

Personnalisation de l'affichage possible

Adapter: mapping entre la vue et les données

Processus

Utilisation d'un composant gérant un adapter (spinner, listview...)

Récupération d'un Cursor

Création de l'adapter

Affichage

En cas de personnalisation de l'affichage, nécessité de créer son propre Adapter

IHM, Cursor et Adapter

(57)

Exemple simple: ListActivity

Une Activity devient une ListActivity

Obligation de présence d'un objet ListView dans le layout

Id spécifique: android:id="@android:id/list"

SimpleAdapterCursor

Application de l'adapter sur la vue courante

IHM, Cursor et Adapter

Cursor c = managedQuery(uri, PROJECTION, null, null, null);

startManagingCursor(c);

ListAdapter adapter = new SimpleCursorAdapter(

this, android.R.layout.two_line_list_item, c,PROJECTION,

new int[]{android.R.id.empty, android.R.id.text1, android.R.id.text2}

setListAdapter(adapter););

(58)

Services

Process actif tant que la mémoire n'est pas limitée

Attention à la surcharge!

Implémentation simple

- Étend de Services

- OnCreate

- OnStart

- OnDestroy

- Déclarations dans l'Android Manifest

(59)

AIDL

Android Interface Description Language

Partage du service avec d'autres applications (Inter Process Communication)

Développement d'interface

N'acceptes que

- Des primitives

- Des String et CharSequence

- List ou Map

- Autre AIDL

- Autres classes Java implémentant Parcelable

void retrieveInfo(in String nom, out String Info)

- in / out: définit le sens de l'information

- in: paramètre d'entrée est utilisée pour lecture uniquement par le service

- out: paramètre pouvant être modifié par le service et propagé

Services

(60)

Notifications

Toutes les alertes émanant du système ou d'autres applications

Affichage d'une icône et/ou texte dans la barre de notifications

Coloration de la led du téléphone

NotificationManager

Hardware (son, led, vibreur)

Icons / Texte

Obtenir une instance du NotificationManager

Création de l'objet Notification (icon, message...)

Création d'un PendingIntent pour la finalité de la notification (ouverture d'une activity)

Attribuer le pendingIntent à la notification Envoyer la notification

Alarmes, notifications

(61)

Librairies Apache HttpComponents HTTP

Ajouter des librairies supplémentaires pour réaliser d'autres protocoles: XMPP, SMTP...

HTTP POST/GET

HttpClient

Renseigner les informations sur la requête

execute()

Requête GET

Accès distants

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpGet httpget = new HttpGet(url);

try{HttpResponse response = httpclient.execute(httpget);

}catch (ClientProtocolException cpe) {

Log.e(TAG, "ClientProtocolException retrieveInfo:" + cpe);

}

(62)

Requête POST

Envoi de fichier par POST

Utilisation de HttpURLConnection

Définition des paramètres de la connexion (entrée, sortie, boundary, méthodes...)

Ouverture d'un DataOutputStream sur la connexion

Pour chaque élément à envoyer:

- Ouverture du fichier en lecture

- Écriture du type de données et du flux dans le DataOutputStream

Accès distants

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpPost httpost = new HttpPost(http://www.monserveur.com);

List<NameValuePair> nvps = new ArrayList<NameValuePair>();

nvps.add(new BasicNameValuePair("cle1", valeur1));

nvps.add(new BasicNameValuePair("cle2", valeur2));

httpost.setEntity(new UrlEncodedFormEntity(nvps, null));

HttpResponse response = httpclient.execute(httpost);

(63)

Réponse d'une requête

HttpResponse

Sur retour de la commande execute

Création d'un HttpEntity par httpResponse.getEntity()

Lecture d'un InputStream sur httpEntity.getContent()

Accès distants

(64)

Blocage de l'application lors des accès distants (Wake Lock) Solution (recommandation!)

Utilisation de Thread pour les traitements bloquant: accès distant, calculs...

Les threads n'ont pas accès aux IHM

Système de message de communication entre un Thread et un Handler

Classe implémentant l'interface Runnable

Constructeur prenant en paramètre l'Activity qui appellera le Thread

Surcharge de la méthode run() dans laquelle

Les traitements sont exécutés

Les messages sont envoyés au Handler

Création d'un objet Handler

Gestion des codes reçus

Mise à jour de l'IHM de l'Activity appelante

Une Thread ne peut être tuée, le système s'en charge

Gestion d'un état permettant ou non d'appeler ou pas le contenu de run()

Utilité des Threads

(65)

Gestion des appels entrants et sortants Connexion GSM/Bluetooth/Wifi/GPS Envoi/réception SMS

SearchManager Géolocalisation

Localisation

Map/MapView

Accéléromètre

Multimedia

Son

Caméra

2D/3D

(66)

Livres

Busy coder's guide to Android Development –Mark. L. Murphy –Edition CommonsWare 444 pages + 2 livres tutoriaux et Advanced Development

http://www.commonsware.com

Hello Android, Introducing Google's mobile development Platform –Ed Burnette –220 pages

http://www.pragprog.com

Ressources en lignes: site web

http://developer.android.com (documentations officielle)

http://sites.google.com/site/io/ (recherche sur Mobile, présentations vidéos) http://www.anddev.org (tutoriaux, forums)

http://www.androidcommunity.com (actualités)

http://www.devx.com/wireless (actualités, tutoriaux) http://www.helloandroid.com (actualités)

Ressources en lignes: forums

http://groups.google.fr/group/android-developers http://groups.google.fr/group/android-beginners

Ressources francophones: actualités et développement

http://www.frandroid.com (actualités, forums) http://www.pointgphone.com (actualités, forums)

(67)

Introduction : Commission Open Source Telecom Valley

Le marché Android et les enjeux - positionnement et dernières avancées - Pascal Flamand - Janua

Anatomie de la plateforme Android et environnement de développement - Arnaud Farine - Expertise@ndroid

Pause café Pause caf é

Intégration d'un provider cryptographique / module Kernel /

Framework Dalvik - retour d'expérience - Nicolas Ponsini - Trusted Logic

Intégration d'une application de géolocalisation "off board" sous Android - retour d'expérience - Christophe Tomasini - Altran

Q/R avec la salle, partage d'expériences

(68)

Introduction : Commission Open Source Telecom Valley

Le marché Android et les enjeux - positionnement et dernières avancées - Pascal Flamand - Janua

Anatomie de la plateforme Android et environnement de développement - Arnaud Farine - Expertise@ndroid

Pause café

Intégration d'un provider cryptographique / module

Kernel / Framework Dalvik - retour d'expérience - Nicolas Ponsini - Trusted Logic

Intégration d'une application de géolocalisation "off board" sous Android - retour d'expérience - Christophe Tomasini - Altran

Q/R avec la salle, partage d'expériences

(69)

Technologies ouvertes

Sécurité embarquée

Produits & Solutions pour

•Smart Cards & Secure Tokens jTOP

•Technologie sans contact Trusted NFC

•Plateformes mobiles

Trusted Foundations

Software

Services de consulting et d’ é valuation en

sécurité

(70)

Environnement ouvert

Plateforme

Applications Applications

Services Sécurisés Services Sécurisés

Monde Normal

(trop riche pour être certifié)

Monde Sécurisé

(certifiable)

SChannel

Trusted Foundations Software Trusted Foundations Software

Environnement sécurisé programmable

permettant l’ exécution de

services haut

niveau

(71)

© 2009 Trusted Logic S.A.

OMA DRM 2

WMDRM / PlayReady

CPRM

OMA BCAST

Marlin

Trusted NFC

Trusted User Interface

Intégration sécurisée :

Windows Mobile

Linux

Android

Symbian

Ipsec (VPN)

OpenSSL

SW TPM/MTM

Password Storage

One-Time Password

Secure Storage

Cryptographic providers

Foundations

(72)

Objectif : Proposer aux applications Android un provider cryptographique de type JCE / JCA offrant la sécurité du Trusted Foundations SW aux clés et données manipulées.

JCE / JCA = Java Cryptographic Extension / Java Cryptographic Architecture

Un Provider implémente les interfaces spécifiées par les packages JCE / JCA.

Javax.crypto.* fournit les classes et les interfaces pour effectuer des opérations cryptographiques sur les algorithmes symmétriques.

Java.security.* fournit les classes et les interfaces pour le framework de sécurité Java. Elles permettent entre autres de réaliser des opérations:

 de génération de nombres aléatoire

 de digests

 de signatures à l’aide d’algorithmes asymmétriques

 …

Cryptographique sur plateforme OMAP3

(73)

Bibliothèques C de communication avec les services

sécurisés Module Kernel

d’accès au monde sécurisé

Provider cryptographique Java (JCE / JCA) Applications utilisant des opérations crypto

Cryptographique sur plateforme OMAP3

(74)

Module Kernel pour accéder au monde sécurisé

(1/2)

Kernel Android

Cloner le kernel

home# git clone git://git.omapzoom.org/repo/omapkernel.git home# cd omapkernel

home# git checkout --track -b android-2.6.27 origin/android-2.6.27 home# git checkout android-2.6.27

home# git pull

Recompiler le kernel : choisir la configuration / cross-compiler”avec la chaîne de compilation ARM Code Sourcery ARM Sourcery G++ 2007q3.

Kernel 2.6.27 et bientôt kernel 2.6.29 : le site permet de profiter des dernières nouveauté comme un meilleur support des fonctions de mise en veille.

Cryptographique sur plateforme OMAP3

(75)

Module Kernel pour accéder au monde sécurisé

(2/2)

Développement d’un “Character device driver”pour abstraire l’accès au monde sécurisé vu comme un device:

Points d’entrée : open/release/ioctl/mmap/read/write

Communication avec le user space : copy_from(to)_user/mapped memory

Gestion des accès multiples : objects de synchronisation, Kernel Préemptif

Power Management : suspend/resume + utilisation du réfrigérateur”pour les threads actifs lorsque l’utilisateur met l’appareil en veille explicitement.

Accès au hardware : mapping et accès registres (ex: controleur DMA)

Insertion du module : dynamique / statique

Driver sous License GPL2 : son code doit être rendu public.

Cryptographique sur plateforme OMAP3

(76)

Provider JCE/JCA au dessus de Dalvik

(1/2)

Application Java (.apk) dans /system/app

Android.mk

AndroidManifext.xml (bibliothèques Java à utiliser, main, ressources …)

Source Java

Bibliothèque Java (.jar) dans /system/framework

Android.mk

Source Java

Glue JNI

Editer le fichier /system/etc/permissions/platform.xml et ajouter cette bibliothèque pour la rendre accessible aux applications

Bibliothèque native (.so) dans /system/lib

Android.mk

Source C au dessus de bionic

TestsProviderCrypto.apk Code Java

+ AndroidManifest.xml + Android.mk

ProviderCrypto.jar Code Java

+ JNI + Android.mk

ProviderCrypto.so Code C + Android.mk

ProviderCrypto.ko JCE / JCA Interfaces

Cryptographique sur plateforme OMAP3

(77)

Code source Android

Installation de :

paquets type sun-java6-jdk/git-core/flex/bison

Installation de la chaine de compilation ARM Code Sourcery ARM Sourcery G++

2007q3

Installation de l’outil google : «repo»

Cloner et builder la distribution”:

home# repo init -u git://git.omapzoom.org/repo/android/platform/omapmanifest.git home# repo sync

home# make -j2 (et attendez 1h30 ou plus selon votre machine )

Le système de build est totalement intégré et permet de gérer les dépendances à tous les niveaux : application / bibliothèques / code Java / code C.

Android.mk : insérer dans les sources Android un fichier Android.mk (makefile-like) pour générer une Application ou une librairie.

Provider JCE/JCA au dessus de Dalvik

(2/2)

Cryptographique sur plateforme OMAP3

(78)

Retour d’ expérience

(1/2)

Outil Repo pour synchronization avec les sources

C’est un outil Google qui permet d’abstraire « git» et de gérer simplement la synchronization avec plusieurs repositories.

Système de build

Pas de « platform Builder » graphique élaboré

Une « distribution » intégrée : tapez make et ça fonctionne !!

Gestions des dépendances et ajout d’applications et de bibliothèques simplement grâce à un Makefile-like : Android.mk

Réutilisation de Linux très utile au développement

L’environnement en général : git / commandes / Makefiles

Le kernel et donc les modules kernel

Le développement et la validation sur target sont facilités grâce à NFS par exemple

Utilisation d’une busybox pour les commandes traditionnelles

Gestion des droits et des permissions

Cryptographique sur plateforme OMAP3

(79)

Retour d’ expérience

(2/2)

Bionic

ucLibc - like

Plus légère mais l’essentiel est là.

Des modifications sur les objets de synchro et les wide-char par exemple mais rien d’insurmontable !

Réutilisation de Java

Le Java de base est là et les paquets java.security.* et javax.crypto.* pour le supports du JCE/JCA aussi

JNI est supporté et complètement compatible

Simple pour le développement d’application de tests

Utilisation du SDK Android pour développer toutes ces parties portables sur PC.

Debug

Pas d’utilisation des outils spécifiques Android pour cette intégration

Utilisation d’un debugger Jtag pour le debug de certaines fonctionnalités du driver

Cryptographique sur plateforme OMAP3

(80)

Conclusions

Nicolas Ponsini Project Manager Professional & Consumer Devices nicolas.ponsini@trusted-logic.com

Cryptographique sur plateforme OMAP3

(81)

Introduction : Commission Open Source Telecom Valley

Le marché Android et les enjeux - positionnement et dernières avancées - Pascal Flamand - Janua

Anatomie de la plateforme Android et environnement de développement - Arnaud Farine - Expertise@ndroid

Pause café

Intégration d'un provider cryptographique / module Kernel /

Framework Dalvik - retour d'expérience - Nicolas Ponsini - Trusted Logic

Intégration d'une application de géolocalisation "off board" sous Android - retour d'expérience - Christophe Tomasini - Altran

Q/R avec la salle, partage d'expériences

(82)

navigation « off-board » sous Android

SC2 - Software Competence Centre

Depuis 1999…

BMW/VW systèmes d’Infotainment

Certification OSGi

Outillage de test automatique

Chaine de développement pour le design/intégration HMI

Architecture et Développement de plateforme logicielle

Portail de Connectivité sans-fil

Web Services avec reconnaissance vocale

Navigation mobile off-board

VDO Siemens Continental

(83)

navigation « off-board » sous Android

Navigation Mobile Off-Board

Application MIDP2.0

Navigation « off-board »

Guidage en temps réel: carte + pictogrammes + audio

POIs: cinémas, restaurant, radars, etc.

Sur le marché en 2005 en France (SFR) et en Allemagne (T-Mobile)

(84)

navigation « off-board » sous Android

Android Plateforme & APIs

Plateforme basée sur le langage Java APIs

Téléphonie & Connectivité : GSM, Bluetooth, EDGE, 3G, Wifi, etc.

Audio & Vidéo

Camera, GPS, boussole, etc.

Graphismes 2D/3D Google Maps

(85)

navigation « off-board » sous Android

Android - Environnement de développement

(1/2)

Kit de développement

Documentation, exemples et librairies

Outils : émulateur, debugger, moniteur de VM, IHM

Nouveauté : Native Development Kit (NDK) Intégration dans Eclipse (plugin ADT)

Création graphique d’IHM

Gestion des ressources: images, localisation, spécialisation

Chaine de développement complète

(86)

navigation « off-board » sous Android

Android - Environnement de développement

(2/2)

(87)

navigation « off-board » sous Android

Développement pour Android - Objectifs

Portage fonctionnalités existantes

IHM

Audio

Persistance

Internationalisation Nouvelles fonctionnalités

Intégration de Google Maps

Diaporama géolocalisé basé sur Flickr

Support de l’écran tactile

Participation à l’«Android Challenge »

(88)

navigation « off-board » sous Android

Développement pour Android - Google Maps

Vues plan / satellite

Gestion des données

Zoom & défilement

Surcharge de la carte

(89)

navigation « off-board » sous Android

Développement pour Android - Diaporama géolocalisé

Basé sur Flickr

Utilisation de la position courante

Recupération de photos géo- taggées

(90)

navigation « off-board » sous Android

Conclusion & Perspectives

Des outils de développement

Une communauté

Une plateforme en évolution

Des terminaux

Android Market

Christophe Tomasini Praxis SC2 by Altran christophe.tomasini@altran.com

(91)

QUESTIONS / REPONSES

Merci pour votre

attention

Références

Documents relatifs

Florida State University College of Law Research Center.. Android Apps

• It is a open source software platform and operating system for mobile devices.. • Based on the

En vue de soutenir l’objectif plus large d’améliorer l’accès au secteur de la santé et l’expérience des utilisateurs des services pour les adultes émergents 2SLGBTQ+, la

1 seul répertoire contient tous les fichiers propre à l'application File context.getFilesDir(). ● Les fichiers ne sont accessibles que

Mais cette derni~re m6thode n'6tant pas ~tablie avec une rigueur suffisante, le thdor~me de W~IERSTRASS signifie un grand progr~s dans la th~orie de la

In Table 5, we enumerate the most popular domains associated with trackers, where popularity is defined as the number of tracker URLs, seen across all the apps, associated with

// la méthode setContentView prend l'objet layout en paramètre // ce paramètre est conservé dans &#34;l'objet layout&#34; de notre instance // les mises à jour sont donc

/ Fax.: +216 73362 100 Email: contact@itgate-training.com Web: www.itgate-training.com Adresse : 12 Rue Abdelkadeur Daghrir - Hammam Sousse 4011 – Tunisie.. Formation Android