400 likes | 637 Vues
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/
E N D
App Development for Android PrabhakerMateti
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 Mateti/Android
(Other) Languages and IDEs • IntelliJ Idea • Android Studio • Corona for Android • Android Native Development Kit (NDK) • Scala Mateti/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. Mateti/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 Mateti/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. Mateti/Android
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. Mateti/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. Mateti/Android
Life cycle of an Activity Mateti/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). Mateti/Android
Services • Interprocess communication (IPC). • startService(); stopSelf() ; stopService() • bindService(). Multiple components can bind to the service at once. When all of them unbind, the service is destroyed. • onStartCommand() • onBind() • onCreate() • onDestroy() Mateti/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. Mateti/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. Mateti/Android
Content Providers Application Activity Activity Application Application Activity Content Resolver Service Content Resolver Content Provider Content Resolver Data XML Remote Store SQLite Mateti/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 Mateti/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. Mateti/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. Mateti/Android
IntentReceivers • Components that respond to Intents • Way to respond to external notification or alarms • Apps can create and broadcast own Intents Mateti/Android
Example App: Hello World! developer.android.com/resources/tutorials/hello-world.html
The Emulator • QEMU-based ARM emulator • Displays the same image as the device • Limitations: • Camera • GPS Mateti/Android
Goal • Create a very simple application • Run it on the emulator • Examine its structure Mateti/Android
Building HelloAndroid • Create a Project • http://developer.android.com/training/basics/firstapp/creating-project.html • Generates several files • Next few slides • Modify HelloAndroid.java as needed Android-Develop-1
helloandroid Manifest • <?xml version="1.0" encoding="utf-8"?> • <manifest xmlns:android="http://schemas.android.com/apk/res/android" • package="com.example.helloandroid" • 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> • </manifest> Mateti/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 Mateti/Android
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);TextViewtv = new TextView(this);tv.setText("Hello, Android – by hand");setContentView(tv); }} Set the view “by hand” – from the program Mateti/Android
Run it! Mateti/Android
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 Mateti/Android
APK Content All source code here Java code for our activity Generated Java code Helps link resources to Java code All non-code resources Layout of the activity Images Strings used in the program Android Manifest Mateti/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. Mateti/Android
.apk Internals • AndroidManifest.xml — deployment descriptor for applications. • IntentReceiver as advertised by the IntentFilter tag. • *.java files implement Android activity • Main.xml — visual elements, or resources, for use by activities. • R.java —automatically generated by Android Developer Tools and "connects" the visual resources to the Java source code. • Components share a Linux process: by default, one process per .apk file. • .apk files are isolated and communicate with each other via Intents or AIDL. Mateti/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 Mateti/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 Mateti/Android
/res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns: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 Mateti/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> Mateti/Android
/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 inttextview=0x7f050000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final intapp_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. Mateti/Android
Run it! Mateti/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. Mateti/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); }} Mateti/Android
Run it! Mateti/Android
Source Code for Android Examples • Sources for many Android applications that can be enhanced: • http://code.google.com • http://developer.android.com/resources/browser.html?tag=sample Mateti/Android