View
218
Download
4
Category
Preview:
Citation preview
Présentation du systèmed’exploitation Open Source
ANDROID
Commission OpenSourceTelecom Valley
- Jeudi 2 Juillet 2009 -
Jeudi 2 Juillet 2009
SOMMAIRE
Introduction : Commission Open Source Telecom Valley
Le marché Android et les enjeux - positionnement et dernièresavancées - Pascal Flamand - Janua
Anatomie de la plateforme Android et environnement dedéveloppement - Arnaud Farine - Expertise@ndroid
Pause café
Intégration d'un provider cryptographique / module Kernel / FrameworkDalvik - retour d'expérience - Nicolas Ponsini - Trusted Logic
Intégration d'une application de géolocalisation "off board" sousAndroid - retour d'expérience - Christophe Tomasini - Altran
Q/R avec la salle, partage d'expériences
Jeudi 2 Juillet 2009
SOMMAIRE
Introduction : Commission Open Source Telecom Valley
Le marché Android et les enjeux - positionnement et dernièresavancées - Pascal Flamand - Janua
Anatomie de la plateforme Android et environnement dedéveloppement - Arnaud Farine - Expertise@ndroid
Pause café
Intégration d'un provider cryptographique / module Kernel /Framework Dalvik - retour d'expérience - Nicolas Ponsini - TrustedLogic
Intégration d'une application de géolocalisation "off board" sousAndroid - retour d'expérience - Christophe Tomasini - Altran
Q/R avec la salle, partage d'expériences
Jeudi 2 Juillet 2009
Commission Open SourceTelecom Valley
Une commission créé fin 2007 pour permettre aux membres de TélécomValley d'échanger et de s'enrichir mutuellement sur les sujets etproblé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 sonexpérience/expertise et apprend des autres...
En résumé une vraie communauté professionnelle sur Sophia....
Jeudi 2 Juillet 2009
SOMMAIRE
Introduction : Commission Open Source Telecom Valley
Le marché Android et les enjeux - positionnement etdernières avancées - Pascal Flamand - Janua
Anatomie de la plateforme Android et environnement dedéveloppement - Arnaud Farine - Expertise@ndroid
Pause café
Intégration d'un provider cryptographique / module Kernel /Framework Dalvik - retour d'expérience - Nicolas Ponsini - TrustedLogic
Intégration d'une application de géolocalisation "off board" sousAndroid - retour d'expérience - Christophe Tomasini - Altran
Q/R avec la salle, partage d'expériences
Jeudi 2 Juillet 2009
Présentation de Janua
Société de services (SS2L)/éditeur fondée en 2004 à Sophia Antipolis
Notre métier : l'expertiseNotre crédo : l'Open SourceNos prestations : consulting, assistance ponctuelle et développement auforfaitNos compétences :
Consulting, implémentations et déploiement de solutions de gestion desidentité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 virtualisationEditeur des logiciels CmakeBuilder, Jaguards, JAC, KressourcesWCAP
et EZ-Slony.
Jeudi 2 Juillet 2009
AndroidLe 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
Jeudi 2 Juillet 2009
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
AndroidLe marché, le matériel, le potentiel
Jeudi 2 Juillet 2009
AndroidLe marché, le matériel, le potentiel
Open Handset Alliance (OHA)
Jeudi 2 Juillet 2009
AndroidLe marché, le matériel, le potentiel
Stratégie Google :• OpenSource
• Android Market / Google Checkout• Publicité mobile
Plateforme mobileouverte
ApplicationWeb riche
Développeursnombreux
Utilisateursnombreux
Plus de revenus
Jeudi 2 Juillet 2009
AndroidLe 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 SourceCoût de licence nulAdaptabilité
Développeurs
Langage JavaModularité, partageKit de développement gratuitSDK completAndroid Market
Utilisateurs
Fonctionnel, intuitif et évolutifMultitâchesApplications nouvellesNombreuses applications par défaut
Jeudi 2 Juillet 2009
AndroidLe 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 nouvelleversion d’android (sense) et interface entièrement redessinée… Juillet 2009
Jeudi 2 Juillet 2009
AndroidLe marché, le matériel, le potentiel
Matériels disponible (Mai 2009) - SFR HTC Magic G2
Jeudi 2 Juillet 2009
AndroidLe marché, le matériel, le potentiel
Matériels disponible (juin 2009)-BT Samsung i7500/s8000 (Orion)
Jeudi 2 Juillet 2009
AndroidLe 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égrationsde Linux sur ses terminaux. Elle a choisi pour les remplacer d’intégrer Android et Windows Mobile.
La présence d'Android par Fujitsu
Jeudi 2 Juillet 2009
AndroidEvolution de l’IHM
Android M3 –Nov 2007
Android M5 –Mars 2008
Jeudi 2 Juillet 2009
AndroidEvolution de l’IHM
Android - R1.1RC33Novembre 2008
Android CupcakeFevrier 2009
Jeudi 2 Juillet 2009
AndroidEvolution de l’IHM
Android Cupcake CustomHTC Sense UIJuin 2009
Jeudi 2 Juillet 2009
AndroidConclusions (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, uneopportunité à saisir pour notre communauté....
Jeudi 2 Juillet 2009
SOMMAIRE
Introduction : Commission Open Source Telecom Valley
Le marché Android et les enjeux - positionnement et dernièresavancées - Pascal Flamand - Janua
Anatomie de la plateforme Android et environnement dedéveloppement - Arnaud Farine - Expertise@ndroid
Pause café
Intégration d'un provider cryptographique / module Kernel /Framework Dalvik - retour d'expérience - Nicolas Ponsini - TrustedLogic
Intégration d'une application de géolocalisation "off board" sousAndroid - retour d'expérience - Christophe Tomasini - Altran
Q/R avec la salle, partage d'expériences
Jeudi 2 Juillet 2009
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'OSet réciproquement
Jeudi 2 Juillet 2009
Anatomie d’Android
Jeudi 2 Juillet 2009
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
Jeudi 2 Juillet 2009
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)
Jeudi 2 Juillet 2009
Anatomie d’AndroidDé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 quelibrairie (JNI)
Jeudi 2 Juillet 2009
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 oud'une autre application
5 composantes majeures Intent Activity Broadcast Receiver Content Provider Service
L'ensemble de ces composantes est décrit dans le fichierAndroidManifest.xml
Les applications ont pour extension APK (Android Package)
Anatomie d’AndroidDéveloppement
Jeudi 2 Juillet 2009
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’AndroidDéveloppement
Jeudi 2 Juillet 2009
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’AndroidDéveloppement
Jeudi 2 Juillet 2009
Anatomie d’AndroidDéveloppement
Construction d'une application
Code source
Byte Code Java
Byte code optimiséGénération fichier.dex
Construction du packagedestiné à être installé
Jeudi 2 Juillet 2009
Anatomie d’AndroidHello Android
Création d'un nouveau projet
Jeudi 2 Juillet 2009
Anatomie d’AndroidHello Android
Arborescence du fichier créé
Construire le projet via le menuProject/Build
Jeudi 2 Juillet 2009
Les Activity et leurs interactionsActivity
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
Jeudi 2 Juillet 2009
Les Activity et leurs interactionsActivity
Cycle de vie d'une Activity
Jeudi 2 Juillet 2009
Les Activity et leurs interactionsActivity
Différentes Activity disponibles - android.app.* ActivityGroup ListActivity AliasActivity ExpandableListActivity PreferenceActivity LauncherActivity TabActivity
Une Activity est capable de lancer une autre Activity –quenous nommerons SubActivity Interne à l'application Externe à application Récupérer le résultat d'une SubActivity Notion importante d'Intent
Jeudi 2 Juillet 2009
Les Activity et leurs interactionsIntent
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'IntentFilterle mieux adapté parl'IntentResolver
Activity est lancée
Jeudi 2 Juillet 2009
Les Activity et leurs interactionsActivity
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));
Jeudi 2 Juillet 2009
Les Activity et leurs interactionsDescripteur 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 accepterou refuser.
Jeudi 2 Juillet 2009
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
Jeudi 2 Juillet 2009
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
Jeudi 2 Juillet 2009
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">
<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/>
</LinearLayout>
Jeudi 2 Juillet 2009
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)
Un layout peut être chargé au sein d'un autre composant enutilisant 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);
}
Jeudi 2 Juillet 2009
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>
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>
Jeudi 2 Juillet 2009
Interface graphique (IHM)IHM : Les menus
Menu Option Sous menu Menu contextuel
Jeudi 2 Juillet 2009
Interface graphique (IHM)IHM : évènements
Gérés comme en Java / AWT / Swing / J2MEMise en place de Listener (écouteurs)Peuvent être appliqués sur chaque composant ViewÉvènements supplémentaires en fonction du type de la vueProcessus
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
}};
Jeudi 2 Juillet 2009
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é
Jeudi 2 Juillet 2009
Interface graphique (IHM)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
Jeudi 2 Juillet 2009
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
Jeudi 2 Juillet 2009
Données persistantesLes 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
Jeudi 2 Juillet 2009
Données persistantesBases 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
Jeudi 2 Juillet 2009
Données persistantesBases 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 cartemémoire ne pourra être réalisé par SQLiteOpenHelper, recours àl'objet SQLiteDatabase
Jeudi 2 Juillet 2009
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)
Données persistantesBases 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);
Jeudi 2 Juillet 2009
Query
Données persistantesBases de données
public Cursor query (String table,// nom de la tableString[] Columns, // nom des colonnes a retourner ou null pour touteString Selection, // clause where, sans le mot 'where' ex.: nom=?String[] SelectionArgs, // tableau ordonné des valeurs
// utilisées dans la clause whereString GroupBy, // argument groupBy, ex: nom, prenom –null sinonString Having, // argument clause having –null sinonString 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);
…}
Jeudi 2 Juillet 2009
Toutes les URI commençant par URIEncapsulation de la structure des donnéesBase de données, fichiers plats, accès distantA partir d'une URI
Create Read Update Delete
Utilisation de ContentProvider existant –d'autresapplicationsCréer, utiliser et partager vos donnéesDéfinition d'une URI
Données persistantesContent provider
PREFIXE://IDENTIFIANT DU TYPE DE DONNEES/DEFINITION DE LA DONNEES/ENREGISTREMENTcontent://contact/people/123
content://com.mycompany.hello/user/53
Jeudi 2 Juillet 2009
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 dedonnées
Données persistantesContent 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)
Jeudi 2 Juillet 2009
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 persistantesContent provider
Jeudi 2 Juillet 2009
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éerson propre Adapter
Données persistantesIHM, Cursor et Adapter
Jeudi 2 Juillet 2009
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
Données persistantesIHM, 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);
Jeudi 2 Juillet 2009
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
Jeudi 2 Juillet 2009
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 MultithreadingServices
Jeudi 2 Juillet 2009
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 NotificationManagerCré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 notificationEnvoyer la notification
Services et MultithreadingAlarmes, notifications
Jeudi 2 Juillet 2009
Librairies Apache HttpComponentsHTTPAjouter 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
Services et MultithreadingAccè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);}
Jeudi 2 Juillet 2009
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
Services et MultithreadingAccè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);
Jeudi 2 Juillet 2009
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 MultithreadingAccès distants
Jeudi 2 Juillet 2009
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()
Services et MultithreadingUtilité des Threads
Jeudi 2 Juillet 2009
Gestion des appels entrants et sortantsConnexion GSM/Bluetooth/Wifi/GPSEnvoi/réception SMSSearchManagerGéolocalisation
Localisation Map/MapView Accéléromètre
Multimedia Son Caméra 2D/3D
Autres composants
Jeudi 2 Juillet 2009
LivresBusy 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 –220pages
http://www.pragprog.com
Ressources en lignes: site webhttp://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: forumshttp://groups.google.fr/group/android-developershttp://groups.google.fr/group/android-beginners
Ressources francophones: actualités et développementhttp://www.frandroid.com (actualités, forums)http://www.pointgphone.com (actualités, forums)
Jeudi 2 Juillet 2009
SOMMAIRE
Introduction : Commission Open Source Telecom Valley
Le marché Android et les enjeux - positionnement et dernièresavancées - Pascal Flamand - Janua
Anatomie de la plateforme Android et environnement dedéveloppement - Arnaud Farine - Expertise@ndroid
Pause cafPause caféé
Intégration d'un provider cryptographique / module Kernel /Framework Dalvik - retour d'expérience - Nicolas Ponsini - TrustedLogic
Intégration d'une application de géolocalisation "off board" sousAndroid - retour d'expérience - Christophe Tomasini - Altran
Q/R avec la salle, partage d'expériences
Jeudi 2 Juillet 2009
SOMMAIRE
Introduction : Commission Open Source Telecom Valley
Le marché Android et les enjeux - positionnement et dernièresavancées - Pascal Flamand - Janua
Anatomie de la plateforme Android et environnement dedéveloppement - Arnaud Farine - Expertise@ndroid
Pause café
Intégration d'un provider cryptographique / moduleKernel / Framework Dalvik - retour d'expérience - NicolasPonsini - Trusted Logic
Intégration d'une application de géolocalisation "off board" sousAndroid - retour d'expérience - Christophe Tomasini - Altran
Q/R avec la salle, partage d'expériences
Jeudi 2 Juillet 2009
Trusted Logic en bref
Technologiesouvertes
Sécuritéembarquée
Produits & Solutions pour•Smart Cards & Secure Tokens
jTOP
•Technologie sans contactTrusted NFC
•Plateformes mobilesTrusted FoundationsSoftware
Services deconsulting et
d’évaluation ensécurité
Jeudi 2 Juillet 2009
Environnementouvert
Plateforme
ApplicationsApplicationsServices SécurisésServices Sécurisés
Monde Normal(trop riche pour être certifié)
Monde Sécurisé(certifiable)
SChannel
TrustedFoundationsSoftware
TrustedFoundationsSoftware
Environnementsécurisé
programmablepermettant
l’exécution deservices haut
niveau
Trusted Foundations Software
Jeudi 2 Juillet 2009
© 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
Services disponibles via TrustedFoundations
Jeudi 2 Juillet 2009
Objectif : Proposer aux applications Android un provider cryptographique detype JCE / JCA offrant la sécurité du Trusted Foundations SW aux clés etdonnées manipulées.
JCE / JCA = Java Cryptographic Extension / Java CryptographicArchitecture
Un Provider implémente les interfaces spécifiées par les packages JCE /JCA.
Javax.crypto.* fournit les classes et les interfaces pour effectuer desopérations cryptographiques sur les algorithmes symmétriques.
Java.security.* fournit les classes et les interfaces pour le framework desé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 ProviderCryptographique sur plateforme OMAP3
Jeudi 2 Juillet 2009
Bibliothèques C decommunication
avec les servicessécurisés
Module Kerneld’accès au
monde sécurisé
ProvidercryptographiqueJava (JCE / JCA)
Applicationsutilisant des
opérations crypto
Intégration d’un ProviderCryptographique sur plateforme OMAP3
Jeudi 2 Juillet 2009
Module Kernel pour accéder au monde sécurisé (1/2)
Kernel Android
Cloner le kernelhome# git clone git://git.omapzoom.org/repo/omapkernel.githome# cd omapkernelhome# git checkout --track -b android-2.6.27 origin/android-2.6.27home# git checkout android-2.6.27home# git pull
Recompiler le kernel : choisir la configuration / “cross-compiler”avec la chaîne decompilation 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èresnouveauté comme un meilleur support des fonctions de mise en veille.
Intégration d’un ProviderCryptographique sur plateforme OMAP3
Jeudi 2 Juillet 2009
Module Kernel pour accéder au monde sécurisé (2/2)
Développement d’un “Character device driver”pour abstraire l’accès aumonde 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 lesthreads 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 ProviderCryptographique sur plateforme OMAP3
Jeudi 2 Juillet 2009
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 auxapplications
Bibliothèque native (.so) dans /system/lib Android.mk Source C au dessus de bionic
TestsProviderCrypto.apkCode Java
+ AndroidManifest.xml+ Android.mk
ProviderCrypto.jarCode Java
+ JNI+ Android.mk
ProviderCrypto.soCode C
+ Android.mk
ProviderCrypto.ko
JCE / JCA Interfaces
Intégration d’un ProviderCryptographique sur plateforme OMAP3
Jeudi 2 Juillet 2009
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.githome# repo synchome# 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)
Intégration d’un ProviderCryptographique sur plateforme OMAP3
Jeudi 2 Juillet 2009
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 ProviderCryptographique sur plateforme OMAP3
Jeudi 2 Juillet 2009
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 ProviderCryptographique sur plateforme OMAP3
Jeudi 2 Juillet 2009
Conclusions
Nicolas PonsiniProject Manager
Professional & Consumer Devicesnicolas.ponsini@trusted-logic.com
Intégration d’un ProviderCryptographique sur plateforme OMAP3
Jeudi 2 Juillet 2009
SOMMAIRE
Introduction : Commission Open Source Telecom Valley
Le marché Android et les enjeux - positionnement et dernièresavancées - Pascal Flamand - Janua
Anatomie de la plateforme Android et environnement dedéveloppement - Arnaud Farine - Expertise@ndroid
Pause café
Intégration d'un provider cryptographique / module Kernel /Framework Dalvik - retour d'expérience - Nicolas Ponsini - TrustedLogic
Intégration d'une application de géolocalisation "off board" sousAndroid - retour d'expérience - Christophe Tomasini - Altran
Q/R avec la salle, partage d'expériences
Jeudi 2 Juillet 2009
Intégration d’une application denavigation « off-board » sous Android
SC2 - Software Competence CentreDepuis 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
Jeudi 2 Juillet 2009
Intégration d’une application denavigation « 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)
Jeudi 2 Juillet 2009
Intégration d’une application denavigation « 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
Jeudi 2 Juillet 2009
Intégration d’une application denavigation « 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
Jeudi 2 Juillet 2009
Intégration d’une application denavigation « off-board » sous Android
Android - Environnement de développement (2/2)
Jeudi 2 Juillet 2009
Intégration d’une application denavigation « off-board » sous Android
Développement pour Android - ObjectifsPortage 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 »
Jeudi 2 Juillet 2009
Intégration d’une application denavigation « off-board » sous Android
Développement pour Android - Google Maps
Vues plan / satellite Gestion des données Zoom & défilement Surcharge de la carte
Jeudi 2 Juillet 2009
Intégration d’une application denavigation « 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
Jeudi 2 Juillet 2009
Intégration d’une application denavigation « off-board » sous Android
Conclusion & Perspectives
Des outils de développement Une communauté Une plateforme en évolution Des terminaux Android Market
Christophe TomasiniPraxis SC2 by Altran
christophe.tomasini@altran.com
Jeudi 2 Juillet 2009
QUESTIONS / REPONSES
Merci pour votreattention
Recommended