Professional Documents
Culture Documents
dev camp
android development workshop
amsterdam, november 2008
diego torres milano
diego@codtech.com
copyright © 2008 cod technologies ltd www.codtech.com
“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 www.codtech.com
agenda
● introduction to android
● android architecture
● building blocks
● your first android application
● testing and performance
● best practices
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
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 www.codtech.com
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 www.codtech.com
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 www.codtech.com
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: source.android.com
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
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 www.codtech.com
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 www.codtech.com
courtesy of Google
android architecture
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
building blocks
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
Activities lifecycle
rectangles are callbacks where
we can implement operations
performed on state changes
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
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 www.codtech.com
pattern: load layout
android compiles the XML layout code that is
later loaded in code usually by
setContentView(R.layout.filename);
...
}
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
pattern: ids
using a unique id in a XML View definition
permits locating it later in Java code
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
intents playground
http://codtech.com/android/IntentPlayground.apk
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
Notifications
● notify the user about
events
● sent through
NotificationManager
● types
– persistent icon
– turning leds
– sound or vibration
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
AndroidManifest.xml
● control file that tells
the system what to do
and how the toplevel
components are
related
● it's the “glue” that
actually specifies
which Intents your
Activities receive
● specifies permissions
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
android project
copyright © 2008 cod technologies ltd www.codtech.com
default application
● autogenerated
application template
● default resources
– icon
– layout
– strings
● default
AndroidManifest.xml
● default run
configuration
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
create the layout
● remove old layout
● add a RelativeLayout
● add a View (MapView not
supported by ADT)
● replace View by
com.google.android.m
apview
● change id to mapview
● add a Spinner filling
parent width
copyright © 2008 cod technologies ltd www.codtech.com
run the application
● com.google.android.
maps it's an optional
library not included by
default
● add <uses-library
android:name="com.go
ogle.android.maps" /
> to manifest as
application node
copyright © 2008 cod technologies ltd www.codtech.com
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="0GNIO0J9wdmcNm4gCV6S0nlaFE8bHa9W
XXXXXX"
copyright © 2008 cod technologies ltd www.codtech.com
MapActivy
● checking DDMS logcat again
● change base class to MapActivity
● fix imports
● add unimplemented methods
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
finally our map
still some problems ...
● spinner is covered
android:layout_alignPa
rentTop="true"
● has no prompt
prompt: @string/prompt
● externalize resource
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
pattern: resources
resources are external files (that is, noncode 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 www.codtech.com
arrays.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<!-- No support for multidimensional
arrays or complex objects yet (1.0r1) -->
<string-array name="location_names">
<item>Mediamatic Duintjer</item>
<item>NH Hotel</item>
<item>Airport</item>
</string-array>
<string-array name="locations">
<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 www.codtech.com
complete the class
● create the locations array
locations =
getResources().getStringArray(R.array.locations);
● get the views (ids pattern)
spinner = (Spinner) findViewById(R.id.Spinner01);
mapView = (MapView) findViewById(R.id.mapview);
● 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 www.codtech.com
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 www.codtech.com
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 www.codtech.com
goToSelectedLocation
mapController.animateTo(p);
mapController.setZoom(zoom);
}
copyright © 2008 cod technologies ltd www.codtech.com
more events
● turn map clickable
android:clickable="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 www.codtech.com
we did it !
● Some things to try
– select a location
– pan
– zoom in
– zoom out
– toggle satellite
copyright © 2008 cod technologies ltd www.codtech.com
“Remember that there is no
code faster than no code”
Taligent's Guide to Designing Programs
copyright © 2008 cod technologies ltd www.codtech.com
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 www.codtech.com
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 www.codtech.com
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 pseudorandom of user
events
copyright © 2008 cod technologies ltd www.codtech.com
1000000
1500000
2000000
2500000
3000000
500000
0
Add a local variable
Call String.length()
copyright © 2008 cod technologies ltd www.codtech.com
Inflate 1 LinearLayout with 6 View
copyright © 2008 cod technologies ltd www.codtech.com
thank you
android development workshop
diego torres milano
diego@codtech.com
copyright © 2008 cod technologies ltd www.codtech.com