SlideShare a Scribd company logo
Marko	
  Gargenta	
  
Android	
  Deep	
  Dive	
  
Sprint	
  Dev	
  Con	
  2010	
  
About	
  Marko	
  Gargenta	
  
Developed Android Bootcamp for Marakana.
Taught over 1,000 developers on Android.
Clients include Qualcomm, Sony-Ericsson, Motorola,
Texas Instruments, Cisco, Sharp, DoD.
Author of upcoming Learning Android by O’Reilly.
Spoke at OSCON, ACM, IEEE, SDC.
Organizes SFAndroid.org
Agenda	
  
•  The	
  Stack	
  
•  Hello	
  World!	
  
•  Main	
  Building	
  Blocks	
  
•  Android	
  User	
  Interface	
  
•  OperaFng	
  System	
  
Features	
  
•  Debugging	
  and	
  Tools	
  
•  Summary	
  
ANDROID	
  STACK	
  
The	
  Stack	
  
Linux	
  Kernel	
  
Android runs on Linux.
Linux provides:
Hardware abstraction layer
Memory management
Process management
Networking
Users never see Linux sub system
The adb shell command opens
Linux shell
Linux Kernel
Libraries
Application Framework
Applications
Home Contacts Phone Browser Other
Activity
Manager
Window
Manager
Content
Providers
View
System
Package
Manager
Telephony
Manager
Resource
Manager
Location
Manager
Notiication
Manager
Surface
Manager
OpenGL
SGL
Media
Framework
FreeType
SSL
SQLite
WebKit
libc
Android Runtime
Core Libs
Delvik
VM
Display
Driver
Keypad
Driver
Camera
Driver
WiFi
Driver
Flash
Driver
Audio
Driver
Binder
Driver
Power
Mgmt
NaFve	
  Libraries	
  
Pieces borrowed from other
open source projects:
Bionic, a super fast and small
license-friendly libc library optimized
for Android
WebKit library for fast HTML
rendering
OpenGL for graphics
Media codecs offer support for
major audio/video codecs
SQLite database
Much more…
Linux Kernel
Libraries
Application Framework
Applications
Home Contacts Phone Browser Other
Activity
Manager
Window
Manager
Content
Providers
View
System
Package
Manager
Telephony
Manager
Resource
Manager
Location
Manager
Notiication
Manager
Surface
Manager
OpenGL
SGL
Media
Framework
FreeType
SSL
SQLite
WebKit
libc
Android Runtime
Core Libs
Delvik
VM
Display
Driver
Keypad
Driver
Camera
Driver
WiFi
Driver
Flash
Driver
Audio
Driver
Binder
Driver
Power
Mgmt
Dalvik	
  
Dalvik VM is Android implementation of
Java VM
Dalvik is optimized for mobile devices:
• Battery consumption
• CPU capabilities
Key Dalvik differences:
• Register-based versus stack-based VM
• Dalvik runs .dex files
• More efficient and compact implementation
• Different set of Java libraries than JDK
ApplicaFon	
  Framework	
  
The rich set of system services
wrapped in an intuitive Java API.
This ecosystem that developers
can easily tap into is what makes
writing apps for Android easy.
Location, web, telephony, WiFi,
Bluetooth, notifications, media,
camera, just to name a few.
Linux Kernel
Libraries
Application Framework
Applications
Home Contacts Phone Browser Other
Activity
Manager
Window
Manager
Content
Providers
View
System
Package
Manager
Telephony
Manager
Resource
Manager
Location
Manager
Notiication
Manager
Surface
Manager
OpenGL
SGL
Media
Framework
FreeType
SSL
SQLite
WebKit
libc
Android Runtime
Core Libs
Delvik
VM
Display
Driver
Keypad
Driver
Camera
Driver
WiFi
Driver
Flash
Driver
Audio
Driver
Binder
Driver
Power
Mgmt
ApplicaFons	
  
Dalvik Executable + Resources = APK
Must be signed (but debug key is okay
for development)
Many markets with different policies
Android	
  and	
  Java	
  
