Académique Documents
Professionnel Documents
Culture Documents
(Android) Android Telecom Valley
(Android) Android Telecom Valley
SOMMAIRE
Introduction : Commission Open Source Telecom Valley march Android et les enjeux - positionnement et dernires Le
SOMMAIRE
Introduction : Commission Open Source Telecom Valley
march Android et les enjeux - positionnement et dernires Le
SOMMAIRE
Introduction : Commission Open Source Telecom Valley Le
march Android et les enjeux - positionnement et dernires avances - Pascal Flamand - Janua
Anatomie de la plateforme Android et environnement de
Prsentation de Janua
Socit de services (SS2L)/diteur fonde en 2004 Sophia Antipolis Notre mtier : l'expertise Notre crdo : l'Open Source Nos prestations : consulting, assistance ponctuelle et dveloppement au forfait Nos comptences :
Consulting, implmentations et dploiement de solutions de gestion des identits (LDAP, SSO, PKI..), Etudes d'opportunits et accompagnement la migration Open Source, dploiement de solutions d'infrastructures. Dveloppement au forfait, assistance et expertise sur des composants Open Source et embarqus, Consulting rseaux et scurit, ISO 27001, expertise base de donnes, cluster et virtualisation Editeur des logiciels CmakeBuilder, Jaguards, JAC, KressourcesWCAP et EZ-Slony.
Android
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, vidos... 2005 : Rachat d'Android Inc. Dveloppement d'applications mobiles Richard Miner* + Andy Rubin Objectif du rachat : crer une plateforme mobile Flexible Accessible tous les intgrateurs et dveloppeurs Profiter de la convergence web / mobile
* Richard Miner a quitt Google fin 2008
Android
Le march, le matriel, le potentiel
Acteurs systme d'exploitation mobile 2009 Symbian Windows Mobile RIM Palm Source (Palm Os) Apple Linux Baisse des parts de march OS: Palm Source, Windows Dcroissance du march tlphone March du smartphones en hausse Dcroissance du march tlphone Croissance smartphone: +37% en 2009 (GFK) Croissance smartphone: +12% en 2009 (Gartner) Services mobiles: nouveaux usages, multimdia
Android
Le march, le matriel, le potentiel Open Handset Alliance (OHA)
Android
Le march, le matriel, le potentiel Stratgie Google :
OpenSource
Plateforme mobile ouverte Plus de revenus Application Web riche
Utilisateurs nombreux
Dveloppeurs nombreux
Android
Le march, le matriel, le potentiel Android pour qui ?
Constructeurs de matriels (tlphones, GPS, netbook, ebook, lecteur multimdia, bornes internet...) Oprateurs diteurs de solutions logicielles, SSII...
Points forts
Constructeurs Linux Open Source Cot de licence nul Adaptabilit Utilisateurs Fonctionnel, intuitif et volutif Multitches Applications nouvelles Nombreuses applications par dfaut
Dveloppeurs Langage Java Modularit, partage Kit de dveloppement gratuit SDK complet Android Market
Android
Le march, le matriel, le potentiel Matriels disponible (Avril 2009) - Orange
HTC Dream G1
Dernire minute : HTC annonce pour septembre le modle HERO avec une nouvelle version d android (sense) et interface entirement redessine Juillet 2009
Android
Le march, le matriel, le potentiel Matriels disponible (Mai 2009) - SFR
HTC Magic G2
Android
Le march, le matriel, le potentiel Matriels disponible (juin 2009)-BT
Samsung i7500/s8000 (Orion)
Android
Le march, le matriel, le potentiel Matriels venir
Motorola (fin 2009) LG Sony Ericsson (fin 2009) * Huawei Leonovo Acer Netbooks La prsence d'Android par Fujitsu GPS ** Lecteurs multimdia (Archos annonce pour septembre) TV !
* Sony Ericsson a annonc qu utiliserait la prochaine version Android 2.0 Donut il ** 22/6 :Le gant amricain du GPS Garmin a dcid de ne plus recourir ses propres intgrations de Linux sur ses terminaux. Elle a choisi pour les remplacer d intgrer Android et Windows Mobile.
Android
Evolution de l IHM
Android
Evolution de l IHM
Android
Evolution de l IHM
Android
Conclusions (provisoire)
Les facteurs potentiellement bloquants :
L'omniprsence de Google peut agacer et faire peur... La position de leader de l'iPhone et son arrive il y a dj plusieurs annes sur le march.. La cration d'un vritable app-store avec des milliers d'applications... La frilosit des oprateurs => partage de la valeur avec Google
SOMMAIRE
Introduction : Commission Open Source Telecom Valley march Android et les enjeux - positionnement et dernires Le
Anatomie d Android
Android: 2 parties
Systme d'exploitation Linux Environnement d'excution Dalvik (Java) Concours Android Developer Challenge (Google) 4 versions Mai 2009 SDK 1.5 Dcembre 2009 Donut 2.0
OS et SDK sont disponibles en Open Source Dvelopper une application ne requiert pas l'obtention de l'OS et rciproquement
Anatomie d Android
Anatomie d Android
OS Android: 2 couches infrieures
Dalvik
Linux kernel 2.6.24 ARM Pas de systme natif de fentrage Pas de support Glibc Optimisation mmoire, processus et alimentation Gestion utilisateurs
VM Android Optimise embarqu Multi instance Optimisation mmoire, scurit Optimisation bytecode Fichier Dex
Anatomie d Android
Base de l'API
Point d'entre pour les applications Accs toutes les ressources infrieures via librairie Accs possible aux ressources C via JNI (bypass de cette couche)
Anatomie d Android
Dveloppement
Environnement
J2SE
SDK Android Eclipse Ganymede + plugin ADT Optionnel: Outil dev C: Intgration code C/C++ en tant que librairie (JNI)
Anatomie d Android
Dveloppement
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 mme application ou d'une autre application 5 composantes majeures
L'ensemble de ces composantes est dcrit dans le fichier AndroidManifest.xml Les applications ont pour extension APK (Android Package)
Anatomie d Android
Dveloppement
Activity
Une classe par Activity Gnralement le point d'entre d'une application Gnralement une interface graphique, un cran Cycle de vie Type d'action possible dclar auprs du systme Indique le besoin ou le service offert Accs aux donnes partages Donnes internes ou externes l'application Encapsulation du schma de la base Pas de requte
-URI -Services de manipulation des donnes fournis par le package
Intent
Content Provider
Anatomie d Android
Dveloppement
Services
Composants sans interface graphique Activit de longue dure Dmarrer par context.startService: interne l'application Dmarrer par context.bindService: externe l'application Ragit des vnements externes
-
Broadcast Receiver
Anatomie d Android
Dveloppement
Construction d'une application
Code source
Anatomie d Android
Hello Android
Cration d'un nouveau projet
Anatomie d Android
Hello Android
Arborescence du fichier cr
tre sans interface tre une fentre flottante Retourner des valeurs Lancer d'autres Activity
Une Activity est capable de lancer une autre Activity que nous nommerons SubActivity
Interne l'application Externe application Rcuprer le rsultat d'une SubActivity Notion importante d'Intent
Dfinir une action effectuer Crer des liens entre application Dcrit par une action (VIEW, EDIT, MAIN,...) URI pour renseigner les donnes traiter
IntentFilter
Dcrit les capacits d'une application Attach une Activity coute les demandes d'Intent (handler) Enregistr au niveau systme
Recherche de l'IntentFilter le mieux adapt par l'IntentResolver
Renseignements sur l'application (nom, version de code, SDK support...) Dfinit le comportement des Activity et leurs actions Dclare auprs du systme les Intent accessibles Dfinit les services, broascat receiver et content provider
L'utilisateur est toujours prvenu l'installation des ressources requises pour le bon fonctionnement de l'application. Il peut accepter ou refuser.
XML (recommand) Code Java Lisibilit du code Java Lisibilit de la construction de l'IHM Allgement du code Java Rapidit de dveloppement (Similaire un page HTML) Moins de risque d'erreur
Avantages XML
Large ventail de composants dj disponibles Personnalisation possible de chaque lment Systme de thmes disponible
Prsent dans /res/layout Reprsente un cran Reprsente un composant spcifique d'un cran Dispose d'un identifiant unique (de prfrence) Peut tre accd, ajout, modifi et supprim depuis le code Java android:id=@+id/monidentifiant pour votre composant android:id=@android:id/empty pour rfrencer un composant spcifique d'Android
Chaque composant
Identification par le fichier R.java (gnr par aapt) Compiler sous forme de vue embarque dans le fichier dex
Contient obligatoire un lment racine (Root) Peut contenir autant de layout ou vue que dsir 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>
Rfrencs 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 paramtres
android:layout_width et android:layout_height (fill_parent, wrap_content...) android:id, android:text, android:background... android:orientation pour LinearLayout (vertical, horizontal)
Multilingues
Base sur la locale du systme /res/values-fr, /res/values-en contenant un fichier string.xml Utiliser les mmes cls pour afficher la valeur dans la langue correspondante
Menu Option
Sous menu
Menu contextuel
Rcuprer l'objet vue concern Ajout du listener Implmentation des actions raliser par le listener
Button monBoutton = (Button)findViewById(R.id.monBouton); b.setOnClickListener(evtClickSurMonBoutton); OnClickListener evtClickSurMonBoutton = new OnClickListener(){ public void onClick(View v){ // Implmentation } };
Donnes persistantes
Donnes persistantes
Les prfrences utilisateurs Composants fournis
IHM Donnes
Simple Ensemble de cls (String)/valeurs(primitive) Propre l'Activity ou l'application entire Dclarations dans AndroidManifest Donnes sauvegardes dans
/data/data/monpackage/shared_prefs/monpackage.xml
Donnes persistantes
Bases de donnes
SQLITE
Projet Open Source Base de donnes transactionnelles Pas de partie serveur Toutes les tables sont contenues dans un seul fichier Crossplatform Donnes types Langage SQL Cl primaire Non disponible: FOREIGN_KEY, RIGHT/LEFT_OUTER_JOIN, certaines options ALTER_TABLE Librairie de manipulation Accessible par adb shell
SQLITE3
Donnes persistantes
Bases de donnes SQLITE & Android
Aucune base par dfaut: tout doit tre construit Manipulation SQLiteDatabase SQLiteOpenHelper
-
onCreate onUpdate
L'enregistrement de fichier de base de donnes sur une carte mmoire ne pourra tre ralis par SQLiteOpenHelper, recours l'objet SQLiteDatabase
Donnes persistantes
Bases de donnes Manipulation des donnes
execSQL: excution de commande SQL passe en paramtre sous forme de chaine de caractres (dans la classe de l'adapter)
db.execSQL("insert into " + DATABASE_TABLE_USER + " (" + COL_TAB_HELLO_USER_NOM + ") values('" + name + "');");
Permet de retourner des valeurs (ex.: identifiant d'un nouveau lment ajout)
Donnes persistantes
Bases de donnes 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 // utilises 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); }
Donnes persistantes
Content provider Toutes les URI commenant par URI Encapsulation de la structure des donnes Base de donnes, fichiers plats, accs distant A partir d'une URI
Utilisation de ContentProvider existant d'autres applications Crer, utiliser et partager vos donnes Dfinition d'une URI
PREFIXE://IDENTIFIANT DU TYPE DE DONNEES/DEFINITION DE LA DONNEES/ENREGISTREMENT content://contact/people/123 content://com.mycompany.hello/user/53
Donnes persistantes
Content provider
Raliser une requte
URI Un tableau des proprits du ContentProvider obtenir dans le rsultat (nomm projection) Les contraintes (clause Where) Ensemble des paramtres permettant de complter les contraintes (? dans la clause where) Clause d'ordonnancement
Retourne un Cursor
Donnes persistantes
Content provider Insrer des enregistrements
insert()
-
Uri + contentValues Retourne l'identifiant de l'lment insr Tableau d'Uri et tableau de ContentValues pour ajouter plusieurs enregistrements en une seule fois Retourne le nombre d'lments insrs
bulkInsert()
-
Delete
-
Uri, clause where, arguments compltant la clause where Les informations dpendantes la table vise seront galement supprimes (cascading) Retourne le nombre d'lments supprims
Mise jour
Update
-
Uri, valeurs insrer, clause where, arguments compltant la clause where Retourne le nombre d'lments mis jour
Donnes persistantes
IHM, Cursor et Adapter Composant ddi l'affichage de liste
Gestion du Cursor ou de listes Mise jour automatique lors d'un ajout, modification, suppression Composants graphiques dj disponibles Personnalisation de l'affichage possible Adapter: mapping entre la vue et les donnes Utilisation d'un composant grant un adapter (spinner, listview...) Rcupration d'un Cursor Cration de l'adapter Affichage
Processus
Donnes persistantes
IHM, Cursor et Adapter Exemple simple: ListActivity
Une Activity devient une ListActivity Obligation de prsence d'un objet ListView dans le layout Id spcifique: 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 mmoire n'est pas limite Attention la surcharge! Implmentation simple
-
Services et Multithreading
Services AIDL
Android Interface Description Language Partage du service avec d'autres applications (Inter Process Communication) Dveloppement d'interface N'acceptes que
-
Des primitives Des String et CharSequence List ou Map Autre AIDL Autres classes Java implmentant Parcelable in / out: dfinit le sens de l'information in: paramtre d'entre est utilise pour lecture uniquement par le service out: paramtre pouvant tre modifi par le service et propag
Services et Multithreading
Alarmes, notifications Notifications
Toutes les alertes manant du systme ou d'autres applications Affichage d'une icne et/ou texte dans la barre de notifications Coloration de la led du tlphone Hardware (son, led, vibreur) Icons / Texte
NotificationManager
Obtenir une instance du NotificationManager Cration de l'objet Notification (icon, message...) Cration d'un PendingIntent pour la finalit de la notification (ouverture d'une activity) Attribuer le pendingIntent la notification Envoyer la notification
Services et Multithreading
Accs distants Librairies Apache HttpComponents HTTP Ajouter des librairies supplmentaires pour raliser d'autres protocoles: XMPP, SMTP... HTTP POST/GET
Requte GET
Services et Multithreading
Accs distants Requte 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);
Utilisation de HttpURLConnection Dfinition des paramtres de la connexion (entre, sortie, boundary, mthodes...) Ouverture d'un DataOutputStream sur la connexion Pour chaque lment envoyer:
-
Services et Multithreading
Accs distants Rponse d'une requte
HttpResponse Sur retour de la commande execute Cration 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 accs distants (Wake Lock) Solution (recommandation!)
Utilisation de Thread pour les traitements bloquant: accs distant, calculs... Systme de message de communication entre un Thread et un Handler Classe implmentant l'interface Runnable Constructeur prenant en paramtre l'Activity qui appellera le Thread Surcharge de la mthode run() dans laquelle Les traitements sont excuts Les messages sont envoys au Handler Cration d'un objet Handler Gestion des codes reus Mise jour de l'IHM de l'Activity appelante 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/rception SMS SearchManager Golocalisation
Multimedia
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
SOMMAIRE
Introduction : Commission Open Source Telecom Valley march Android et les enjeux - positionnement et dernires Le
caf
SOMMAIRE
Introduction : Commission Open Source Telecom Valley march Android et les enjeux - positionnement et dernires Le
Trusted Logic
Produits & Solutions pour
Smart Cards & Secure Tokens jTOP Technologie sans contact Trusted NFC Plateformes mobiles Trusted Foundations Software Scurit embarque
en bref
Technologies ouvertes
Monde Scuris
(certifiable)
Environnement ouvert
SChannel
Plateforme
Intgration d Provider un Cryptographique sur plateforme OMAP3 Module Kernel pour accder au monde scuris
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
(1/2)
Recompiler le kernel : choisir la configuration / cross-compiler avec la chane de compilation ARM Code Sourcery ARM Sourcery G++ 2007q3. Kernel 2.6.27 et bientt kernel 2.6.29 : le site permet de profiter des dernires nouveaut comme un meilleur support des fonctions de mise en veille.
Intgration d Provider un Cryptographique sur plateforme OMAP3 Module Kernel pour accder au monde scuris
(2/2)
Dveloppement d un Character device driver pour abstraire l accs au monde scuris vu comme un device:
Points d entre : open/release/ioctl/mmap/read/write Communication avec le user space : copy_from(to)_user/mapped memory Gestion des accs multiples : objects de synchronisation, Kernel Premptif Power Management : suspend/resume + utilisation du rfrigrateur pour les threads actifs lorsque l utilisateur met l appareil en veille explicitement. Accs au hardware : mapping et accs registres (ex: controleur DMA) Insertion du module : dynamique / statique
Driver sous License GPL2 : son code doit tre rendu public.
Intgration d Provider un 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.ko
Intgration d Provider un 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 google : repo outil
Le systme de build est totalement intgr et permet de grer les dpendances tous les niveaux : application / bibliothques / code Java / code C.
Android.mk : insrer dans les sources Android un fichier Android.mk (makefile-like) pour gnrer une Application ou une librairie.
Systme de build
Pas de platform Builder graphique labor Une distribution intgre : tapez make et a fonctionne !! Gestions des dpendances et ajout d applications et de bibliothques simplement grce un Makefile-like : Android.mk
Rutilisation 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 compltement compatible Simple pour le dveloppement d application de tests Utilisation du SDK Android pour dvelopper toutes ces parties portables sur PC.
Debug
Pas d utilisation des outils spcifiques Android pour cette intgration Utilisation d debugger Jtag pour le debug de certaines fonctionnalits du driver un
Conclusions
SOMMAIRE
Introduction : Commission Open Source Telecom Valley march Android et les enjeux - positionnement et dernires Le
BMW/VW systmes d Infotainment Certification OSGi Outillage de test automatique Chaine de dveloppement pour le design/intgration HMI Architecture et Dveloppement de plateforme logicielle Portail de Connectivit sans-fil Web Services avec reconnaissance vocale Navigation mobile off-board
VDO
Siemens
Continental
Vues plan / satellite Gestion des donnes Zoom & dfilement Surcharge de la carte
QUESTIONS / REPONSES