More Related Content
Similar to Android Development Tutorial V3
Similar to Android Development Tutorial V3 (20)
Android Development Tutorial V3
- 3. agenda
● introduction to android
● development environment
● building blocks
● your first android application
● testing and performance
copyright © 2009 cod technologies ltd www.codtech.com
- 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 © 2009 cod technologies ltd www.codtech.com
- 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 © 2009 cod technologies ltd www.codtech.com
- 12. android architecture
written in
C/C++
written
in java
register
based
VM
courtesy of Google
copyright © 2009 cod technologies ltd www.codtech.com
- 16. java
● installed from ubuntu repositories
● packages matching sunjava6*
diego@bruce:~$ java -version
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-
b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed
mode, sharing)
copyright © 2009 cod technologies ltd www.codtech.com
- 17. android SDK 1.6 and ADT
● download from http://developer.android.com
and install to /opt directory
● create symbolic link /opt/android-sdk to
point to installed SDK
● add site
https://dlssl.google.com/android/eclipse/
to eclipse software updates for ADT
copyright © 2009 cod technologies ltd www.codtech.com
- 19. emulator
$ emulator @1.5_r3
copyright © 2009 cod technologies ltd www.codtech.com
- 21. zipalign
● optimizes the way an application is packaged
● potentially makes your application and system
run faster
● android accesses resources efficiently where
they are aligned on 4byte boundaries
● ADT automatically align release packages
$ zipalign -c -v 4 my.apk
copyright © 2009 cod technologies ltd www.codtech.com
- 25. Activities
● Activities are stacked
like a deck of cards
● only one is visible
● only one is active
● new activities are
placed on top
copyright © 2009 cod technologies ltd www.codtech.com
- 27. 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 © 2009 cod technologies ltd www.codtech.com
- 28. 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 © 2009 cod technologies ltd www.codtech.com
- 29. Views and Viewgroups
● Views and
Viewgroups trees
build up complex
GUIs
● android framework is
responsible for
– measuring
– laying out
– drawing
copyright © 2009 cod technologies ltd www.codtech.com
- 32. 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 © 2009 cod technologies ltd www.codtech.com
- 33. intent playground
install from android market or from
http://codtech.com/android/IntentPlayground.apk
copyright © 2009 cod technologies ltd www.codtech.com
- 34. 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 © 2009 cod technologies ltd www.codtech.com
- 35. Notifications
● notify the user about
events
● sent through
NotificationManager
● types
– persistent icon
– turning leds
– sound or vibration
copyright © 2009 cod technologies ltd www.codtech.com
- 36. 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 © 2009 cod technologies ltd www.codtech.com
- 37. 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 © 2009 cod technologies ltd www.codtech.com
- 39. designing the UI
this simple UI designs
contains
● the window title
● a spinner (drop down
box) containing the
available locations
● a map displaying the
selected location
● zoom buttons
copyright © 2009 cod technologies ltd www.codtech.com
- 40. create project
android
target
version
unique
package
name
copyright © 2009 cod technologies ltd www.codtech.com
- 41. create test project
test
package
name
copyright © 2009 cod technologies ltd www.codtech.com
- 43. default application
● autogenerated
application template
● default resources
– icon
– layout
– strings
● default
AndroidManifest.xml
● default run
configuration
copyright © 2009 cod technologies ltd www.codtech.com
- 44. create the layout
● remove layout
● add a RelativeLayout
● add a View (MapView not
supported by ADT)
● replace View by
com.google.android.m
aps.MapView
● change id to MapView
● add a Spinner filling
parent width
copyright © 2009 cod technologies ltd www.codtech.com
- 45. run the application
● com.google.android.
maps it's an optional
library not included by
default
● edit Android Manifest
● add Uses Library
com.google.android.m
aps as Application
node
copyright © 2009 cod technologies ltd www.codtech.com
- 46. 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 © 2009 cod technologies ltd www.codtech.com
- 47. obtaining google maps api key
● $ keytool -list
-alias
androiddebugkey
-keystore
~/.android/debug.k
eystore
your
fingerprint
● http://code.google.co
m/android/mapsapi
signup.html
copyright © 2009 cod technologies ltd www.codtech.com
- 48. MapActivity
● 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 © 2009 cod technologies ltd www.codtech.com
- 49. where is the map ?
● still no map displayed
● check DDMS logcat
● errors displayed
● a permission is missing
– INTERNET
● add it to Manifest
copyright © 2009 cod technologies ltd www.codtech.com
- 50. finally our map
still some problems ...
● spinner is covered
android:layout_alignPa
rentTop="true"
● spinner has no prompt
prompt: @string/prompt
● externalize resource
value Select a location
copyright © 2009 cod technologies ltd www.codtech.com
- 53. locations.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<!-- No support for multidimensional
arrays or complex objects yet (1.6r1) -->
<string-array name="location_names">
<item>Akihabara Convention Hall</item>
<item>Hotel Villa Fontaine</item>
<item>Narita Intl. Airport</item>
</string-array>
<string-array name="locations">
<item>35.699434,139.772079,16</item>
<item>35.669012,139.765384,14</item>
<item>35.773118,140.379181,12</item>
</string-array>
</resources>
http://android.codtech.com/jls2009/locations.xml
copyright © 2009 cod technologies ltd www.codtech.com
- 54. complete the class
● create the locations array field
locations =
getResources().getStringArray(R.array.locations);
● find the views (ids pattern)
spinner = (Spinner) findViewById(R.id.Spinner01);
mapView = (MapView) findViewById(R.id.MapView);
● create the adapter
final ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this,
R.array.location_names,
android.R.layout.simple_spinner_item);
spinner.setAdapter(adapter)
copyright © 2009 cod technologies ltd www.codtech.com
- 55. 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 © 2009 cod technologies ltd www.codtech.com
- 56. respond to events
● when an item is
selected map should
be centered at that
location
spinner.
setOnItemSelectedListener(
new
OnItemSelectedListener() {
});
● in the listener invoke
goToSelectedLocation(ar
g2);
copyright © 2009 cod technologies ltd www.codtech.com
- 57. goToSelectedLocation
protected void goToSelectedLocation(int position) {
String[] loc = locations[position].split(",");
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)); mapController
should be
Log.d(TAG, "Should go to " + p); initialized in
onCreate
mapController.animateTo(p);
mapController.setZoom(zoom);
}
http://android.codtech.com/jls2009/goToSelectedLocation.txt
copyright © 2009 cod technologies ltd www.codtech.com
- 58. 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;
}
http://android.codtech.com/jls2009/onKeyDown.txt
copyright © 2009 cod technologies ltd www.codtech.com
- 59. zoom controls
● add a FrameLayout
● align to parent bottom
● in onCreate
...
zoomControls =
(ViewGroup)findViewById(
R.id.FrameLayout01);
... mapView.setBuiltInZ
oomControls(true);
zoomControls.addView(
mapView.getZoomControls());
copyright © 2009 cod technologies ltd www.codtech.com
- 60. we did it !
● Some things to try
– select a location
– pan
– zoom in
– zoom out
– toggle satellite
copyright © 2009 cod technologies ltd www.codtech.com
- 61. japanese localization
existing
resource
new
language
copyright © 2009 cod technologies ltd www.codtech.com
- 62. japanese application
● resources
automatically selected
● match phone locale
● no programming
needed
copyright © 2009 cod technologies ltd www.codtech.com
- 63. hierarchyviewer – tree
properties
selected
view
highlighted
selected
view
copyright © 2009 cod technologies ltd www.codtech.com
- 67. best practices
● consider performance, android is not a desktop
● avoid creating objects
● use native methods
● prefer virtual over interface
● prefer static over virtual (if no object access required)
● avoid internal getter/setters
● declares constants final
● avoid enums
copyright © 2009 cod technologies ltd www.codtech.com
- 68. testing
● android sdk 1.6 features
– creation of test projects
– ActivityUnitTestCase to run isolated unit tests
– ServiceTestCase to test services
– ActivityInstrumentationTestCase2 to run functional
tests of activities
● ApiDemos includes some test samples
● monkey, generates pseudorandom of user
events
copyright © 2009 cod technologies ltd www.codtech.com
- 69. 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 © 2009 cod technologies ltd www.codtech.com
Inflate 1 LinearLayout with 6 View
Inflate 1 LinearLayout with 6 TextView
Launch an empty activity
Time
- 70. traceview
// start tracing to sdcard
Debug.startMethodTracing(“mytrace”);
copyright © 2009 cod technologies ltd www.codtech.com
- 71. dmtracedump
$ sudo aptget install graphviz
copyright © 2009 cod technologies ltd www.codtech.com