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



Documents pareils
Android 4 Les fondamentaux du développement d'applications Java

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

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

Iphone vs. Android. Mardi 17 Novembre 2009 Paris, la Défense. Xavier PARADON, Directeur Technique Valtech Training

Les fondamentaux du développement d applications Java

TP SIN Programmation sur androïde Support : eclipse

TD/TP 1 Introduction au SDK d Android

Développement d applications professionnelles avec Android 2

Android. Présentation d Android. Florent Garin

Plate formes mobiles. Utilisation. Contexte 9/29/2010 IFC 2. Deux utilisations assez distinctes :

TP au menu «UI ANDROID»

Tutorial pour une application simple

Chapitre 1 Retour en arrière

Android. Programmation. De la conception au déploiement avec le SDK Google Android 2. Damien Guignard Julien Chable Emmanuel Robles

Installation et prise en main

Point sur les solutions de développement d apps pour les périphériques mobiles

Table des matières. Partie I Concepts de base Préface... VII

1. Base de données SQLite

Votre premier projet Android

Développement tablette Android. SophiaConf2011 Par Arnaud FARINE

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

Optimiser pour les appareils mobiles

Warren PAULUS. Android SDK et Android x86

1.3 Gestion d'une application

TP2 : Client d une BDD SqlServer

Android et le Cloud Computing

+33 (0) Sarl ISB Altipolis2 av. Du Général Barbot Briancon - France

WINDEV MOBILE. ios SMARTPHONE SUPPORT: IOS, ANDROID, WINDOWS PHONE 8.

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

Projet Android (LI260) Cours 2

Cursus Sage ERP X3 Outils & Développement. Le parcours pédagogique Sage ERP X3 Outils et Développement

SOMMAIRE

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

DÉVELOPPEMENT ANDROID

SOMMAIRE. Introduction... 3 A. ANDROID... 4

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

MITEL UNIFIED COMMUNICATOR ADVANCED

Formation Utiliser son iphone ou son ipad

Béatrice Bertrand CDDP de l Eure. Béatrice Bertrand CDDP de l'eure

LES TABLETTES : GÉNÉRALITÉS

Environnements de développement (intégrés)

DÉVELOPPEMENT D UNE APPLICATION DE COMMUNICATION BLUETOOTH SUR ANDROID. Projet de fin d étude VAP «Architecte de Services en Réseau»

Stockage de données sous Android

Initiation à JAVA et à la programmation objet.

LES OBJETS CONNECTES

IBM Endpoint Manager for Mobile Devices

Tutoriel Android. Pour démarrer la programmation d'applications Android

Intervenants. Thomas d'erceville Project Manager. Christian NGUYEN Practice Manager IT Quality

1 JBoss Entreprise Middleware

BUREAU VIRTUEL. Utilisation de l application sur ipad. Guide utilisateur. Sciences Po Utilisation du bureau virtuel sur ipad 1 / 6

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Le touristonaute en mobilité

SQL Server Installation Center et SQL Server Management Studio

Introduction ANDROID

Formation WinDev Mobile

Vulgarisation Java EE Java EE, c est quoi?

Logiciel Enterprise Guide Version 1.3 Windows

SECURIDAY 2013 Cyber War

WysiUpStudio. CMS professionnel. pour la création et la maintenance évolutive de sites et applications Internet V. 6.x

Les tablettes. Présentation tablettes Descriptif Fournisseurs Caractéristiques Comparatifs Conseils Perspectives Démonstration

Fiche produit. Important: Disponible en mode SaaS et en mode dédié

Ceci est un Chromebook, ton ordinateur!

STATISTICA Version 12 : Instructions d'installation

1. Découvrir l iphone 3G et 3G S

Comment télécharger et

Programmation Android L3 informatique

APPAREILS ACCESSIBLES

domovea Portier tebis

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Espace numérique de travail collaboratif

Espace de travail collaboratif

CHOIX ET USAGES D UNE TABLETTE TACTILE EN ENTREPRISE

Joomla! Création et administration d'un site web - Version numérique

contact@nqicorp.com - Web :

LES TABLETTES TACTILES

Android. Android is an environment where the biggest limitation is your imagination. P1 1

Machine virtuelle Java pour Palm TX

Linux embarqué: une alternative à Windows CE?

Systèmes en réseau : Linux 1ère partie : Introduction

Solutions de Virtualisation du poste de travail. ViewSonic vous présente le poste de travail virtuel du futur

La technologie Java Card TM

