app development for android prabhaker mateti. development tools (android) java – java is the same....

40
App Development for Android Prabhaker Mateti

Upload: bonnie-harrell

Post on 23-Dec-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

App Development for Android

Prabhaker Mateti

Page 2: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

Mateti/Android 9

Life cycle of an Activity

Page 10: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

14Mateti/Android

Content Providers

Activity

ApplicationActivity

Application

Activity

Content Provider

Service

Application

Data SQLite XMLRemote

Store

Content Resolver Content Resolver

Content Resolver

Page 15: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

Example App: Hello World!

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

Page 20: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

21Mateti/Android

Goal

• Create a very simple application

• Run it on the emulator• Examine its structure

Page 22: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

24Mateti/Android

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

Page 25: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

26Mateti/Android

Run it!

Page 27: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

30Mateti/Android

.apk Internals

1. 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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

36Mateti/Android

Run it!

Page 37: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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 Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

39Mateti/Android

Run it!

Page 40: App Development for Android Prabhaker Mateti. Development Tools (Android) Java – Java is the same. But, not all libs are included. – Unused: Swing, AWT,

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