Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
OSGi on 
Google Android 
using Apache Felix 
Marcel Offermans 
Karl Pauls 
luminis
luminis 
Who are we? 
• Karl Pauls 
• Marcel Offermans 
Arnhem Enschede 
image © 2008 Google Earth
luminis 
Agenda 
• Android 
• Introduction and architecture 
• Hello world demo 
• OSGi 
• Introduction 
• Framework and c...
luminis 
Agenda 
• Android 
• Introduction and architecture 
• Hello world demo 
• OSGi 
• Introduction 
• Framework and c...
luminis 
Android 
• First SDK release: november 2007 
• Android Developer Challenge, $10M prize money 
• Current SDK (M5 R...
luminis 
Android 
• Device Architecture 
• Dalvik Virtual Machine 
• From source to deployment 
• Anatomy of an applicatio...
Architecture This image is 
rather low-res, 
so perhaps draw 
it again... 
luminis
luminis 
Dalvik Virtual Machine 
• interpreter-only, register based virtual machine 
• optimized to run multiple VM instan...
From source to deployment 
.java .class .jar .dex .apk 
• Eclipse Plugin: Android Development Tools 
• compiles and packag...
luminis 
Anatomy 
• activity, a single screen 
• intent, describes what the application wants done 
• intent filter, descr...
luminis 
Anatomy Example 
intent 
filter 
activity intent activity 
intent 
service 
intent 
filter 
intent 
receiver
luminis 
Life cycle 
• Application life cycle is not controlled by the 
application itself 
• Android maintains an “import...
luminis 
Life cycle (Activity)
luminis 
Hello world demo! 
• Create an application with an activity in Eclipse 
• Set “hello world” text 
• Create a brea...
luminis 
Agenda 
• Android 
• Introduction and architecture 
• Hello world demo 
• OSGi 
• Introduction 
• Framework and c...
luminis 
OSGi history 
• Started as an embedded platform for the “home 
gateway” 
• Originally under the JCP as JSR-8 (199...
luminis 
OSGi today 
OSGi technology is the dynamic module system 
for Java™ 
OSGi technology is Universal Middleware. 
OS...
luminis 
OSGi Alliance 
• Expert Groups: 
• core platform (CPEG) 
• mobile (MEG) 
• vehicle (VEG) 
• enterprise (EEG) 
• r...
luminis 
OSGi specification 
OSGi Service Platform 
Service Compendium 
The OSGi Alliance 
Release 4, Version 4.1 
April 2...
OSGi Framework Layering 
luminis 
SERVICE MODEL 
LIFECYCLE 
MODULE 
Execution 
Environment 
L3 - Provides a publish/find/b...
Bundle 
luminis 
Module Layer (1/3) 
• Unit of deployment 
is the bundle i.e., a JAR 
• Separate class loader 
per bundle ...
luminis 
Module Layer (2/3) 
• Multi-version support 
• i.e., side-by-side versions 
• Explicit code boundaries and depend...
luminis 
Module Layer (3/3) 
• Sophisticated class space consistency model 
• Ensures code constraints are not violated 
•...
Life-cycle 
resolved active 
luminis 
Life-cycle Layer 
• Managed life cycle 
• States for each bundle; 
• Allows updates ...
luminis 
Service Layer 
• OSGi framework 
promotes service 
oriented interaction 
pattern among 
bundles 
Service 
Service...
Service 
Life-cycle 
luminis 
Security 
• Optional Security Layer based on 
Java permissions 
• Infrastructure to define, ...
luminis 
Shameless plug: 
if you want to know more about security in 
OSGi, come to our talk about 
Building Secure OSGi A...
Leveraging standard services 
• Specification: 
• OSGi compendium – catalog of standard service 
luminis 
descriptions 
• ...
User Admin Wire Admin 
luminis 
OSGi compendium 
Log 
XML Parser 
Position 
Measurement and State 
Event Admin Service Tra...
luminis 
Agenda 
• Android 
• Introduction and architecture 
• Hello world demo 
• OSGi 
• Introduction 
• Framework and c...
luminis 
Why OSGi and Android? 
Models are different 
Java VM 
App 
OSGi 
Dalvik VM 
App 
App App 
Dalvik VM 
App 
Dalvik ...
luminis 
Benefits of each model 
Java VM 
invoke 
App App 
Java VM 
App App 
lib lib lib 
Dalvik VM 
App 
OSGi Android 
Da...
Services in Android 
• Must be declared in AndroidManifest.xml 
• Can be started and stopped: 
Context.startService and Co...
luminis 
Getting Felix to run... 
• First step, getting the framework to run 
• Apache Felix is very portable, so we just ...
...others soon followed 
• At EclipseCon 2008, Santa Clara: 
• Neil Bartlett and BJ Hargrave, ported both Equinox and 
lum...
luminis 
A dynamic application 
• Apache Felix framework 
• embeds an activity to hook into; 
• embeds file install bundle...
host bundle 
ShapeComponent 
getShape() : SimpleShape 
getX() : int 
getY() : int 
DefaultShape 
create(Context c) : View ...
luminis 
Live demo! 
• Deploying Felix to the Phone Emulator 
• Installing the first bundle, the host application 
• Addin...
luminis 
Links 
• Slides, docs and code: 
http://opensource.luminis.net/ 
• Android SDK: 
http://code.google.com/android/ ...
luminis 
Questions?! 
? & !
Upcoming SlideShare
Loading in …5
×

OSGi on Google Android using Apache Felix

2,794 views

Published on

When Google released the first SDK for Android, which was way before the first mobile phones running it were released, Karl and Marcel decided to try and see what it would take to get Apache Felix running OSGi on Android.

This presentation introduces the Android platform, OSGi, and demonstrates how to run Apache Felix on Android. It builds on an earlier blog article that was published on this subject, an article that inspired many other OSGi implementations to try the same.

Published in: Software
  • Be the first to comment

OSGi on Google Android using Apache Felix

  1. 1. OSGi on Google Android using Apache Felix Marcel Offermans Karl Pauls luminis
  2. 2. luminis Who are we? • Karl Pauls • Marcel Offermans Arnhem Enschede image © 2008 Google Earth
  3. 3. luminis Agenda • Android • Introduction and architecture • Hello world demo • OSGi • Introduction • Framework and compendium • Apache Felix on Google Android • Getting it to run • Creating a dynamic application: paint program
  4. 4. luminis Agenda • Android • Introduction and architecture • Hello world demo • OSGi • Introduction • Framework and compendium • Apache Felix on Google Android • Getting it to run • Creating a dynamic application: paint program
  5. 5. luminis Android • First SDK release: november 2007 • Android Developer Challenge, $10M prize money • Current SDK (M5 RC15): march 2008 • Phones: second half of 2008?
  6. 6. luminis Android • Device Architecture • Dalvik Virtual Machine • From source to deployment • Anatomy of an application • Application life cycles
  7. 7. Architecture This image is rather low-res, so perhaps draw it again... luminis
  8. 8. luminis Dalvik Virtual Machine • interpreter-only, register based virtual machine • optimized to run multiple VM instances • executes files in .dex format • runs on posix-compliant operating systems • looks like Java ;)
  9. 9. From source to deployment .java .class .jar .dex .apk • Eclipse Plugin: Android Development Tools • compiles and packages automatically • allows you to launch and debug in the emulator • Command line: activityCreator.py • generates project structure • Ant build.xml file, optionally IntelliJ project files luminis javac jar dx aapt
  10. 10. luminis Anatomy • activity, a single screen • intent, describes what the application wants done • intent filter, describes intents that can be handled • intent receiver, non UI code that reacts to intent • service, background process with API • content provider, for shared data access
  11. 11. luminis Anatomy Example intent filter activity intent activity intent service intent filter intent receiver
  12. 12. luminis Life cycle • Application life cycle is not controlled by the application itself • Android maintains an “importancy hierarchy” based on the components and their state: • foreground process • visible process • service process • background process • empty process
  13. 13. luminis Life cycle (Activity)
  14. 14. luminis Hello world demo! • Create an application with an activity in Eclipse • Set “hello world” text • Create a breakpoint • Deploy and debug the application
  15. 15. luminis Agenda • Android • Introduction and architecture • Hello world demo • OSGi • Introduction • Framework and compendium • Apache Felix on Google Android • Getting it to run • Creating a dynamic application: paint program
  16. 16. luminis OSGi history • Started as an embedded platform for the “home gateway” • Originally under the JCP as JSR-8 (1999) • OSGi alliance, consists of a large number of big companies, with the following mission: • Maintaining and publicizing the OSGi specification. • Certifying implementations. • Organising events. • Current version: OSGi Release 4.1 (JSR-291)
  17. 17. luminis OSGi today OSGi technology is the dynamic module system for Java™ OSGi technology is Universal Middleware. OSGi technology provides a service-oriented, component-based environment for developers and offers standardized ways to manage the software lifecycle. These capabilities greatly increase the value of a wide range of computers and devices that use the Java™ platform.
  18. 18. luminis OSGi Alliance • Expert Groups: • core platform (CPEG) • mobile (MEG) • vehicle (VEG) • enterprise (EEG) • residential (REG) • Working Groups: • marketing • requirements
  19. 19. luminis OSGi specification OSGi Service Platform Service Compendium The OSGi Alliance Release 4, Version 4.1 April 2007 OSGi Alliance Digitally signed by OSGi Alliance DN: cn=OSGi Alliance, c=US Date: 2007.02.22 14:44:10 + 01'00' Signatu re Not Verified OSGi Service Platform Core Specification The OSGi Alliance Release 4, Version 4.1 April 2007 OSGi Alliance Digitally signed by OSGi Alliance DN: cn=OSGi Alliance, c=US Date: 2007.02.22 14:45:47 + 01'00' Signatur e Not Verified
  20. 20. OSGi Framework Layering luminis SERVICE MODEL LIFECYCLE MODULE Execution Environment L3 - Provides a publish/find/bind service model to decouple bundles L2 - Manages the life cycle of a bundle in a framework without requiring the vm to be restarted L1 - Creates the concept of a module (aka. bundles) that use classes from each other in a controlled way according to system and bundle constraints L0 - OSGi Minimum Execution Environment CDC/Foundation JavaSE
  21. 21. Bundle luminis Module Layer (1/3) • Unit of deployment is the bundle i.e., a JAR • Separate class loader per bundle • Class loader graph • Independent namespaces • Class sharing at the Java package level Module Module Bundle Bundle Bundle org.apache.utils 1.0 exports org.apache.db 1.4 org.apache.log 2.3 org.apache.utils 1.1 exports imports exports imports exports
  22. 22. luminis Module Layer (2/3) • Multi-version support • i.e., side-by-side versions • Explicit code boundaries and dependencies • i.e., package imports and exports • Support for various sharing policies • i.e., arbitrary version range support • Arbitrary export/import attributes • Influence package selection Module
  23. 23. luminis Module Layer (3/3) • Sophisticated class space consistency model • Ensures code constraints are not violated • Package filtering for fine-grained class visibility • Exporters may include/exclude specific classes from exported package • Bundle fragments • A single logical module in multiple physical bundles • Bundle dependencies • Allows for tight coupling when required Module
  24. 24. Life-cycle resolved active luminis Life-cycle Layer • Managed life cycle • States for each bundle; • Allows updates of existing bundles. • Dynamically install, start, update, and uninstall Life-cycle start end installed install start starting stopping stop uninstall uninstalled Module
  25. 25. luminis Service Layer • OSGi framework promotes service oriented interaction pattern among bundles Service Service Log Database publish use use publish Bundle Bundle Bundle Bundle Prefs publish use publish find Service Provider Service Requester Service Registry interact Life-cycle Module
  26. 26. Service Life-cycle luminis Security • Optional Security Layer based on Java permissions • Infrastructure to define, deploy, and manage fine-grained application permissions • Code authenticated by location or signer • Well defined API to manage permissions • PermissionAdmin • ConditionalPermissionAdmin Security Module
  27. 27. luminis Shameless plug: if you want to know more about security in OSGi, come to our talk about Building Secure OSGi Applications
  28. 28. Leveraging standard services • Specification: • OSGi compendium – catalog of standard service luminis descriptions • Implementations: • OBR repository at bundles.osgi.org – over 1400 bundles, implement compendium and other services • Maven repository and third party OBR’s • More and more projects are made OSGi compatible, for example: • Apache Commons OSGi
  29. 29. User Admin Wire Admin luminis OSGi compendium Log XML Parser Position Measurement and State Event Admin Service Tracker HTTP Device Access Configuration Admin Preferences Metatype IO Connector Initial Provisioning UPnP™ Device Execution Environment Spec Declarative Services OSGi Service Platform Service Compendium The OSGi Alliance Release 4, Version 4.1 April 2007 OSGi Alliance Digitally signed by OSGi Alliance DN: cn=OSGi Alliance, c=US Date: 2007.02.22 14:44:10 + 01'00' Signatu re Not Verified
  30. 30. luminis Agenda • Android • Introduction and architecture • Hello world demo • OSGi • Introduction • Framework and compendium • Apache Felix on Google Android • Getting it to run • Creating a dynamic application: paint program
  31. 31. luminis Why OSGi and Android? Models are different Java VM App OSGi Dalvik VM App App App Dalvik VM App Dalvik VM App Android
  32. 32. luminis Benefits of each model Java VM invoke App App Java VM App App lib lib lib Dalvik VM App OSGi Android Dalvik VM App Dalvik VM App crash
  33. 33. Services in Android • Must be declared in AndroidManifest.xml • Can be started and stopped: Context.startService and Context.stopService() • You can bind to a service if you want to talk to it • Services can run in remote processes, in which case there is an Android IDL compiler to generate stubs • handles primitives, some collections and Parcelable’s luminis by value • handles other AIDL interfaces by reference
  34. 34. luminis Getting Felix to run... • First step, getting the framework to run • Apache Felix is very portable, so we just dex’ed it • found a couple of issues, fixed in release 1.0.3 • Second step, dynamically loading bundles • the hard part was finding a way to load classes • found undocumented internal class • Google, we need an official API for this! • For more details: http://blog.luminis.nl/roller/luminis/entry/osgi_on_google_android_using
  35. 35. ...others soon followed • At EclipseCon 2008, Santa Clara: • Neil Bartlett and BJ Hargrave, ported both Equinox and luminis Concierge to Android • Slides at: https://eclipsecon.greenmeetingsystems.com/attachments/download/390 • ProSyst announced: • A port of their mBedded Server: http://www.adon-line.de/kunden/prosystBlog/?p=24 • Knopflerfish • We talked to Eric Wistrand and Christer Larsson of MakeWave but they have no plans yet
  36. 36. luminis A dynamic application • Apache Felix framework • embeds an activity to hook into; • embeds file install bundle for easy deployment. • Host bundle that provides a canvas and a toolbar • Shape bundles that add new shapes • Based on example from Apache Felix website: http://felix.apache.org/site/apache-felix-application-demonstration.html
  37. 37. host bundle ShapeComponent getShape() : SimpleShape getX() : int getY() : int DefaultShape create(Context c) : View Activator shape bundle shape bundle luminis Architecture shape bundle apache felix application ...osgi... ...android... Activity ... ...android.felix ApacheFelix onCreate(Bundle b) onDestroy() onStart() onStop() ...android.felix.view ViewFactory create(Context c) : View ...android.servicebased.host ... ...android.servicebased.host.service SimpleShape draw(Canvas c, int x, int y) BundleActivator start(BundleContext c) stop(BundleContext c) ServiceTrackerCustomizer addingService(ServiceReference r) : o modifiedService(ServiceReference r, Object o) removedService(ServiceReference r, Object o) ...android.servicebased.circle Activator ...
  38. 38. luminis Live demo! • Deploying Felix to the Phone Emulator • Installing the first bundle, the host application • Adding and removing plugins: square, circle and triangle
  39. 39. luminis Links • Slides, docs and code: http://opensource.luminis.net/ • Android SDK: http://code.google.com/android/ • Open Handset Alliance: http://www.openhandsetalliance.com/ • Apache Felix and OSGi: http://felix.apache.org/ http://www.osgi.org/ • Karl Pauls: karl.pauls@luminis.nl Marcel Offermans: marcel.offermans@luminis.nl
  40. 40. luminis Questions?! ? & !

×