Presentation is loading. Please wait.

Presentation is loading. Please wait.

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.

Similar presentations


Presentation on theme: "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."— Presentation transcript:

1 App Development for Android Prabhaker Mateti

2 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? 2CEG436

3 Development Tools (Android) Java – Java syntax is the same. But, not all libs are included. – Unused: Swing, AWT, SWT, lcdui Eclipse – ADT Plugin for Eclipse – developer.android.com/sdk/eclipse-adt.html developer.android.com/sdk/eclipse-adt.html Android SDK – developer.android.com/sdk/tools-notes.html developer.android.com/sdk/tools-notes.html Android Device Emulator Development Platforms: Linux, Mac OSX, or Windows 3CEG436

4 The Emulator QEMU-based ARM emulator Displays the same image as the device Limitations: –No Camera support CEG4364

5 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. adb 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. Dalvik Debug Monitor Server 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. DeviceAndroid Virtual Device 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.jdb 5CEG436

6 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 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 CEG4366

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

8 A Launcher: zeam 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 8CEG436

9 Android Architecture

10 10CEG436

11 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 11CEG436

12 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) CEG43612

13 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… 13CEG436

14 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, … 14CEG436

15 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 CEG436

16 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,...) 16CEG436

17 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. 17CEG436

18 Application Framework Views lists, grids, text boxes, buttons, and even an embeddable web browser Views Content Providers to access data from other applications (such as Contacts), or to share their own data Content Providers A Resource Manager, providing access to non-code resources such as localized strings, graphics, and layout filesResource Manager A Notification Manager that enables all applications to display custom alerts in the status barNotification Manager An Activity Manager that manages the lifecycle of applications and provides a common navigation backstack [sic]Activity Manager CEG43618

19 Standard Applications Android provides a set of core applications: – Client – SMS Program – Calendar – Maps – Browser – Contacts – Etc All applications are written using the Java language. CEG43619

20 Android Application Internals

21 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. 21CEG436

22 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. 22CEG436

23 .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. CEG43623

24 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 24CEG436

25 AndroidManifest.xml Declares all application components: – – – for content providers – 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 25CEG436

26 Life cycle of an Android activity 26CEG436

27 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. CEG43627

28 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. CEG43628

29 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). CEG43629

30 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() startService()stopSelf()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.bindService() Can work both ways. (i) onStartCommand() allows components to start it and (ii) onBind() allows binding.onStartCommand()onBind() (iii) onCreate() (iv) onDestroy()onCreate()onDestroy() 30CEG436

31 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. CEG43631

32 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. CEG43632

33 Content Providers CEG43633

34 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.Uri Examples: – ACTION_DIAL content://contacts/people/13 ACTION_DIAL Display the phone dialer with the person #13 filled in. – ACTION_VIEW content://contacts/people/ ACTION_VIEW 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: , ")); – startActivity(new Intent(Intent.EDIT_ACTION, Uri.parse("content://contacts/people/1")); secondary attributes: category, type, component, extras CEG43634

35 public class Intent startActivity to launch an activity. startActivity broadcastIntent to send it to a BroadcastReceiver broadcastIntent Communicate with a Service – startService(Intent) or startService(Intent) – bindService(Intent, ServiceConnection, int) bindService(Intent, ServiceConnection, int) Explicit Intents specify a component to be run. – setComponent(ComponentName) or setComponent(ComponentName) – setClass(Context, Class)) setClass(Context, Class) Implicit Intents match an intent against all of the s in the installed applications. – Will return to this topic later. 35CEG436

36 Intent Filters CEG43636

37 IntentReceivers Components that respond to broadcast ‘Intents’ Way to respond to external notification or alarms Apps can invent and broadcast their own Intent 37CEG436

38 Example App: Hello World! developer.android.com/resources/tutorials /hello-world.html

39 39 Goal Create a very simple application Run it on the emulator Examine its structure CEG436

40 40 Package Content Java code for our activityAll source code here Generated Java code Helps link resources to Java code Layout of the activity Strings used in the program All non-code resources Android Manifest Images CEG436

41 41 Android Manifest 1. 2.

42 42 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. 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 CEG436

43 43 Run it! CEG436

44 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. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } CEG43644 Set the layout of the view as described in the main.xml layout

45 45 /res/layout/main.xml Further redirection to /res/values/strings.xml CEG436

46 46 /res/values/strings.xml Hello World, HelloAndroid – by resources! Hello, Android CEG436

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

48 48 Run it! CEG436

49 49 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. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Object o = null; o.toString(); setContentView(R.layout.main); } } CEG436

50 50 Run it! CEG436

51 Case Studies of Applications

52 ADW.Launcher ADW.Launcher is an open source Home Replacement app. it is included as the main Launcher in Cyanogen's custom ROMs.Cyanogen's custom ROMs I will be (??) using the source code of this app as a running example. – Download the source from 52CEG436

53 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 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 53CEG436

54 Project Suggestions – Web Scrapers [movies, weather, sports, 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 54CEG436

55 Source Code for Android Examples Sources for many Android applications that can be enhanced: ser.html?tag=sample ser.html?tag=sample CEG43655


Download ppt "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."

Similar presentations


Ads by Google