Android Java
=
Java SE
–
AWT/Swing
+
Android API
Android	
  SDK	
  -­‐	
  What’s	
  In	
  The	
  Box	
  
SDK
Tools
Docs
Platforms
Data
Skins
Images
Samples
Add-ons
Google
HELLO	
  WORLD!	
  
Create	
  New	
  Project	
  
Use the Eclipse tool to create a new
Android project.
Here are some key constructs:
Project	
   Eclipse	
  construct	
  
Target	
   minimum	
  to	
  run	
  
App	
  name	
   whatever	
  
Package	
   Java	
  package	
  
AcFvity	
   Java	
  class	
  
Anatomy	
  
of	
  An	
  App	
  
Java Code
+
XML and Other
Resources
+
Manifest File
=
Android App
The	
  Manifest	
  File	
  
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.marakana"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".HelloAndroid"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="5" />
</manifest>
The	
  Layout	
  Resource	
  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
The	
  Java	
  File	
  
package com.marakana;
import android.app.Activity;
import android.os.Bundle;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Running	
  on	
  Emulator	
  
Emulator, not a simulator
MAIN	
  BUILDING	
  BLOCKS	
  
AcFviFes	
  
Android Application
Main Activity
Another
Activity
Another
Activity
An Activity
represents a screen
or a window. Sort of.
AcFvity	
  Lifecycle	
  
Starting
Running
PausedStopped
Destroyed
(1) onSaveInstanceState()
(2) onPause()
(3) onResume()
(2) onStart()
(1) onRestart() onResume()
(1) onSaveInstanceState()
(2) onStop()
<process killed>
onDestroy()
or
<process killed>
(1) onCreate()
(2) onStart()
(3) onRestoreInstanceState()
(4) onResume()
Activities have a well-
defined lifecycle. The
Android OS manages
your activity by
changing its state.
You fill in the blanks.
Intents	
  
Android Application
Another
Activity
Android Application
Main Activity
Intent
Intent
Main Activity
Intent
Another
Activity
Intents represent
events or actions.
They are to
Android apps what
hyperlinks are to
websites. Sort of.
Intents can be
implicit or explicit.
Services	
  
Services are code that runs in the background. They
can be started and stopped. Services doesn’t have
UI.
Service	
  Lifecycle	
  
Service also has a lifecycle, but it’s
much simpler than activity’s.
An activity typically starts and stops a
service to do some work for it in the
background, such as play music,
check for new tweets, etc.
Services can be bound or unbound.
Content	
  Providers	
  
Content
Provider
Content URI
insert()
update()
delete()
query()
Content Providers share
content with applications
across application
boundaries.
Examples of built-in
Content Providers are:
Contacts, MediaStore,
Settings and more.
Broadcast	
  Receivers	
  
An Intent-based publish-subscribe mechanism. Great for listening
system events such as SMS messages.
Twitter.com
MyTwitter
Activity
Updater
Service
Timeline
Receiver
Timeline
DB
Prefs
XML
Updates
Status via
web service
Preference
Activity
Pull timeline
updates via
web service
Insert
updates
in DB
Notify of
new status
Timeline
Activity
Pull timeline
from DB
Update list
Timeline
Adapter
Update ListView
Read/write
preferences
Boot
Receiver
Start at
boot
Read
Prefs
Read
Prefs
Yamba	
  –	
  A	
  Real	
  World	
  App	
  
ANDROID	
  USER	
  INTERFACE	
  
Two	
  UI	
  Approaches	
  
Procedural	
   DeclaraCve	
  
You	
  write	
  Java	
  code	
  
Similar	
  to	
  Swing	
  or	
  AWT	
  
You	
  write	
  XML	
  code	
  
Similar	
  to	
  HTML	
  of	
  a	
  web	
  page	
  
You can mix and match both styles. Best practice:
• Start with XML and declare most of UI
• Switch to Java and implement the UI logic
XML-­‐Based	
  User	
  Interface	
  
