OUGF 19/05/2011 - Lille NLS/UBS/Valoria 1
Nicolas Le SommerLaboratoire Valoria, Université de Bretagne Sudemail: Nicolas.LeSommer@univubs.frWeb : http://wwwvaloria.univubs.fr/Nicolas.LeSommer
FelixDroid : un environnement pour le développement et la gestion d'applications OSGi dédiées à
Android
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 2
Plan de la présentation
• Le projet FelixDroid
• Android vs OSGi
• Contraintes et limitations d'Android
• FelixDroid : un cadre de conception pour le développement et l'exécution d'applications graphiques OSGi sur Android
• FelixDroid : le gestionnaire d'applications
• Démontration
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 3
Le projet FelixDroid
• FelixDroid :
– Cadre de conception pour le développement et l'exécution d'applications graphiques OSGi sur Android
– Gestion de l'exécution simultanée de plusieurs applications graphiques
– Repose sur le framework Felix
– Permet la gestion du framework Felix de manière graphique
• Gestion des bundles, et des OBR
• FelixDroid est le résultat d'un projet de second année de DUT Info de l'IUT de Vannes
– 3 groupes de projets en concurrence
– Fusion des résultats des 3 groupes
• FelixDroid sera diffusé prochainement en open source
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 4
Android vs OSGi
• Dalvik-VM
– Optimisée pour de multiples instances
– Machine à registres
– Les fichiers sont dans le format dex
– Les applications sont déployées via une archive .apk
• Zip contenant les classes, ressources et un fichier AndroidManifest.xml
Android OSGi
DVM
APP1
DVM
APP2
DVM
APP3APP1
APP1 APP4
APP2
APP3
JVM
JVM
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 5
Contraintes et limitations d'Android
• Activity : élément de base pour réaliser des applications graphiques dans Android.
• Android impose de déclarer toutes les activités dans le fichier AndroidManifest.xml de l'application.
• Android permet de partager des éléments graphiques entre les applications via un mécanisme appelé Intents.
– Difficile de connaître les éléments partagés pour un développeur
• Dépend des applications installées sur le terminal
• Pas de gestion des dépendances contrairement à OSGi.
• Comment déployer des applications graphiques OSGi sur Android ?
– Activités pas connues à l'avance.
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 6
Solutions pour le développement d'applications graphiques OSGi sur Android
• Solution 1 :
– Déploiement d'applications Android contenant des activités indépendamment d'OSGi
– Invocation depuis OSGi des activités via des Intents
– Incohérences entre les bundles OSGi et les applications Android
• Cycles de vie différents
• On peut supprimer une application Android alors que le bundle OSGi utilisant cette application continu d'exister.
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 7
Solutions pour le développement d'applications graphiques OSGi sur Android
• Solution 1 :
– Déploiement d'applications Android contenant des activités indépendamment d'OSGi
– Invocation depuis OSGi des activités via des Intents
– Incohérences entre les bundles OSGi et les applications Android
• Cycles de vie différents
• On peut supprimer une application Android alors que le bundle OSGi utilisant cette application continu d'exister.
• Solution 2 :
– Une seule Activité (celle qui permet de démarrer le framework Felix) et partage de cette activité entre les différentes vues des applications OSGi
– Nécessité de gérer l'accès à l'activité
• Définition d'un framework adapté.
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 8
FelixDroid : le cadre de conception
• FelixDroid définit un cadre de conception permettant de gérer les vues et les événements (menus, boutons)
• Chaque application dispose de son propre conteneur de vues
• Un conteneur est créé automatiquement par FelixDroid lorsqu'une application exprime une dépendance vis-à-vis du framework FelixDroid
Conteur de vues
App 1
Conteur de vues
App 1
Gestionnaire de conteneursGestionnaire de conteneurs
Conteur de vues
App 2
Conteur de vues
App 2
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 9
FelixDroid : le cadre de conception
felixdroid
org.apache.felix.framework org.osgi.framework
ContainerManager
getContainer(BundleContext bc) : ViewContainer
Felix
...
BundleActivator
...BundleContext
...
ViewContainer
showView(FelixDroidView v)addPanelMenuListener(PanelMenuListener pml)addOptionMenuListener(OptionMenuListener oml)showToast(Toast t)showDialogBox(Dialog d)addKeyEventListener(KeyEventListener kl)...
FelixDroidViewgetView() : android.view.View...
OptionMenuListeneronOptionsItemSelected(MenuItem item)...
PanelMenuListeneronMenuItemSelected(int featureId, MenuItem item)...
KeyEventListeneronKeyDown(KeyEvent)onKeyUp(KeyEvent)onKeyLongPress(KeyEvent)
android
...
......
...View
...
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 10
FelixDroid : exemple d'utilisation (1/2)
• HelloWorld avec FelixDroid
– La vue
public class HelloWorldView extends FelixDroidView {private View view;
public HelloWorldView(ViewContainer vc) {super(vc);this.view = new TextView(vc.getContext());((TextView)this.view).setText("Hello World!!");
}
public View getView(){return this.view;
}}
public class HelloWorldView extends FelixDroidView {private View view;
public HelloWorldView(ViewContainer vc) {super(vc);this.view = new TextView(vc.getContext());((TextView)this.view).setText("Hello World!!");
}
public View getView(){return this.view;
}}
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 11
FelixDroid : exemple d'utilisation (2/2)
• HelloWorld avec FelixDroid
– L'activateur
public class Activator implements BundleActivator{ public void start(BundleContext bundleContext) throws Exception {
ServiceReference sr = bundleContext.getServiceReference(
felixdroid.ViewContainerManager.class.getName());
ViewContainerManager vcm = (ViewContainerManager)bundleContext.getService(sr);
ViewContainer vc = vcm.getContainer(bundleContext);
vc.showView(new HelloWorldView(vc)); }
...}
public class Activator implements BundleActivator{ public void start(BundleContext bundleContext) throws Exception {
ServiceReference sr = bundleContext.getServiceReference(
felixdroid.ViewContainerManager.class.getName());
ViewContainerManager vcm = (ViewContainerManager)bundleContext.getService(sr);
ViewContainer vc = vcm.getContainer(bundleContext);
vc.showView(new HelloWorldView(vc)); }
...}
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 12
FelixDroid : le gestionnaire de plate-forme
• FelixDroid permet de gérer graphiquement la plate-forme Felix
– Gestion des bundles
• Installation, démarrage, mise-à-jour, arrêt, suppression
• Information sur les bundles
• Versions, dépendances, ...
– Gestion des OBR
• Ajout et suppression d'une liste d'OBR
– Déploiement de bundles depuis des OBR
• Visualisation et accès aux différentes applications en cours d'exécution
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 13
Démonstration : les applications
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 14
Démonstration : gestion des bundles
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 15
Démonstration : gestion des OBR
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 16
Un exemple d'utilisation : le shell
NLS/UBS/Valoria OUGF 19/05/2011 - Lille 17
Questions
?