CTIconnect PRO. Guide Rapide

Système Principal (hôte) 2008 Enterprise x64

Créer des applications Android

Manuel de System Monitor

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt UFR SITEC Master 2 EESC 11 janvier 2012

1. Généralités Certifications Ouverture du carton Contenu de la boîte... 3

Content Management System V.3.0. BlackOffice CMS V3.0 by ultranoir 1

Annexe Android Studio

L Orchestration de Services Web avec Orchestra. Goulven Le Jeune Orchestra Project Manager

Annexe : La Programmation Informatique

Guillaume GENS

Gestion des différentes tailles d écran

À propos de Parallels Desktop 9 pour Mac

Manuel logiciel client for Android

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

MITEL MICOLLAB CLIENT

Compte Rendu d intégration d application

Transcription:

Présentation du système d exploitation Open Source ANDROID Commission OpenSource Telecom Valley - -

SOMMAIRE 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

SOMMAIRE 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

Commission Open Source 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...

SOMMAIRE 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

Présentation de Janua 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.

Google Acteur majeur d'internet Android Le marché, le matériel, le potentiel 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

Android Le marché, le matériel, le potentiel 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

Open Handset Alliance (OHA) Android Le marché, le matériel, le potentiel

Android Le marché, le matériel, le potentiel Stratégie Google : OpenSource Plateforme mobile ouverte Plus de revenus Application Web riche Utilisateurs nombreux Développeurs nombreux Android Market / Google Checkout Publicité mobile

Android 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

Android Le marché, le matériel, le potentiel Matériels disponible (Avril 2009) - Orange HTC Dream G1 Version Orange (FR) Blanc Version T-Mobile (US) Noir, bronze et blanc 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

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

Android Le marché, le matériel, le potentiel Matériels disponible (juin 2009)-BT Samsung i7500/s8000 (Orion)

Matériels à venir Motorola (fin 2009) LG Sony Ericsson (fin 2009) * Huawei Leonovo Acer Android Le marché, le matériel, le potentiel Des téléphones mais aussi Netbooks GPS ** Lecteurs multimédia (Archos annonce pour septembre) TV! La présence d'android par Fujitsu * 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.

Android Evolution de l IHM Android M3 Nov 2007 Android M5 Mars 2008

Android Evolution de l IHM Android - R1.1RC33 Novembre 2008 Android Cupcake Fevrier 2009

Android Evolution de l IHM Android Cupcake Custom HTC Sense UI Juin 2009

Android 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é...

SOMMAIRE 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

Anatomie d Android 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

Anatomie d Android

Anatomie d Android 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

Anatomie d Android 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)

Anatomie d Android 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)

Anatomie d Android Développement 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)

Anatomie d Android Développement 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

Anatomie d Android Développement 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

Anatomie d Android 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é

Anatomie d Android Hello Android Création d'un nouveau projet

Anatomie d Android Hello Android Arborescence du fichier créé Construire le projet via le menu Project/Build

Les Activity et leurs interactions 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

Les Activity et leurs interactions Activity Cycle de vie d'une Activity

Les Activity et leurs interactions 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

Les Activity et leurs interactions 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

Les Activity et leurs interactions Activity Lancer une autre Activity Définition du type d'intent Définition du chemin de l'activity startactivity startactivity(new Intent(this, ScoreActivity.class)); StartActivityForResult Lancer l'activity Récupérer le résultat

Les Activity et leurs interactions 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.

Interface graphique (IHM) 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

Interface graphique (IHM) 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

Interface graphique (IHM) 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>

Interface graphique (IHM) 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) public void oncreate(bundle savedinstancestate){ super.oncreate(savedinstancestate); setcontentview(r.layout.main); } 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)

Interface graphique (IHM) 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> <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">hello World, HelloActivity!</string> <string name="app_name">mon Hello Android</string> </resources> 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

Interface graphique (IHM) IHM : Les menus Menu Option Sous menu Menu contextuel

Interface graphique (IHM) 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 } };

Interface graphique (IHM) 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é

Interface graphique (IHM) IHM : Boite de dialogue Des listes dans les boites de dialogues Des listes et boutons radios Barre de progression (fin connue ou indéterminée)

Données persistantes 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

Données persistantes 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

Données persistantes 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

Données persistantes 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