Use WYSIWYG tools to build powerful XML-based UI.
Easily customize it from Java. Separate concerns.
Common	
  View	
  ProperFes	
  
Layout	
  Width	
   FILL_PARENT,	
  WRAP_CONTENT or	
  a	
  specific	
  size	
  in	
  units.	
  
Layout	
  Height	
   FILL_PARENT,	
  WRAP_CONTENT or	
  a	
  specific	
  size	
  in	
  units.	
  
Layout	
  Weight	
   How	
  greedy	
  or	
  generous	
  a	
  widget	
  is.	
  Value	
  is	
  0	
  to	
  1.	
  
Layout	
  Gravity	
   How	
  to	
  align	
  widget	
  within	
  parent	
  
Gravity	
   How	
  to	
  align	
  content	
  of	
  widget	
  within	
  itself	
  
Id	
   Unique	
  id	
  of	
  this	
  widget,	
  usually	
  @+id/someUniqueId!
Text	
   Text	
  for	
  the	
  content	
  of	
  the	
  component,	
  usually	
  @string/myText!
Dips	
  and	
  Sps	
  
px	
  (pixel)	
   Dots	
  on	
  the	
  screen	
  
in	
  (inches)	
   Size	
  as	
  measured	
  by	
  a	
  ruler	
  
mm	
  (millimeters)	
   Size	
  as	
  measured	
  by	
  a	
  ruler	
  
pt	
  (points)	
   1/72	
  of	
  an	
  inch	
  
dp	
  (density-­‐independent	
  pixel)	
   Abstract	
  unit.	
  On	
  screen	
  with	
  160dpi,	
  1dp=1px	
  
dip	
   synonym	
  for	
  dp	
  and	
  oeen	
  used	
  by	
  Google	
  
sp	
   Similar	
  to	
  dp	
  but	
  also	
  scaled	
  by	
  users	
  font	
  size	
  
preference	
  
Views	
  and	
  Layouts	
  
Layouts contain widgets and other
layouts forming a “composite” pattern.
Linear	
  Layout	
  
One of the most commonly
used layouts. It lays its
children next to each other,
either horizontally or vertically.
RelaFve	
  Layout	
  
Children of relative layout are
placed in relationship to each
other. This layout is efficient.
Table	
  Layout	
  
Table layout puts its children
into table rows and columns.
It is similar to an HTML table.
Frame	
  Layout	
  
Frame layout places its
children on top of each other,
like a deck of cards. It is
useful for widgets such as
tabs or as a placeholder for
views added
programmatically.
Common	
  UI	
  Components	
  
Android UI includes many
common modern UI
widgets, such as Buttons,
Tabs, Progress Bars, Date
and Time Pickers, etc.
SelecFon	
  Components	
  
Some UI widgets may
be linked to zillion
pieces of data.
Examples are ListView
and Spinners
(pull-downs).
Adapters	
  
To make sure they run smoothly, Android uses
Adapters to connect them to their data sources. A
typical data source is an Array or a Database.
Data
Source
Adapter
Complex	
  Components	
  
Certain high-level components are simply
available just like Views. Adding a Map or a
Video to your application is almost like adding a
Button or a piece of text.
Menus	
  and	
  Dialogs	
  
Graphics	
  &	
  AnimaFon	
  
Android has rich support for 2D graphics.
You can draw & animate from XML.
You can use OpenGL for 3D graphics.
MulFmedia	
  
AudioPlayer lets you simply specify
the audio resource and play it.
VideoView is a View that you can
drop anywhere in your activity, point
to a video file and play it.
XML:
<VideoView
android:id="@+id/video"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center” />
Java:
player = (VideoView) findViewById(R.id.video);
player.setVideoPath("/sdcard/samplevideo.3gp");
player.start();
OPERATING	
  SYSTEM	
  FEATURES	
  	
  
Security	
  
Android Application
Prefs
DB
File
System
Linux Process
Each Android application
runs inside its own Linux
process.
Additionally, each application
has its own sandbox file
system with its own set of
preferences and its own
database.
Other applications cannot
access any of its data,
unless it is explicitly shared.
File	
  System	
  
