Android Development Workshop


Published on

Presentation by Diego Torres Milano at Mobile Dev Camp (

Published in: Technology
  • Best android presenttaion I’ve seend until now.... Despite the errors people have stressed
    Are you sure you want to  Yes  No
    Your message goes here
  • Nice intro in a Google Talk sort of way, but with better resolution.
    Touches base with the baser aspects of AndDev quite nicely.
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Android Development Workshop

  1. mobile dev camp android development workshop amsterdam, november 2008 diego torres milano copyright © 2008  cod technologies ltd
  2. “I have always wished that my  computer would be as easy to  use as my telephone. My wish has come true. I no longer know how to use my  telephone.” ­­ Bjarne Stroustrup copyright © 2008  cod technologies ltd
  3. agenda ● introduction to android ● android architecture ● building blocks ● your first android application ● testing and performance ● best practices copyright © 2008  cod technologies ltd
  4. introduction to android after this section you will... ● identify unique features of  android platform ● compare android against  other platforms ● understand android building  blocks copyright © 2008  cod technologies ltd
  5. what is android ? ● android is the first complete, open  and free mobile platform ● developed by Open Handset  Alliance ● software stack than includes – operating system – middleware – key applications – rich set of APIs Portions of this page are reproduced from work created and  shared by Google and used according to terms described in  the Creative Commons 2.5 Attribution License. copyright © 2008  cod technologies ltd
  6. is android linux ? NO, android is not linux ! android is based on a linux kernel   but it's not GNU/Linux ● no native windowing  system ● no glibc support ● no GNU/Linux utilities copyright © 2008  cod technologies ltd
  7. so is android java ? NO, android is not java ! android is not an implementation  of any of the Java variants ● uses the java language ● implements part of the  Java5 SE specification ● runs on a dalvik virtual  machine instead of JVM copyright © 2008  cod technologies ltd
  8. android linux kernel android is based on a linux 2.6 kernel, providing rnel, p ● security ● memory management ● process management ● network stack ● driver model ● abstraction layer kernel source: copyright © 2008  cod technologies ltd
  9. linux kernel enhancements android introduces some linux kernel patches ● alarm ● ashmem ● binder ● power management ● low memory killer (no swap space available) ● logger copyright © 2008  cod technologies ltd
  10. unique platform characteristics android characteristics not found on other platforms ● open source ● “all applications are equal” model ● dalvik virtual machine copyright © 2008  cod technologies ltd
  11. other characteristics interesting features as well, but they are more  common across other mobile platforms ● application framework enabling reuse of components ● integrated browser based on WebKit OSS engine ● 3D graphics based on the OpenGL ES ● SQLite for structured data storage ● media support for common audio, video, and still images ● camera, GPS, compass, and accelerometer copyright © 2008  cod technologies ltd
  12. courtesy of Google android architecture copyright © 2008  cod technologies ltd
  13. android building blocks after this section you will... ● recognize the fundamental  building blocks ● use these building blocks to  create applications ● understand applications  lifecycle copyright © 2008  cod technologies ltd
  14. building blocks copyright © 2008  cod technologies ltd
  15. Activities ● Activities are stacked  like a deck of cards ● only one is visible ● only one is active ● new activities are  placed on top copyright © 2008  cod technologies ltd
  16. Activities lifecycle rectangles are callbacks where we can implement operations performed on state changes copyright © 2008  cod technologies ltd
  17. Activities states ● active – at the top of the stack ● paused – lost focus but still visible – can be killed by LMK ● stopped – not at the top of th stack ● dropped – killed to reclaim its memory copyright © 2008  cod technologies ltd
  18. Views ● Views are basic building blocks ● know how to draw themselves ● respond to events ● organized as trees to build up GUIs ● described in XML in layout resources copyright © 2008  cod technologies ltd
  19. pattern: load layout android compiles the XML layout code that is  later loaded in code usually by public void onCreate(Bundle savedInstanceState) { ... setContentView(R.layout.filename); ... } copyright © 2008  cod technologies ltd
  20. Views and Viewgroups ● Views and  Viewgroups trees  build up complex  GUIs ● android framework is  responsible for – measuring – laying out – drawing copyright © 2008  cod technologies ltd
  21. pattern: ids using a unique id in a XML View definition  permits locating it later in Java code private View name; public void onCreate(Bundle savedInstanceState) { ... name = (View) findViewById(; ... } copyright © 2008  cod technologies ltd
  22. Intents ● Intents are used to move from Activity to Activity ● describes what the application wants ● provides late runtime binding primary attributes attribute description action the general action to be performed, such as VIEW, EDIT, MAIN, etc. data the data to operate on, such as a person record in the contacts database, as URI copyright © 2008  cod technologies ltd
  23. intents playground copyright © 2008  cod technologies ltd
  24. Services ● services run in the background ● don't interact with the user ● run on the main thread of the process ● is kept running as long as – is started – has connections copyright © 2008  cod technologies ltd
  25. Notifications ● notify the user about  events ● sent through  NotificationManager ● types – persistent icon – turning leds – sound or vibration copyright © 2008  cod technologies ltd
  26. ConentProviders ● ContentProviders are objects that can – retrieve data – store data ● data is available to all applications ● only way to share data across packages ● usually the backend is SQLite ● they are loosely linked to clients ● data exposed as a unique URI copyright © 2008  cod technologies ltd
  27. AndroidManifest.xml ● control file that tells  the system what to do  and how the top­level  components are  related ● it's the “glue” that  actually specifies  which Intents your  Activities receive ● specifies permissions copyright © 2008  cod technologies ltd
  28. your first android after this section you will... ● create your own android map  project ● design the UI ● externalize resources ● react to events ● run the application copyright © 2008  cod technologies ltd
  29. android project copyright © 2008  cod technologies ltd
  30. default application ● auto­generated  application template ● default resources – icon – layout – strings ● default  AndroidManifest.xml ● default run  configuration copyright © 2008  cod technologies ltd
  31. designing the UI this simple UI designs  contains ● the window title ● a spinner (drop down  box) containing the  desired location over  the map ● a map displaying the  selected location copyright © 2008  cod technologies ltd
  32. create the layout ● remove old layout ● add a RelativeLayout ● add a View (MapView not  supported by ADT) ● replace View by apview ● change id to mapview ● add a Spinner filling  parent width copyright © 2008  cod technologies ltd
  33. run the application ● maps it's an optional  library not included by  default ● add <uses-library android:name=quot;com.go; / > to manifest as  application node copyright © 2008  cod technologies ltd
  34. Google Maps API key ● checking DDMS logcat we find java.lang.IllegalArgumentException: You need to specify an API Key for each MapView. ● to access Google Maps we need a key ● application must be signed with the same key ● key can be obtained from Google ● MapView should include android:apiKey=quot;0GNIO0J9wdmcNm4gCV6S0nlaFE8bHa9W XXXXXXquot; copyright © 2008  cod technologies ltd
  35. MapActivy ● checking DDMS logcat again java.lang.IllegalArgumentException: MapViews can only be created inside instances of MapActivity. ● change base class to MapActivity ● fix imports ● add unimplemented methods copyright © 2008  cod technologies ltd
  36. where is the map ? ● still no map displayed ● check DDMS logcat ● lots of IOExceptions ! ● some uses permissions  are missing – ACCESS_COARSE_LOCATION – INTERNET copyright © 2008  cod technologies ltd
  37. finally our map still some problems ... ● spinner is covered android:layout_alignPa rentTop=quot;truequot; ● has no prompt prompt: @string/prompt ● externalize resource copyright © 2008  cod technologies ltd
  38. pattern: adapters an Adapter object acts as a bridge between an  AdapterView and the underlying data for that view ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.array, android.R.layout.layout); view.setAdapter(adapter); The Adapter is also responsible for making a View for each item in the  data set. copyright © 2008  cod technologies ltd
  39. pattern: resources resources are external files (that is, non­code files)  that are used by your code and compiled into your  application at build time. <resources> <string-array name=”array”> <item>item</item> </string-array> </resources> res = getResources().getType(id); copyright © 2008  cod technologies ltd
  40. arrays.xml <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <resources> <!-- No support for multidimensional arrays or complex objects yet (1.0r1) --> <string-array name=quot;location_namesquot;> <item>Mediamatic Duintjer</item> <item>NH Hotel</item> <item>Airport</item> </string-array> <string-array name=quot;locationsquot;> <item>52.363125,4.892070,18</item> <item>37.244832,-115.811434,9</item> <item>-34.560047,-58.44924,16</item> </string-array> </resources> copyright © 2008  cod technologies ltd
  41. complete the class ● create the locations array locations = getResources().getStringArray(R.array.locations); ● get the views (ids pattern) spinner = (Spinner) findViewById(; mapView = (MapView) findViewById(; ● create the adapter ArrayAdapter<CharSequence> adapter = ArrayAdapter. createFromResource(this, R.array.location_names, android.R.layout.simple_spinner_item); spinner.setAdapter(adapter) copyright © 2008  cod technologies ltd
  42. almost there ● map is displayed ● spinner is displayed ● drop down is  displayed ● but there's no  selection button ... adapter. setDropDownViewResource( android.R.layout. simple_spinner_dropdown_item ); copyright © 2008  cod technologies ltd
  43. respond to events ● when an item is  selected map should  be centered at that  location spinner. setOnItemSelectedListener( new OnItemSelectedListener() { }); ● invoke  goToSelectedLocation(ar g2); copyright © 2008  cod technologies ltd
  44. goToSelectedLocation protected void goToSelectedLocation(int position) { String[] loc = locations[position].split(quot;,quot;); double lat = Double.parseDouble(loc[0]); double lon = Double.parseDouble(loc[1]); int zoom = Integer.parseInt(loc[2]); GeoPoint p = new GeoPoint((int)(lat * 1E6), (int)(lon * 1E6)); Log.d(TAG, quot;Should go to quot; + p); mapController.animateTo(p); mapController.setZoom(zoom); } copyright © 2008  cod technologies ltd
  45. more events ● turn map clickable android:clickable=quot;true” ● override onKeyDown switch (keyCode) { case KeyEvent.KEYCODE_I: mapController.zoomIn(); break; case KeyEvent.KEYCODE_O: mapController.zoomOut(); break; case KeyEvent.KEYCODE_S: mapView.setSatellite( !mapView.isSatellite()); break; } copyright © 2008  cod technologies ltd
  46. we did it ! ● Some things to try – select a location – pan – zoom in – zoom out – toggle satellite copyright © 2008  cod technologies ltd
  47. “Remember that there is no  code faster than no code” ­­ Taligent's Guide to Designing Programs copyright © 2008  cod technologies ltd
  48. testing and performance after this section you will... ● understand the best practices  to develop for android ●  identify the alternatives to test  units, services and applications ● performance copyright © 2008  cod technologies ltd
  49. best practices ● consider performance, android is not a desktop ● avoid creating objects ● use native methods ● prefer virtual over interface ● prefer static over virtual ● avoid internal getter/setters ● declares constants final ● avoid enums copyright © 2008  cod technologies ltd
  50. testing ● android sdk 1.0 introduces – ActivityUnitTestCase to run isolated unit tests – ServiceTestCase to test services – ActivityInstrumentationTestCase to run functional  tests of activities ● ApiDemos includes some test samples ● monkey, generates pseudo­random of user  events copyright © 2008  cod technologies ltd
  51. 1000000 1500000 2000000 2500000 3000000 500000 0 Add a local variable Add a member variable Call String.length() Call empty static native method Call empty static method performance Call empty virtual method Call empty interface method Call Iterator:next() on a HashMap Call put() on a HashMap Inflate 1 View from XML Inflate 1 LinearLayout with 1 TextView copyright © 2008  cod technologies ltd Inflate 1 LinearLayout with 6 View Inflate 1 LinearLayout with 6 TextView Launch an empty activity Time
  52. summary ● introduction to android ● android building blocks ● copyright © 2008  cod technologies ltd
  53. “If things seem under control,  you're not going fast enough.” ­­ Mario Andretti copyright © 2008  cod technologies ltd
  54. thank you android development workshop diego torres milano copyright © 2008  cod technologies ltd