This document provides an overview of the Android mobile platform architecture. It describes that Android is based on the Linux kernel with additional enhancements for power management, inter-process communication, and more. It also discusses the Dalvik virtual machine, core libraries, and hardware abstraction layer. Finally, it covers aspects of application development including setting up the manifest, laying out UI with XML, and debugging apps.
5. The Linux Kernel in
Android
• Android is based on the Linux kernel
• Android is not Linux
• No native windowing system
• No glibc
• Does not include full set of standard linux
utilities
• Kernel source at http://git.android.com
6. Why Linux kernel for
Android ?
• Great memory and process management
• Great permissions based security model
• Proven driver model
• Support for shared libraries
• It’s already open source
8. Kernel Enhancements:
Binder
• Driver to facilitate inter-process
communication
• High performance through shared memory
• Per-process thread pool for processing
requests
• Reference counting and mapping of object
references across processes
• Synchronous calls between processes.
10. Kernel Enhancements:
Power Management
• Built on top of standard Linux power
management
• More aggressive power manager
• Components make requests to keep power
via “wake locks”
• Supports different types of wake locks
• android.os.PowerManager
12. Libraries: Bionic Libc
• Custom libc implementation optimized for
embedded use
• License BSD - Keeps GPL out of user space
• Size: loads in each process so it needs to be
small
• Fast: limited CPU power (fast and small
pthread implementation)
13. Libraries: WebKit
• Based on the open source WebKit browser
• Renders pages in full (desktop) mode
• Full CSS, JavaScript, DOM, Ajax support
• Single-column and Adaptive view rendering
• Really powerful
14. Libraries:
Media Framework
• Based on PacketVideo OpenCORE
platform
• Supports standard audio, video and stills
• Support for hardware/software codecs
16. Libraries: Flingers
• Flingers are native servers that regulate all
the heavy lifting for System I/O
• Surface Flinger
• Audio Flinger
17. Hardware Abstraction
Layer
• user space C/C++ library layer
• Standard interface that Android drivers
need to implement
• Separates Android platform logic from
hardware interface
• Plugabble : e.g. you can plug in OSS below
18. Dalvik Virtual Machine
• Android’s custom clean room
implementation virtual machine
• provides application portability
• runs optimized file format (.dex)
• Java .class/.jar files converted into .dex at
build time
• Supports multiple virtual machine
processes per VM
23. How Android boots:
Init
• Similar to linux based systems
• At startup the boot loader loads the linux
kernel and starts the init process
24. Runtime Walkthrough
• USB Daemon (usbd)
• Android debug bridge
• Debugger Daemon
• Radio interface layer daemon
25. Runtime Walkthrough (2)
• Initializes service manager
• Registers service manager as default
context manager for Binder service
26. Init and Zygote
• Init process starts with the zygote process
• a nascent process which strats the dalvik VM
instance
• loads classes and listens on socket for request
to spawn VM’s
• Forks on request to create VM instances for
managed processes
• Copy-on-write to maximize re-use and minimize
footprint
27. Layer Interaction
• App -> Runtime Service -> Lib
• App -> Runtime Service -> Native Service -> Lib
• App -> Runtime Service -> Native Daemon -> Lib
29. Open Source Licenses
• GPL - Linux Kernel and modules, bluez
• BSD - Bionic
• Apache - almost everything else
30. Closed source
Components
• HTC RIL (radio interface) library and data files (this is glue between the
telephony layer in android and the AT/QMI control channels provided via
GPL kernel drivers)
• libhgl.so - Qualcomm/ati opengl ES library
• libqcamera.so - Qualcomm camera library
• akmd - software to process and adjust compass/accelerometer events
• Qualcomm h264 codec frontend (does some processing the dsp cannot do)
• frontend HW accel codec
• quot;Google appsquot; - Maps, Gmail, etc.
31. Project Status
• Public vs private branches
• Repo, git and Gerrit
• Cupcake - development branch
• http://source.android.com/roadmap/cupcake
33. Setting up your
machine
• Android development can be done on
• Ubuntu 32 bit (preferred)
• Ubuntu AMD64
• MacOS X
• http://source.android.com/download
34. Setting up your machine (2)
• Steps (at a glance)
• Non Android specific prereqs:
• Install git and GPG for your platform
• JDK 5.0, update 12 or higher.
• The following packages: flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev
(optional), build-essential, zip, curl.
• You might also want Valgrind, a tool that will help you find memory leaks, stack
corruption, array bounds overflows, etc.
• libreadline
• Install repo script
• Create a working dir
• repo init, repo sync
• Build the code - quot;makequot;
43. All the Tools Fit....
Android Emulator: A virtual mobile device that runs on your computer.You use the emulator to design, debug, and test your applications in
an actual Android run-time environment.
Android Development Tools Plugin (for the Eclipse IDE): The ADT plugin adds powerful extensions to the Eclipse integrated
environment, making creating and debugging your Android applications easier and faster. If you use Eclipse, the ADT plugin gives you an incredible
boost in developing Android applications.
Hierarchy Viewer: The Hierarchy Viewer tool allows you to debug and optimize your user interface. It provides a visual representation of your
layout's hierarchy of Views and a magnified inspector of the current display with a pixel grid, so you can get your layout just right.
Draw 9-patch: The Draw 9-patch tool allows you to easily create a NinePatch graphic using a WYSIWYG editor. It also previews stretched
versions of the image, and highlights the area in which content is allowed.
Dalvik Debug Monitor Service (ddms): Integrated with Dalvik, the Android platform's custom VM, this tool lets you manage processes on
an emulator or device and assists in debugging.You can use it to kill processes, select a specific process to debug, generate trace data, view heap
and thread information, take screenshots of the emulator or device, and more.
Android Debug Bridge (adb): The adb tool lets you install your application's .apk files on an emulator or device and access the emulator or
device from a command line. You can also use it to link a standard debugger to application code running on an Android emulator or device.
Android Asset Packaging Tool (aapt): The aapt tool lets you create .apk files containing the binaries and resources of Android
applications.
mksdcard: Helps you create a disk image that you can use with the emulator, to simulate the presence of an external storage card (such as an
SD card).
44. What’s in an App?
Libraries
Other
Service
Default Other
Activities
Other
Intents
Activity Activities
Activities Content
Providers
Android Manifest
Drawable Layouts Values Assets
51. OpenIntents.org
Title Action Description
Call android.intent.action.CALL Perform a call to someone specified by the data.
Capture an image android.media.action.IMAGE_CAPTURE An application implementing this intent protocol allows the user
to capture an image.
Check for Update org.openintents.intents.CHECK_VERSION Preliminary protocol until Market improves update facitilities!
Connect host org.theb.ssh.action.CONNECT_HOST Connect to a host.
Create shortcut android.intent.action.CREATE_SHORTCUT Creates a shortcut on the main screen.
Delete data android.intent.action.DELETE Delete the given data from its container.
Dial a number android.intent.action.DIAL Dial a number as specified by the data.
Edit data android.intent.action.EDIT Provide explicit editable access to the given data.
Edit title com.android.notepad.action.EDIT_TITLE Edit the title of a content.
Encode com.google.zxing.client.android.ENCODE Encode to barcode and display on screen.
Environmental measurement com.borntotinker.intent.action.MEASURE An open ended intent to collect information from the android
phone's surroundings.
Flickr photo com.google.android.photostream.FLICKR_PHOTO Show a flickr photo.
Flickr stream com.google.android.photostream.FLICKR_STREAM Display a Flickr stream.
Get content android.intent.action.GET_CONTENT Allow the user to select a particular kind of data and return it.
Insert data android.intent.action.INSERT Insert an empty item into the given container.
List all applications android.intent.action.ALL_APPS List all available applications.
Main android.intent.action.MAIN Start as a main entry point, does not expect to receive data.
Pick data android.intent.action.PICK Pick an item from the data, returning what was selected.
Pick directory org.openintents.action.PICK_DIRECTORY Pick a directory (folder) through a file manager.
Pick file org.openintents.action.PICK_FILE Pick a file through a file manager.
Record sound android.provider.MediaStore.RECORD_SOUND Start SoundRecorder application to record sound.
Resolve unresolved intents org.openintents.intents.UNRESOLVED_INTENT Delegates the user to a selection of possible applications that
can resolve the given intent.
Ringtone picker android.intent.action.RINGTONE_PICKER Show a ringtone picker.
Scan com.google.zxing.client.android.SCAN Scan a barcode.
Search android.intent.action.SEARCH Perform a search.
Search book contents com.google.zxing.client.android.SEARCH_BOOK_CONTENTSUse Google Book Search to search the contents of the book
provided.
Send a message to the given uri android.intent.action.SENDTO Send a message to someone specified by the data.
Send data to someone android.intent.action.SEND Deliver some data to someone else.
Send Twitter Message com.twidroid.SendTweet Send a Twitter/Identi.ca Message thru Twidroid.
Set wallpaper android.intent.action.SET_WALLPAPER Show settings for choosing wallpaper
Share (through QR code) com.google.zxing.client.android.SHARE Display an item as QR code to scan with a phone.
Show about dialog org.openintents.action.SHOW_ABOUT_DIALOG Show an about dialog to display information about your
application.
Show radar com.google.android.radar.SHOW_RADAR Display a radar like view centered around the current position
and mark the given location
Tag data org.openintents.action.TAG Add a tag to the given data.
View data android.intent.action.VIEW Display the data to the user.
Web search android.intent.action.WEB_SEARCH Perform a web search.
54. PhoneGap “webOS”
• PhoneGap is a development
tool that allows web
developers to take advantage
of the core features in the
iPhone, Android, and
Blackberry SDK using
JavaScript.
55. Application
Development
Nathan Freitas
nathan@olivercoady.com
blog: openideals.com
consulting: olivercoady.com