Android Development-1

advertisement
App Development for Android
Prabhaker Mateti
CEG 436 Specifics
• Because CEG 436 is a 10-week term course
skipped for now refreshers on
– Operating Systems
– TCP/IP Networking
– Cellular Telephony
• “Definitions”
– Mobile Devices/Smart Phone
– What is Android?
CEG436
2
Development Tools
• (Android) Java
– Java syntax is the same. But, not all libs are included.
– Unused: Swing, AWT, SWT, lcdui
• Eclipse
– www.eclipse.org/
• ADT Plugin for Eclipse
– developer.android.com/sdk/eclipse-adt.html
• Android SDK
– developer.android.com/sdk/tools-notes.html
• Android Device Emulator
• Development Platforms: Linux, Mac OSX, or Windows
CEG436
3
The Emulator
• QEMU-based ARM
emulator
• Displays the same
image as the device
• Limitations:
– No Camera support
CEG436
4
Debugging
• adb acts as a middleman between a device and your development
system. It provides various device management capabilities,
including moving and syncing files to the emulator, running a UNIX
shell on the device or emulator, and providing a general means to
communicate with connected emulators and devices.
• Dalvik Debug Monitor Server DDMS is a graphical program that
communicates with your devices through adb. DDMS can capture
screenshots, gather thread and stack information, spoof incoming
calls and SMS messages, and has many other features.
• Device or Android Virtual Device An adb device daemon runs on the
device or emulator and provides a means for the adb host daemon
to communicate with the device or emulator.
• JDWP debugger The Dalvik VM supports the JDWP protocol to allow
debuggers to attach to a VM. Java IDEs include a JDWP debugger,
or you can use a command line debugger such as jdb.
CEG436
5
Android Application Package
• res/layout: declaration
layout files
• res/drawable: intended for
drawing
• res/anim: bitmaps,
animations for transitions
• res/values: externalized
values
– strings, colors, styles, etc
• An application consists of:
Java
Code
Data Files
Resources
Files
•
res/xml: general XML files
used at runtime
• res/raw: binary files (e.g.,
sound)
CEG436
6
Android Application Package
• Using Java/Eclipse/ADT develop several source
code files.
• An Android application is bundled by the
“aapt” tool into an Android package (.apk)
– An .apk file is a zip file. Invoke unzip if you wish.
• “Installing” an Application is a built-in op of
Android OS.
– May need to enable the trustworthiness of
developer
CEG436
7
A Launcher: zeam-2.9.0.apk
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
( … a highly incomplete list … )
res/anim/apps_fade_in.xml
res/color/bright_text_dark_focused.xml
res/drawable/box_launcher_top.xml
res/drawable/timepicker_up_selected.9.png
res/layout/application_list.xml
res/xml/preferences.xml
AndroidManifest.xml
resources.arsc
res/drawable-hdpi/action_notifications.png
res/layout-land/application.xml
classes.dex
META-INF/MANIFEST.MF
META-INF/CERT.SF
META-INF/CERT.RSA
CEG436
8
Android Architecture
Android Architecture
CEG436
10
Linux Kernel
• Works as a Hardware Abstraction Layer (HAL)
• Device drivers
– Keypad, Display, Power Mgmt, FlashMem, Binder,
WiFi, Audio, Camera
• Memory management
• Process management
• Networking
CEG436
11
Linux Kernel Enhancements
• Alarm
• Ashmem (Anonymous SHared MEMory)
– ashmem uses virtual memory, whereas pmem (process memory
allocator) uses physically contiguous memory
• Binder
– an Android-specific inter-process communication mechanism,
and remote method invocation system.
• Power Management
• Low Memory Killer
– echo "1536,2048,4096,15120,15360,23040" >
/sys/module/lowmemorykiller/parameters/minfree
• Kernel Debugger
• Logger (system logging facility)
CEG436
12
Android Runtime
• Dalvik VM
– a newly developed Java Virtual Machine
– dx tool translates .class files to .dex files
– Compact compared to .class files
– Optimized for memory and battery power
• Core Libraries
– Java Std Edition
– Collections, I/O etc…
CEG436
13
Libraries
• Surface Manager: A compositing window
manager similar to Compiz. Instead of drawing
directly to the screen buffer, drawing commands
go into off-screen bitmaps that are then
combined with other bitmaps to form the
display the user sees. Can create see-through
windows, fancy transitions, …
• 2D and 3D graphics: Use 3D hardware or a
software renderer. OpenGL.
• Media codecs: AAC, AVC (H.264), H.263, MP3,
MPEG-4, …
CEG436
14
Libraries
• SQLite database engine
– Provides persistent storage.
– Also used in Firefox and the iPhone.
• Browser engine:
– WebKit library for rendering web pages
– the same engine is used in KDE, the Google
Chrome browser, Apple’s Safari browser, the
iPhone, and Symbian 60.
CEG436
15
Android NDK: Native C/C++ libraries
• C/C++ libraries
• not the full glibc as in Linux distros
• Supported CPUs: ARM, x86
–
–
–
–
–
–
–
–
–
–
•
libc (C library) headers
libm (math library) headers
JNI interface headers
libz (Zlib compression) headers
liblog (Android logging) header
OpenGL ES headers
libjnigraphics (Pixel buffer access) header
A Minimal set of headers for C++ support
OpenSL ES native audio libraries
Android native application APIS
Cross-toolchains (compilers, linkers, ...)
CEG436
16
OpenGL ES
• OpenGL ES is a subset of OpenGL graphics standard.
– low-level interface for graphics acceleration.
– floating-point and fixed-point systems.
• OpenGL ES 1.X is for fixed function hardware and offers
acceleration, image quality and performance.
• OpenGL ES 2.X enables full programmable 3D graphics.
• OpenGL SC is tuned for the safety critical market.
• http://www.khronos.org/opengles/
CEG436
17
Application Framework
• Views lists, grids, text boxes, buttons, and even an
embeddable web browser
• Content Providers to access data from other applications
(such as Contacts), or to share their own data
• A Resource Manager, providing access to non-code
resources such as localized strings, graphics, and layout files
• A Notification Manager that enables all applications to
display custom alerts in the status bar
• An Activity Manager that manages the lifecycle of
applications and provides a common navigation backstack
[sic]
CEG436
18
Standard Applications
• Android provides a set of core applications:
–
–
–
–
–
–
–
Email Client
SMS Program
Calendar
Maps
Browser
Contacts
Etc
• All applications are written using the Java
language.
CEG436
19
Android Application Internals
Application Fundamentals
• Each application is a different “user”.
• Each application gets a unique Linux user ID.
The system sets permissions for all the files in
an application so that only the user ID
assigned to that application can access them.
• Each process has its own Dalvik VM.
• Every application runs in its own Linux
process. A process can have multiple threads.
CEG436
21
Application Components
• Activity
– represents a single screen with a user interface.
• Service
– runs in the background; Long-running; for remote processes
– no user interface.
• Content provider
– manages a shared set of application data.
• Broadcast receiver
– responds to broadcast announcements.
• An application can have multiple instances of the above four types.
• Each component is a different point through which the system can
enter an application.
• Every component has a managed lifecycle.
CEG436
22
.apk Internals
1. AndroidManifest.xml — deployment descriptor for
applications.
2. IntentReceiver as advertised by the IntentFilter tag.
3. *.java files implement Android activity
4. Main.xml — visual elements, or resources, for use by
activities.
5. R.java —automatically generated by Android Developer
Tools and "connects" the visual resources to the Java
source code.
6. Components share a Linux process: by default, one
process per .apk file.
7. .apk files are isolated and communicate with each other
via Intents or AIDL.
CEG436
23
Application Resources
• anything relating to the visual presentation of
the application
– images, animations, menus, styles, colors, audio
files, …
• resource ID
• alternate resources for different device
configurations
CEG436
24
AndroidManifest.xml
• Declares all application components:
–
–
–
–
<activity>
<service>
<provider> for content providers
<receiver> for broadcast receivers
• The manifest can also:
– Identify any user permissions the application requires,
such as Internet access or read-access to the user's
contacts.
– Declare hardware and software features used or required
by the application
– API libraries the application needs
CEG436
25
Life cycle of an Android activity
CEG436
26
Activity
• Typically, one of the activities is marked as the
first one that should be presented to the user
when the application is launched.
• Created “Activity” must be defined into the
application’s manifest.
• An activity is usually a single screen:
– Implemented as a single class extending Activity.
– Displays user interface controls (views).
– Reacts on user input/events.
CEG436
27
Activity
• An application
typically consists
of several screens:
– Each screen is
implemented by
one activity.
– Moving to the
next screen
means starting a
new activity.
– An activity may
return a result to
the previous
activity.
CEG436
28
Service
• A service does not have a visual user interface,
but rather runs in the background for an
indefinite period time.
– Examples: music player, network download, etc
• Each service extends the Service base class.
• It is possible to bind to a running service and start
the service if it's not already running.
• While connected, it is possible communicate with
the service through an interface defined in AIDL
(Android Interface Definition Language).
CEG436
29
Services
• Similar to daemons in Linux/Unix or Windows services.
• Interprocess communication (IPC).
• A service is "started" when a component does a
startService(). Stops with stopSelf() or stopService()
• A service is "bound" when a component does
a bindService(). Multiple components can bind to the
service at once. When all of them unbind, the service is
destroyed.
• Can work both ways. (i) onStartCommand() allows
components to start it and (ii) onBind() allows binding.
• (iii) onCreate() (iv) onDestroy()
CEG436
30
Broadcast Receivers
• A broadcast receiver is a component that
receives and reacts to broadcast
announcements (Intents).
• All receivers extend the BroadcastReceiver
base class.
• Many broadcasts originate in system code.
– the time zone has changed
– the battery is low
• Applications can also initiate broadcasts.
CEG436
31
Content Providers
• Enables sharing of data across applications
– E.g. address book, photo gallery
– the only way to share data between applications.
• Provides uniform APIs for query, delete, update
and insert.
• Applications do not call these methods directly.
– They use a ContentResolver object and call its
methods instead.
– A ContentResolver can talk to any content provider.
• Content is represented by URI and MIME type.
CEG436
32
Content Providers
Application
Activity
Activity
Application
Application
Activity
Content Resolver
Service
Content Resolver
Content Provider
Content Resolver
Data
CEG436
SQLite
XML
Remote
Store
33
Intent
• Intents are system messages that notify applications of various events:
– Activity events ( launch app, press button)
– Hardware state changes (acceleration change, screen off, etc)
– Incoming data (Receiving call, SMS arrived)
• An intent object is an action to be performed on some data Uri. It
provides runtime binding between the code in different applications.
• Examples:
– ACTION_DIAL content://contacts/people/13
• Display the phone dialer with the person #13 filled in.
– ACTION_VIEW content://contacts/people/
• Display a list of people, which the user can browse through.
–
–
–
startActivity(new Intent(Intent.VIEW_ACTION, Uri.parse( "http://www.fhnw.ch"));
startActivity(new Intent(Intent.VIEW_ACTION, Uri.parse("geo:47.480843,8.211293"));
startActivity(new Intent(Intent.EDIT_ACTION, Uri.parse("content://contacts/people/1"));
• secondary attributes: category, type, component, extras
CEG436
34
public class Intent
• startActivity to launch an activity.
• broadcastIntent to send it to a BroadcastReceiver
• Communicate with a Service
– startService(Intent) or
– bindService(Intent, ServiceConnection, int)
• Explicit Intents specify a component to be run.
– setComponent(ComponentName) or
– setClass(Context, Class))
• Implicit Intents match an intent against all of the
<intent-filter>s in the installed applications.
– Will return to this topic later.
CEG436
35
Intent Filters
CEG436
36
IntentReceivers
• Components that respond to broadcast
‘Intents’
• Way to respond to external notification or
alarms
• Apps can invent and broadcast their own
Intent
CEG436
37
Example App: Hello World!
developer.android.com/resources/tutorials
/hello-world.html
Goal
• Create a very simple
application
• Run it on the emulator
• Examine its structure
CEG436
39
Package Content
All source code here
Java code for our activity
Generated Java code
Helps link resources to
Java code
Layout of the activity
All non-code
resources
Images
Strings used in the
program
Android Manifest
CEG436
40
Android Manifest
1. <?xml version="1.0" encoding="utf-8"?>
2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3.
package="com.example.helloandroid"
4.
android:versionCode="1"
5.
android:versionName="1.0">
6.
<application android:icon="@drawable/icon" android:label="@string/app_name">
7.
<activity android:name=".HelloAndroid"
8.
android:label="@string/app_name">
9.
<intent-filter>
10.
<action android:name="android.intent.action.MAIN" />
11.
<category android:name="android.intent.category.LAUNCHER" />
12.
</intent-filter>
13.
</activity>
14.
</application>
15. </manifest>
CEG436
41
HelloAndroid.java
Inherit
from the
Activity
Class
package com.example.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Hello, Android – by hand");
setContentView(tv);
}
}
Set the view “by
CEG436
42
hand” – from the
program
Run it!
CEG436
43
HelloAndroid.java
package com.example.helloandroid;
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);
}
}
Set the layout of the
CEG436
44
view as described in
the main.xml layout
/res/layout/main.xml
<?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>
Further redirection to
/res/values/strings.xml
CEG436
45
/res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloAndroid – by resources!</string>
<string name="app_name">Hello, Android</string>
</resources>
CEG436
46
/gen/R.java
package com.example.helloandroid;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class id {
public static final int textview=0x7f050000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}
CEG436
47
Run it!
CEG436
48
Introduce A Bug
package com.example.helloandroid;
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);
Object o = null;
o.toString();
setContentView(R.layout.main);
}
}
CEG436
49
Run it!
CEG436
50
Case Studies of Applications
ADW.Launcher
• ADW.Launcher is an open source Home
Replacement app. it is included as the main
Launcher in Cyanogen's custom ROMs.
• I will be (??) using the source code of this app
as a running example.
– Download the source from
http://code.google.com/p/adw-launcher-android/
CEG436
52
Project Suggestions
• Augmented Campus
Reality
– camera + maps + compass
= heads up info
• Games
– multi-player (bluetooth,
wifi, cell)
– location-based (scavenger
hunt)
• Custom overlays for maps
– weather, traffic, friends
CEG436
• Web scraping
–
–
–
–
news filters
sport scores
dook news eliminators
more on next slide …
• Distributed computing?
– 10,000 phones all donating
their idle time
– tiny terminal (phone) + fast
cpu/network (server)
• Shared whiteboard
53
Project Suggestions
– Web Scrapers [movies, weather, sports, <topic> news]
• Find multiple web sources
• Scrape them for the relevant information
• Present in a custom UI on the phone
– Asynchronous games [chess, poker, risk]
• Develop an API for all games to communicate through
– Establish connections by phone number
– Send and receive game data
– Ability to reopen connections
– Planner/To-do list with location data
• Decide route to next class, meeting, etc
• Find a order/route for non time-critical tasks
• Connect to campus directory to find teachers/classmates
CEG436
54
Source Code for Android Examples
• Sources for many Android applications that
can be enhanced:
• http://code.google.com
• http://developer.android.com/resources/brow
ser.html?tag=sample
CEG436
55
Download