The file system has three main mount points. One
for system, one for the apps, and one for whatever.
Each app has its own sandbox easily accessible to
it. No one else can access its data. The sandbox is
in /data/data/com.marakana/
SDCard is expected to always be there. It’s a good
place for large files, such as movies and music.
Everyone can access it.
Cloud	
  to	
  Device	
  Push	
  
Big deal for many pull-based apps. Will make devices use less battery.
Preferences	
  
Your app can support complex
preferences quite easily.
You define your preferences in an
XML file and the corresponding UI and
data storage is done for free.
SQLite	
  Database	
  
Android ships with SQLite3
SQLite is a
• Zero configuration
• Serverless
• Single database file
• Cross-Platform
• Compact
• Public Domain
Database engine.
May you do good and not evil
May you find forgiveness for yourself and forgive others
May you share freely, never taking more than you give.
DEBUGGING	
  	
  
ANDROID	
  APPS	
  
LogCat	
  
The universal, most
versatile way to track
what is going on in
your app.
Can be viewed via
command line or
Eclipse.
Logs can be
generated both from
SDK Java code, or
low-level C code via
Bionic libc extension.
Debugger	
  
Your standard debugger is included in SDK, with all the usual bells & whistles.
TraceView	
  
TraceView helps you profile you application and find bottlenecks. It shows
execution of various calls through the entire stack. You can zoom into specific
calls.
Hierarchy	
  Viewer	
  
Hierarchy Viewer helps
you analyze your User
Interface.
Base UI tends to be the
most “expensive” part of
your application, this tool
is very useful.
Summary	
  
Android is open and complete system for
mobile development. It is based on Java
and augmented with XML.
Android is being adopted very quickly
both by users, carriers, and
manufacturers.
It takes about 3-5 days of intensive
training to learn Android application
development for someone who has basic
Java (or similar) experience.
Licensed under Creative Commons
License (cc-by-nc-nd) – non-commercial.
Please Share!
Marko Gargenta, Marakana.com
marko@marakana.com
+1-415-647-7000

More Related Content

PDF
Android for Java Developers
PDF
Open Android
PDF
Android Internals
PDF
Android For Managers Slides
PDF
Android for Java Developers at OSCON 2010
PPT
Android For Java Developers
PDF
Marakana Android Internals
PDF
Android Internals
Android for Java Developers
Open Android
Android Internals
Android For Managers Slides
Android for Java Developers at OSCON 2010
Android For Java Developers
Marakana Android Internals
Android Internals

What's hot (20)

PDF
Android: A 9,000-foot Overview
PDF
Android Beyond The Phone
PDF
An Introduction To Android
PDF
Android Services Black Magic by Aleksandar Gargenta
PPT
2011 android
PDF
The anatomy and philosophy of Android - Google I/O 2009
PDF
Slides bootcamp21
DOCX
Android architecture
PDF
Droid con berlin_the_bb10_android_runtime
PDF
Droid con 2012 bangalore v2.0
PDF
Introduction To Android
PDF
Android : How Do I Code Thee?
PPTX
Connected World in android - Local data sharing and service discovery
PDF
Nokia Qt SDK in action - Qt developer days 2010
PDF
Android unveiled (I)
PDF
Qt - for stack overflow developer conference
PDF
Introduction to android
PDF
Meego의 현재와 미래(2)
PDF
Forum Nokia Dev. Camp - WRT training Paris_17&18 Nov.
PPT
Qt S60 Technical Presentation Fn Stripped
Android: A 9,000-foot Overview
Android Beyond The Phone
An Introduction To Android
Android Services Black Magic by Aleksandar Gargenta
2011 android
The anatomy and philosophy of Android - Google I/O 2009
Slides bootcamp21
Android architecture
Droid con berlin_the_bb10_android_runtime
Droid con 2012 bangalore v2.0
Introduction To Android
Android : How Do I Code Thee?
Connected World in android - Local data sharing and service discovery
Nokia Qt SDK in action - Qt developer days 2010
Android unveiled (I)
Qt - for stack overflow developer conference
Introduction to android
Meego의 현재와 미래(2)
Forum Nokia Dev. Camp - WRT training Paris_17&18 Nov.
Qt S60 Technical Presentation Fn Stripped
Ad

