Professional Documents
Culture Documents
Credits
Google Android team Patrick Brady (Google) IO http://
sites.google.com/site/io/anatomy-physiology-of-an-android
What is Android?
Internal Architecture
Kernel Enhancements
Alarm Ashmem Binder Power Management Low memory killer Kernel debugger Logger
High performance through shared memory Per-process thread pool for processing
requests
Binder in Action
More aggressive power manager Components make requests to keep power Supports different types of wake locks android.os.PowerManager
Libraries
Bionic Libc - custom libc implementation Function Libraries Native Servers Hardware Abstraction Libraries
License BSD - Keeps GPL out of user space Size: loads in each process so it needs to be
small
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
Supports standard audio, video and stills Support for hardware/software codecs
Libraries: SQLite
Light-weight transactional data store Back end for most platform data storage
Libraries: Flingers
Flingers are native servers that regulate all
the heavy lifting for System I/O
Separates Android platform logic from Plugabble : e.g. you can plug in OSS below
provides application portability runs optimized le format (.dex) Java .class/.jar les converted into .dex at
build time
http://developer.android.com/reference/packages.html
Hardware Services
Telephony Location Bluetooth WiFi USB Sensor(s)
Runtime Walkthrough
USB Daemon (usbd) Android debug bridge Debugger Daemon Radio interface layer daemon
Layer Interaction
App -> Runtime Service -> Lib App -> Runtime Service -> Native Service -> Lib App -> Runtime Service -> Native Daemon -> Lib
Project Status
Public vs private branches Repo, git and Gerrit Cupcake - development branch
http://source.android.com/roadmap/cupcake
http://source.android.com/download
Install git and GPG for your platform JDK 5.0, update 12 or higher. The following packages: ex, 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 nd memory leaks, stack corruption, array bounds overows, etc. libreadline
Install repo script Create a working dir repo init, repo sync Build the code - "make"
Android Hardware
HTC Dream
G1 vs ADP1
Netbooks
Ports
Nokia Internet Tablets Sharp Zaurus HTC Models Kaiser,Vogue, Polaris, Titan, Raphael &
Diamond
OpenMoko FreeRunner
Application Development
Nathan Freitas
The Basics
with (or w/o)
Android 1.1 SDK r1 Eclipse IDE
http://developer.android.com
Hello, Android 1) 3)
2)
Whats in an App?
Libraries Default Activity
Intents
Android Manifest
Drawable
Layouts
Values
Assets
<application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".InaugReportMainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.openideals.android.geo.LocationFinderActivity" android:label="@string/view_location_finder"/> <activity android:name=".ReportFormActivity" android:label="@string/view_report_form"/> <activity android:name="com.openideals.android.ui.InternalWebView" android:label="@string/internal_web_view" /> <activity android:name="com.openideals.android.geo.GeoRSSMapView" android:label="@string/geo_map_view" /> <uses-library android:name="com.google.android.maps" />
</application> </manifest>
Activity: Do Something!
/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.reportform); ((Button)findViewById(R.id.btnReportFormSubmit)).setOnClickListener(this); ((Button)findViewById(R.id.btnReportFormCancel)).setOnClickListener(this); package com.openideals.inaugreport; import import import import import import import import import import import import import import import android.app.Activity; android.app.ProgressDialog; android.content.Intent; android.location.Location; android.os.Bundle; android.os.Handler; android.util.Log; android.view.View; android.view.View.OnClickListener; android.widget.ArrayAdapter; android.widget.Button; android.widget.CheckBox; android.widget.Spinner; android.widget.TextView; android.widget.Toast;
Toast.makeText(getBaseContext(), "There was a problem submitting your report. Wait a second, and then try again!", Toast.LENGTH_LONG).show();
DDMS Debugger
OpenIntents.org
Title Call Capture an image Check for Update Connect host Create shortcut Delete data Dial a number Edit data Edit title Encode Environmental measurement Flickr photo Flickr stream Get content Insert data List all applications Main Pick data Pick directory Pick le Record sound Resolve unresolved intents Ringtone picker Scan Search Search book contents Send a message to the given uri Send data to someone Send Twitter Message Set wallpaper Share (through QR code) Show about dialog Show radar Tag data View data Web search Action android.intent.action.CALL android.media.action.IMAGE_CAPTURE org.openintents.intents.CHECK_VERSION org.theb.ssh.action.CONNECT_HOST android.intent.action.CREATE_SHORTCUT android.intent.action.DELETE android.intent.action.DIAL android.intent.action.EDIT com.android.notepad.action.EDIT_TITLE com.google.zxing.client.android.ENCODE com.borntotinker.intent.action.MEASURE com.google.android.photostream.FLICKR_PHOTO com.google.android.photostream.FLICKR_STREAM android.intent.action.GET_CONTENT android.intent.action.INSERT android.intent.action.ALL_APPS android.intent.action.MAIN android.intent.action.PICK org.openintents.action.PICK_DIRECTORY org.openintents.action.PICK_FILE android.provider.MediaStore.RECORD_SOUND org.openintents.intents.UNRESOLVED_INTENT Description Perform a call to someone specied by the data. An application implementing this intent protocol allows the user to capture an image. Preliminary protocol until Market improves update facitilities! Connect to a host. Creates a shortcut on the main screen. Delete the given data from its container. Dial a number as specied by the data. Provide explicit editable access to the given data. Edit the title of a content. Encode to barcode and display on screen. An open ended intent to collect information from the android phone's surroundings. Show a ickr photo. Display a Flickr stream. Allow the user to select a particular kind of data and return it. Insert an empty item into the given container. List all available applications. Start as a main entry point, does not expect to receive data. Pick an item from the data, returning what was selected. Pick a directory (folder) through a le manager. Pick a le through a le manager. Start SoundRecorder application to record sound.
Delegates the user to a selection of possible applications that can resolve the given intent. android.intent.action.RINGTONE_PICKER Show a ringtone picker. com.google.zxing.client.android.SCAN Scan a barcode. android.intent.action.SEARCH Perform a search. com.google.zxing.client.android.SEARCH_BOOK_CONTENTS Use Google Book Search to search the contents of the book provided. android.intent.action.SENDTO Send a message to someone specied by the data. android.intent.action.SEND Deliver some data to someone else. com.twidroid.SendTweet Send a Twitter/Identi.ca Message thru Twidroid. android.intent.action.SET_WALLPAPER Show settings for choosing wallpaper com.google.zxing.client.android.SHARE Display an item as QR code to scan with a phone. org.openintents.action.SHOW_ABOUT_DIALOG com.google.android.radar.SHOW_RADAR org.openintents.action.TAG android.intent.action.VIEW android.intent.action.WEB_SEARCH Show an about dialog to display information about your application. Display a radar like view centered around the current position and mark the given location Add a tag to the given data. Display the data to the user. Perform a web search.
GeoMapping Results
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.
Application Development
Phone Hacking
Getting root
By getting root you can update the bootloader and install custom rmware
add useful kernel modules (ext2, cifs, ++) unionfs Phone backup utility Change splash screen Custom compiled rmware added a modied /system/ etc/security/cacerts.bks le, which contains additional certicates for cacert.org (courtesy of Disconnect)
Resources
FAQ http://tinyurl.com/ androidfaq IRC
Text
General Android: #android@irc.freenode.net Android application development: #androiddev@irc.freenode.net Android hacking: #android@irc.saurik.net
Mailing lists
My email: Brian.gupta@brandorr.com