Données persistantes Bases de données 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) db.execsql("insert into " + DATABASE_TABLE_USER + " (" + COL_TAB_HELLO_USER_NOM + ") values('" + name + "');"); Insert(), delete() et update() de SQLiteOpenHelper - Nom de la table concernée ContentValues().put(nom de colonne, valuer) ContentValues cv = new ContentValues(); cv.put(col_tab_hello_user_nom, name); db.insert(database_table_user, COL_TAB_HELLO_USER_ID, cv); - Permet de retourner des valeurs (ex.: identifiant d'un nouveau élément ajout)

Données persistantes Bases de données Query 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); }

Données persistantes Content provider 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 PREFIXE://IDENTIFIANT DU TYPE DE DONNEES/DEFINITION DE LA DONNEES/ENREGISTREMENT content://contact/people/123 content://com.mycompany.hello/user/53

Données persistantes Content provider 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 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)

Données persistantes Content provider 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

Données persistantes IHM, Cursor et Adapter 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

Données persistantes IHM, Cursor et Adapter 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 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);

Services et Multithreading 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

Services et Multithreading Services 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 et Multithreading Alarmes, notifications 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

Services et Multithreading Accès distants 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 DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(url); try{ HttpResponse response = httpclient.execute(httpget); } catch (ClientProtocolException cpe) { Log.e(TAG, "ClientProtocolException retrieveinfo:" + cpe); }

Services et Multithreading Accès distants Requête POST 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); 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

Services et Multithreading Accès distants 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()

Services et Multithreading Utilité des Threads 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()

Autres composants 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

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)

SOMMAIRE 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

SOMMAIRE 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

Trusted Logic en bref Produits & Solutions pour Smart Cards & Secure Tokens jtop Technologie sans contact Trusted NFC Plateformes mobiles Trusted Foundations Software Sécurité embarquée Technologies ouvertes Services de consulting et d évaluation en sécurité

Trusted Foundations Software Monde Normal Monde Sécurisé (trop riche pour être certifié) (certifiable) Applications Services Sécurisés Trusted Foundations Software Environnement ouvert SChannel Plateforme Environnement sécurisé programmable permettant l exécution de services haut niveau

Services disponibles via Trusted Foundations OMA DRM 2 WMDRM / PlayReady CPRM OMA BCAST Marlin SW TPM/MTM Password Storage One-Time Password Secure Storage Cryptographic providers Trusted NFC Trusted User Interface Intégration sécurisée : Windows Mobile Linux Android Symbian 2009 Trusted Logic S.A. Ipsec (VPN) OpenSSL

Intégration d un Provider Cryptographique sur plateforme OMAP3 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

Intégration d un Provider Cryptographique sur plateforme OMAP3 Applications utilisant des opérations crypto Provider cryptographique Java (JCE / JCA) Module Kernel d accès au monde sécurisé Bibliothèques C de communication avec les services sécurisés

Intégration d un Provider Cryptographique sur plateforme OMAP3 Module Kernel pour accéder au monde sécurisé (1/2) Kernel Android Cloner le kernel home# home# home# home# home# git clone git://git.omapzoom.org/repo/omapkernel.git cd omapkernel git checkout --track -b android-2.6.27 origin/android-2.6.27 git checkout android-2.6.27 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.

Intégration d un Provider Cryptographique sur plateforme OMAP3 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.

Intégration d un Provider Cryptographique sur plateforme OMAP3 Provider JCE/JCA au dessus de Dalvik (1/2) TestsProviderCrypto.apk Code Java + AndroidManifest.xml + Android.mk JCE / JCA Interfaces ProviderCrypto.jar Code Java + JNI + Android.mk ProviderCrypto.so Code C + Android.mk ProviderCrypto.ko 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

Intégration d un Provider Cryptographique sur plateforme OMAP3 Provider JCE/JCA au dessus de Dalvik (2/2) 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.

Intégration d un Provider Cryptographique sur plateforme OMAP3 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

Intégration d un Provider Cryptographique sur plateforme OMAP3 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

Intégration d un Provider Cryptographique sur plateforme OMAP3 Conclusions Nicolas Ponsini Project Manager Professional & Consumer Devices nicolas.ponsini@trusted-logic.com

SOMMAIRE 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

Intégration d une application de 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

Intégration d une application de 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)

Intégration d une application de 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

Intégration d une application de 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

Intégration d une application de navigation «off-board» sous Android Android - Environnement de développement (2/2)

Intégration d une application de 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»

Intégration d une application de 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

Intégration d une application de 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éotaggées

Intégration d une application de 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

QUESTIONS / REPONSES Merci pour votre attention