app development for android

40
App Development for Android Prabhaker Mateti

Upload: malha

Post on 14-Feb-2016

50 views

Category:

Documents


2 download

DESCRIPTION

App Development for Android. Prabhaker Mateti. Development Tools. (Android) Java Java 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/ Android SDK developer.android.com/ - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: App Development for Android

App Development for Android

Prabhaker Mateti

Page 2: App Development for Android

2Mateti/Android

Development Tools

• (Android) Java– Java 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/• Android SDK developer.android.com/• Android Device Emulator• Development Platforms: Linux, Mac OSX, or

Windows

Page 3: App Development for Android

3Mateti/Android

(Other) Languages and IDEs

• IntelliJ Idea• Android Studio• Corona for Android• Android Native Development Kit (NDK)• Scala

Page 4: App Development for Android

4Mateti/Android

Application Runtime

• 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/Art VM.• Every application runs in its own Linux

process. A process can have multiple threads.

Page 5: App Development for Android

5Mateti/Android

Application Framework

• Views lists, grids, text boxes, buttons, embeddable web browser

• Content Providers to access data from other applications, or to share their own data

• Resource Manager access non-code resources; e.g., strings, graphics, and layout files

• Notification Manager alerts in the status bar• Activity Manager lifecycle of applications and

navigation backstack

Page 6: App Development for Android

6Mateti/Android

Application Components• Activity: (GUI) functions that the application performs.• Service: no UI

– run in the background; Long-running; for remote processes– no user interface.

• Content Providers facilitate data transmission among different applications.

• Broadcast Receiver: respond to announcements.• Groups of views define the application’s layout.• Each component is a different entry point of the system.• An application can have multiple instances of the above.

Page 7: App Development for Android

Mateti/Android 7

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.

Page 8: App Development for Android

8Mateti/Android

Activity

• One of the activities is marked as the main one. Presented on launch.

• An activity is usually a single screen:– Implemented as a single class extending Activity.– Displays user interface controls (views).– Reacts on user input/events.

Page 9: App Development for Android

Mateti/Android 9

Life cycle of an Activity

Page 10: App Development for Android

10Mateti/Android

Services

• A service does not have a (visual) user interface. Runs in the background for an indefinite period time.– Examples: music player, network download, …

• Similar to daemons in Linux/Unix or Windows services.

• Each service extends the Service base class.• Communicate with the service through an interface

defined in AIDL (Android Interface Definition Language).

Page 12: App Development for Android

12Mateti/Android

Broadcast Receivers

• Broadcast announcements: Intents.• All receivers extend the BroadcastReceiver

base class.• Many broadcasts originate in the System.– Ex: the time zone has changed– Ex: the battery is low

• Applications can also initiate broadcasts.

Page 13: App Development for Android

13Mateti/Android

Content Providers

• Enables sharing of content across applications– E.g., address book, photo gallery– the only way to share data between applications.

• APIs for query, delete, update and insert.• Use ContentResolver methods to do the

above.• Content is represented by URI and MIME type.

Page 14: App Development for Android

14Mateti/Android

Content Providers

Activity

ApplicationActivity

Application

Activity

Content Provider

Service

Application

Data SQLite XML Remote Store

Content Resolver Content Resolver

Content Resolver

Page 15: App Development for Android

15Mateti/Android

Intent 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"));

• attributes: category, type, component, extras

Page 16: App Development for Android

16Mateti/Android

Intent

• Intents are system messages:– 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. Provides binding between applications.

Page 17: App Development for Android

17Mateti/Android

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.

Page 18: App Development for Android

18Mateti/Android

IntentReceivers

• Components that respond to Intents• Way to respond to external notification or

alarms• Apps can create and broadcast own Intents

Page 19: App Development for Android

Example App: Hello World!

developer.android.com/resources/tutorials/hello-world.html

Page 20: App Development for Android

Mateti/Android 20

The Emulator• QEMU-based ARM

emulator• Displays the same

image as the device• Limitations:

– Camera– GPS

Page 21: App Development for Android

21Mateti/Android

Goal

• Create a very simple application

• Run it on the emulator• Examine its structure

Page 22: App Development for Android

22Android-Develop-1

Building HelloAndroid

• Create a Project– http://developer.android.com/training/basics/first

app/creating-project.html• Generates several files– Next few slides

• Modify HelloAndroid.java as needed

Page 23: App Development for Android

23Mateti/Android

helloandroid Manifest1. <?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>

Page 24: App Development for Android

24Mateti/Android

HelloAndroid.javapackage 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 view as described in the main.xml layout

Page 25: App Development for Android

25Mateti/Android

HelloAndroid.java 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

hand” – from the program

Inherit from the Activity Class

Page 26: App Development for Android

26Mateti/Android

Run it!

Page 27: App Development for Android

Mateti/Android 27

Android Application Package: APK• res/layout: declaration layout

files• res/drawable: intended for

drawing• res/anim: bitmaps, animations

for transitions• res/values: externalized values

– strings, colors, styles, etc• res/xml: general XML files

used at runtime• res/raw: binary files (e.g.,

sound)

• An application consists of:

Java Code

Data Files

Resources Files

Page 28: App Development for Android

28Mateti/Android

APK Content

Java code for our activityAll source code here

Generated Java codeHelps link resources to Java code

Layout of the activity

Strings used in the program

All non-code resources

Android Manifest

Images

Page 29: App Development for Android

29Mateti/Android

Android Application Package: APK

• Using Java/Eclipse/ADT develop source 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.

Page 30: App Development for Android

30Mateti/Android

.apk Internals1. AndroidManifest.xml — deployment descriptor for applications.2. IntentReceiver as advertised by the IntentFilter tag.3. *.java files implement Android activity4. 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.

Page 31: App Development for Android

31Mateti/Android

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

Page 32: App Development for Android

32Mateti/Android

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

Page 33: App Development for Android

33Mateti/Android

/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

Page 34: App Development for Android

34Mateti/Android

/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>

Page 35: App Development for Android

Mateti/Android 35

/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; }}

• R.java is auto generated on build.

• Based on the resource files (including layouts and preferences)

• Do not edit.

Page 36: App Development for Android

36Mateti/Android

Run it!

Page 37: App Development for Android

37Mateti/Android

Debugging• adb Android Debug Bridge

– moving and syncing files to the emulator– running a Linux shell on the device or emulator

• Dalvik Debug Monitor Server – DDMS is GUI + adb.– capture screenshots– gather thread and stack information– spoof incoming calls and SMS messages

• Device or Android Virtual Device• JDWP Java Debug Wire Protocol

– Java IDEs include a JDWP debugger– command line debuggers such as jdb.

Page 38: App Development for Android

38Mateti/Android

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); }}

Page 39: App Development for Android

39Mateti/Android

Run it!

Page 40: App Development for Android

40Mateti/Android

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