Viewers also liked (20)

ODP
Why Python by Marilyn Davis, Marakana
PPTX
Basic android-ppt
PPTX
Android ppt
ZIP
Android Application Development
PPTX
Android ppt
PPTX
My presentation on Android in my college
PPTX
Android seminar ppt
PPT
Android ppt
PPTX
The Shaping Of American Education
PPTX
Top 10 Power Point Answers
PPT
South Africa: A Nation in Denial?
PDF
Va Invit La Botezul Meu Ppt
PPT
Powerpoint Sample
 
PDF
Shannons Photo
PDF
BlueTooth Marketing Device BT-Pusher Standard User Guide
PDF
Works Examples
PPT
MS Presov
PPTX
Mikado + Kanban
PPT
Teatro 2009
Why Python by Marilyn Davis, Marakana
Basic android-ppt
Android ppt
Android Application Development
Android ppt
My presentation on Android in my college
Android seminar ppt
Android ppt
The Shaping Of American Education
Top 10 Power Point Answers
South Africa: A Nation in Denial?
Va Invit La Botezul Meu Ppt
Powerpoint Sample
 
Shannons Photo
BlueTooth Marketing Device BT-Pusher Standard User Guide
Works Examples
MS Presov
Mikado + Kanban
Teatro 2009
Ad

Similar to Android Deep Dive (20)

PPT
PPT Companion to Android
PPT
Android overview
ODP
Intro To Android App Development
PPT
Android In A Nutshell
PPT
Android Anatomy
PPTX
Android 1-intro n architecture
PPTX
Android- Introduction for Beginners
PDF
Android Workshop_1
PPT
Part 2 android application development 101
PPTX
Technology and Android.pptx
PPT
Android For Java Developers
PDF
Marakana Android User Interface
PPTX
Android Introduction on Java Forum Stuttgart 11
PPTX
Intro to android (gdays)
PPT
Mobile app development using PhoneGap - A comprehensive walkthrough - Touch T...
PPT
Android primer
PDF
Android Introduction by Kajal
PPTX
architecture of android.pptx
PPTX
Android Basic
PPTX
Android
PPT Companion to Android
Android overview
Intro To Android App Development
Android In A Nutshell
Android Anatomy
Android 1-intro n architecture
Android- Introduction for Beginners
Android Workshop_1
Part 2 android application development 101
Technology and Android.pptx
Android For Java Developers
Marakana Android User Interface
Android Introduction on Java Forum Stuttgart 11
Intro to android (gdays)
Mobile app development using PhoneGap - A comprehensive walkthrough - Touch T...
Android primer
Android Introduction by Kajal
architecture of android.pptx
Android Basic
Android

More from Marko Gargenta (6)

PDF
LTE: Building New Killer Apps
PDF
Java Champion Wanted
PDF
Marakana android-java developers
PDF
Scrum Overview
PDF
Jens Østergaard on Why Scrum Is So Hard
PDF
Jens Østergaard on Why Scrum Is So Hard
LTE: Building New Killer Apps
Java Champion Wanted
Marakana android-java developers
Scrum Overview
Jens Østergaard on Why Scrum Is So Hard
Jens Østergaard on Why Scrum Is So Hard

Recently uploaded (20)

PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Cloud computing and distributed systems.
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Approach and Philosophy of On baking technology
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPT
Teaching material agriculture food technology
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
KodekX | Application Modernization Development
PDF
Electronic commerce courselecture one. Pdf
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Encapsulation theory and applications.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
Digital-Transformation-Roadmap-for-Companies.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Cloud computing and distributed systems.
Review of recent advances in non-invasive hemoglobin estimation
Approach and Philosophy of On baking technology
Mobile App Security Testing_ A Comprehensive Guide.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Teaching material agriculture food technology
Agricultural_Statistics_at_a_Glance_2022_0.pdf
KodekX | Application Modernization Development
Electronic commerce courselecture one. Pdf
NewMind AI Monthly Chronicles - July 2025
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Encapsulation theory and applications.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Building Integrated photovoltaic BIPV_UPV.pdf
Encapsulation_ Review paper, used for researhc scholars
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Unlocking AI with Model Context Protocol (MCP)
The Rise and Fall of 3GPP – Time for a Sabbatical?

Android Deep Dive

  • 1. Marko  Gargenta   Android  Deep  Dive   Sprint  Dev  Con  2010  
  • 2. About  Marko  Gargenta   Developed Android Bootcamp for Marakana. Taught over 1,000 developers on Android. Clients include Qualcomm, Sony-Ericsson, Motorola, Texas Instruments, Cisco, Sharp, DoD. Author of upcoming Learning Android by O’Reilly. Spoke at OSCON, ACM, IEEE, SDC. Organizes SFAndroid.org
  • 3. Agenda   •  The  Stack   •  Hello  World!   •  Main  Building  Blocks   •  Android  User  Interface   •  OperaFng  System   Features   •  Debugging  and  Tools   •  Summary  
  • 6. Linux  Kernel   Android runs on Linux. Linux provides: Hardware abstraction layer Memory management Process management Networking Users never see Linux sub system The adb shell command opens Linux shell Linux Kernel Libraries Application Framework Applications Home Contacts Phone Browser Other Activity Manager Window Manager Content Providers View System Package Manager Telephony Manager Resource Manager Location Manager Notiication Manager Surface Manager OpenGL SGL Media Framework FreeType SSL SQLite WebKit libc Android Runtime Core Libs Delvik VM Display Driver Keypad Driver Camera Driver WiFi Driver Flash Driver Audio Driver Binder Driver Power Mgmt
  • 7. NaFve  Libraries   Pieces borrowed from other open source projects: Bionic, a super fast and small license-friendly libc library optimized for Android WebKit library for fast HTML rendering OpenGL for graphics Media codecs offer support for major audio/video codecs SQLite database Much more… Linux Kernel Libraries Application Framework Applications Home Contacts Phone Browser Other Activity Manager Window Manager Content Providers View System Package Manager Telephony Manager Resource Manager Location Manager Notiication Manager Surface Manager OpenGL SGL Media Framework FreeType SSL SQLite WebKit libc Android Runtime Core Libs Delvik VM Display Driver Keypad Driver Camera Driver WiFi Driver Flash Driver Audio Driver Binder Driver Power Mgmt
  • 8. Dalvik   Dalvik VM is Android implementation of Java VM Dalvik is optimized for mobile devices: • Battery consumption • CPU capabilities Key Dalvik differences: • Register-based versus stack-based VM • Dalvik runs .dex files • More efficient and compact implementation • Different set of Java libraries than JDK
  • 9. ApplicaFon  Framework   The rich set of system services wrapped in an intuitive Java API. This ecosystem that developers can easily tap into is what makes writing apps for Android easy. Location, web, telephony, WiFi, Bluetooth, notifications, media, camera, just to name a few. Linux Kernel Libraries Application Framework Applications Home Contacts Phone Browser Other Activity Manager Window Manager Content Providers View System Package Manager Telephony Manager Resource Manager Location Manager Notiication Manager Surface Manager OpenGL SGL Media Framework FreeType SSL SQLite WebKit libc Android Runtime Core Libs Delvik VM Display Driver Keypad Driver Camera Driver WiFi Driver Flash Driver Audio Driver Binder Driver Power Mgmt
  • 10. ApplicaFons   Dalvik Executable + Resources = APK Must be signed (but debug key is okay for development) Many markets with different policies
  • 11. Android  and  Java   Android Java = Java SE – AWT/Swing + Android API
  • 12. Android  SDK  -­‐  What’s  In  The  Box   SDK Tools Docs Platforms Data Skins Images Samples Add-ons Google
  • 14. Create  New  Project   Use the Eclipse tool to create a new Android project. Here are some key constructs: Project   Eclipse  construct   Target   minimum  to  run   App  name   whatever   Package   Java  package   AcFvity   Java  class  
  • 15. Anatomy   of  An  App   Java Code + XML and Other Resources + Manifest File = Android App
  • 16. The  Manifest  File   <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.marakana" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloAndroid" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="5" /> </manifest>
  • 17. The  Layout  Resource   <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
  • 18. The  Java  File   package com.marakana; import android.app.Activity; import android.os.Bundle; public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
  • 19. Running  on  Emulator   Emulator, not a simulator
  • 21. AcFviFes   Android Application Main Activity Another Activity Another Activity An Activity represents a screen or a window. Sort of.
  • 22. AcFvity  Lifecycle   Starting Running PausedStopped Destroyed (1) onSaveInstanceState() (2) onPause() (3) onResume() (2) onStart() (1) onRestart() onResume() (1) onSaveInstanceState() (2) onStop() <process killed> onDestroy() or <process killed> (1) onCreate() (2) onStart() (3) onRestoreInstanceState() (4) onResume() Activities have a well- defined lifecycle. The Android OS manages your activity by changing its state. You fill in the blanks.
  • 23. Intents   Android Application Another Activity Android Application Main Activity Intent Intent Main Activity Intent Another Activity Intents represent events or actions. They are to Android apps what hyperlinks are to websites. Sort of. Intents can be implicit or explicit.
  • 24. Services   Services are code that runs in the background. They can be started and stopped. Services doesn’t have UI.
  • 25. Service  Lifecycle   Service also has a lifecycle, but it’s much simpler than activity’s. An activity typically starts and stops a service to do some work for it in the background, such as play music, check for new tweets, etc. Services can be bound or unbound.
  • 26. Content  Providers   Content Provider Content URI insert() update() delete() query() Content Providers share content with applications across application boundaries. Examples of built-in Content Providers are: Contacts, MediaStore, Settings and more.
  • 27. Broadcast  Receivers   An Intent-based publish-subscribe mechanism. Great for listening system events such as SMS messages.
  • 28. Twitter.com MyTwitter Activity Updater Service Timeline Receiver Timeline DB Prefs XML Updates Status via web service Preference Activity Pull timeline updates via web service Insert updates in DB Notify of new status Timeline Activity Pull timeline from DB Update list Timeline Adapter Update ListView Read/write preferences Boot Receiver Start at boot Read Prefs Read Prefs Yamba  –  A  Real  World  App  
  • 30. Two  UI  Approaches   Procedural   DeclaraCve   You  write  Java  code   Similar  to  Swing  or  AWT   You  write  XML  code   Similar  to  HTML  of  a  web  page   You can mix and match both styles. Best practice: • Start with XML and declare most of UI • Switch to Java and implement the UI logic
  • 31. XML-­‐Based  User  Interface   Use WYSIWYG tools to build powerful XML-based UI. Easily customize it from Java. Separate concerns.
  • 32. Common  View  ProperFes   Layout  Width   FILL_PARENT,  WRAP_CONTENT or  a  specific  size  in  units.   Layout  Height   FILL_PARENT,  WRAP_CONTENT or  a  specific  size  in  units.   Layout  Weight   How  greedy  or  generous  a  widget  is.  Value  is  0  to  1.   Layout  Gravity   How  to  align  widget  within  parent   Gravity   How  to  align  content  of  widget  within  itself   Id   Unique  id  of  this  widget,  usually  @+id/someUniqueId! Text   Text  for  the  content  of  the  component,  usually  @string/myText!
  • 33. Dips  and  Sps   px  (pixel)   Dots  on  the  screen   in  (inches)   Size  as  measured  by  a  ruler   mm  (millimeters)   Size  as  measured  by  a  ruler   pt  (points)   1/72  of  an  inch   dp  (density-­‐independent  pixel)   Abstract  unit.  On  screen  with  160dpi,  1dp=1px   dip   synonym  for  dp  and  oeen  used  by  Google   sp   Similar  to  dp  but  also  scaled  by  users  font  size   preference  
  • 34. Views  and  Layouts   Layouts contain widgets and other layouts forming a “composite” pattern.
  • 35. Linear  Layout   One of the most commonly used layouts. It lays its children next to each other, either horizontally or vertically.
  • 36. RelaFve  Layout   Children of relative layout are placed in relationship to each other. This layout is efficient.
  • 37. Table  Layout   Table layout puts its children into table rows and columns. It is similar to an HTML table.
  • 38. Frame  Layout   Frame layout places its children on top of each other, like a deck of cards. It is useful for widgets such as tabs or as a placeholder for views added programmatically.
  • 39. Common  UI  Components   Android UI includes many common modern UI widgets, such as Buttons, Tabs, Progress Bars, Date and Time Pickers, etc.
  • 40. SelecFon  Components   Some UI widgets may be linked to zillion pieces of data. Examples are ListView and Spinners (pull-downs).
  • 41. Adapters   To make sure they run smoothly, Android uses Adapters to connect them to their data sources. A typical data source is an Array or a Database. Data Source Adapter
  • 42. Complex  Components   Certain high-level components are simply available just like Views. Adding a Map or a Video to your application is almost like adding a Button or a piece of text.
  • 44. Graphics  &  AnimaFon   Android has rich support for 2D graphics. You can draw & animate from XML. You can use OpenGL for 3D graphics.
  • 45. MulFmedia   AudioPlayer lets you simply specify the audio resource and play it. VideoView is a View that you can drop anywhere in your activity, point to a video file and play it. XML: <VideoView android:id="@+id/video" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center” /> Java: player = (VideoView) findViewById(R.id.video); player.setVideoPath("/sdcard/samplevideo.3gp"); player.start();
  • 47. Security   Android Application Prefs DB File System Linux Process Each Android application runs inside its own Linux process. Additionally, each application has its own sandbox file system with its own set of preferences and its own database. Other applications cannot access any of its data, unless it is explicitly shared.
  • 48. File  System   The file system has three main mount points. One for system, one for the apps, and one for whatever. Each app has its own sandbox easily accessible to it. No one else can access its data. The sandbox is in /data/data/com.marakana/ SDCard is expected to always be there. It’s a good place for large files, such as movies and music. Everyone can access it.
  • 49. Cloud  to  Device  Push   Big deal for many pull-based apps. Will make devices use less battery.
  • 50. Preferences   Your app can support complex preferences quite easily. You define your preferences in an XML file and the corresponding UI and data storage is done for free.
  • 51. SQLite  Database   Android ships with SQLite3 SQLite is a • Zero configuration • Serverless • Single database file • Cross-Platform • Compact • Public Domain Database engine. May you do good and not evil May you find forgiveness for yourself and forgive others May you share freely, never taking more than you give.
  • 53. LogCat   The universal, most versatile way to track what is going on in your app. Can be viewed via command line or Eclipse. Logs can be generated both from SDK Java code, or low-level C code via Bionic libc extension.
  • 54. Debugger   Your standard debugger is included in SDK, with all the usual bells & whistles.
  • 55. TraceView   TraceView helps you profile you application and find bottlenecks. It shows execution of various calls through the entire stack. You can zoom into specific calls.
  • 56. Hierarchy  Viewer   Hierarchy Viewer helps you analyze your User Interface. Base UI tends to be the most “expensive” part of your application, this tool is very useful.
  • 57. Summary   Android is open and complete system for mobile development. It is based on Java and augmented with XML. Android is being adopted very quickly both by users, carriers, and manufacturers. It takes about 3-5 days of intensive training to learn Android application development for someone who has basic Java (or similar) experience. Licensed under Creative Commons License (cc-by-nc-nd) – non-commercial. Please Share! Marko Gargenta, Marakana.com marko@marakana.com +1-415-647-7000