You are on page 1of 68

Android

Android Application Development

(Chin-Feng Lai)
Assistant Professor, institute of CSIE, National Ilan University Nov. 10th 2011
2011 MMN Lab. All Rights Reserved

2011

Outline
Android Application Layer Dalvik Virtual Machine Android Development Environment Android application source layout Android Debug Tools LAB : Program & Run Android apk on devkit8000

Android Application Layer Dalvik Virtual Machine Android Development Environment Android application source layout Android Debug Tools LAB : Program & Run Android apk on devkit8000

Android Application Layer

Android Application Layer


Activity manager
Manage the life cycle of applications

Content Provider
Share data between applications

Service
A Service is an application component that can perform long-running operations in the background and does not provide a user interface

Broadcast Intent Receiver


if the service does not also provide binding, the intent delivered with startService() is the only mode of communication between the application component and the service

Android Application Layer


Activity manager
Manage the life cycle of applications Activity Lifecycle
Activities in the system are managed as an activity stack. When a new activity is started, it is placed on the top of the stack and becomes the running activity Developers have to care about the implementation of each stage of lifecycle

Android Application Layer


Activity.class: public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); } protected void onDestroy();

Activity Lifecycle

Android Application Layer


Activity Stack
Launch Activity 1 (By Home Launcher) Launch Activity 2 (By Activity 1) onStart Back to Activity 1 (Back button on Activity 2) onPause

Activity1
onStart

Activity2 Activity1
onPause

Activity2 Activity1
onRestart

onStop

onDestory

Activity2 Activity1
onStart

Activity2 Activity1
running

Activity1
onStop onDestory

Back to Home (Back button on Activity 1)


8

Android Application Layer


Content Provider
Content providers store and retrieve data and make it accessible to all applications. The only way to share data across applications in android The accessible data like:
Contact , phone number , call logs , dictionary , etc

Android Application Layer


Content Provider
Content://com.android.example/appname/#<id>

ContentResolver Activity Services . . AndroidManifest.xml


<provider android:name=".example " android:authorities="com.android.example" ... >
10

ContentProvider
Query() Insert() Delete() Update() ..

./data/data/.

Network

DataBase (sqlite3)

File

Android Application Layer Dalvik Virtual Machine Android Development Environment Android application source layout Android Debug Tools LAB : Program & Run Android apk on devkit8000

11

Dalvik Virtual Machine


Since the development language of Android application is Java. Need a Java virtual machine for running application.
Content in Android Runtime
Core Libraries Dalvik Virtual Machine
Compile Java code to Dalvik Excutable (dex format) Run in dalvik VM

12

Dalvik Virtual Machine


Register-based virtual machine for efficient execution, not stack-based in traditional Java Managed by zygote , using fork() in linux kernel to create Each application has its own virtual machine for running

Compare traditional stack-based JVM with register-based JVM Before interpret A=B+C Stack-based ILOAD C ILOAD B IADD ISTORE A Register-based IADD A B C

13

Dalvik Virtual Machine


Advantages of register-based JVM
Reducing the data movement(constants stored in register) Reducing the number of instructions Reducing memory access times More real-time reactions More easier to implement optimization on computation than stack-based JVM

14

Dalvik Virtual Machine


Android Application Program Flow
AndroidManifest.xml R.java Java Compiler Java Class android.jar Resource res/* Java souce src/*

Dex Converter

Xml resource compilation + Other resource pre-process

Dalvik dex ApK Builder Android APK

15

Dalvik Virtual Machine

Jar to Dex
16

Dalvik Virtual Machine


Zygote Fork
APP dex Heap
Structure

Core library Dex file Zygote Heap Dex Structure

APP dex Heap


Structure

Core library Dex file Zygote Heap Dex Structure

Daemons usdb adbd debuggerd rlid

zygote Service Manager runtime Fork() Zygote Fork()

zygote

Core library Dex file Zygote Heap Dex Structure

init Binder Driver Kernel


17

zygote

Android Application Layer Dalvik Virtual Machine Android Development Environment Android application source layout Android Debug Tools LAB : Program & Run Android apk on devkit8000

18

Android Development Environment


Operating System
Windows Linux Mac OS X

19

Android Development Environment


Development tools
Java JDK5 or JDK6 Eclipse IDE Eclipse ADT Android SDK
Using emulator to debug first

20

Android Development Environment


Android Emulator
Included in Android SDK Using QEMU emulator
QEMU is a generic and open source machine emulator and virtualizer. QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). Emulate the hardware and software behaviors

21

Android Development Environment


Android Emulator
Hardwares emulate:
ARM926ej-S CPU MMC Keyboard USB Framebuffer TTY driver NAND FLASH

22

Android Development Environment


Development tools on Linux Ubuntu:
Install java jdk
sudo apt-get install sun-java5-jdk

Install Android SDK


http://dl.google.com/android/installer_r20.0.3-windows.exe

23

Android Development Environment


Development tools on Linux Ubuntu:
Install eclipse IDE
http://www.eclipse.org/downloads/

Install eclipse ADT(Android Development Tools)


Using software update in eclipse and type: http://developer.android.com/intl/zh-TW/tools/sdk/eclipse-adt.html

24

Android Development Environment


Install ADT in eclipse

25

Android Development Environment


Set the Android SDK path in eclipse
Tool bar>>Windows>>Preferences>>Android

26

Android Development Environment


AVD
Windows>>Android SDK and AVD Manager

27

Android Development Environment


In eclipse, File >> New >> Android Project And start your Android trip!

28

Android Application Layer Dalvik Virtual Machine Android Development Environment Android application source layout Android Debug Tools LAB : Program & Run Android apk on devkit8000

29

Android application source layout


What do we have to concern about an android project ?
Java class (src) xml of Android layout (res) Jar of Android version (android sdk) AndroidManifest.xml
Permissions of activities Services in application

30

Android application source layout


Java code

SDK version

Layout file

Activity definition
31

Android application source layout


AndroidManifest.xml
The manifest presents essential information about the application to the Android system
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=http://schemas.android.com/apk/res/android package="com.demo.android.mmn android:versionCode="1 android:versionName="1.0"> <application android:icon="@drawable/icon"> <activity android:name=".mmn" 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> <uses-sdk android:minSdkVersion="X" /> </manifest> Useful reference: http://developer.android.com/guide/topics/manifest/manifest-intro.html
32

Android application source layout


Resource (res)
drawable, layout, vaule
Layout define the locations of each UI components There are five layout used in Android Absolute Layout Linear Layout Relative Layout Frame Layout Table Layout

33

Android application source layout


Resource (res) - layout

34

Android application source layout


Hierarchy Viewer
must connect your device or launch an emulator <sdk>/tools/hierarchyviewer.bat
View Hierarchy Pixel perfect view

Current visible activity

35

Android application source layout


Hierarchy Viewer
Pixel perfect view

Pixel perfect view

36

Android application source layout


Hierarchy Viewer
Pixel perfect view

View Hierarchy

37

Android application source layout


Resource (res) - vaule

<?xml version="1.0" encoding="utf-8"?> <resources> <string name=mmn">how are you mad</string> <string name=mmn1"> how are you diemno</string> <string name=mmn2"> how are you diousk</string> </resources>

38

Android application source layout


Gen generated Java File
R.java
package com.demo.android.bmi; public final class R { public static final class string { public static final int height=0x7f050000; public static final int report_back=0x7f050005; public static final int result=0x7f050003; public static final int submit=0x7f050002; public static final int suggest=0x7f050004; public static final int weight=0x7f050001; } }

Java Source code


view_result.setText(getString(R.string.weight)

39

Android application source layout


Any View object may have an integer ID associated with it
The plus-symbol (+) means that this is a new resource name that must be created and added to our resources android:id="@+id/my_button"

There are a number of other ID resources that are offered by the Android framework. When referencing an Android resource ID, you do not need the plus-symbol, but must add the android package namespace android:id="@android:id/empty"

40

Android application source layout


Absolute Layout
Absolute Layout is based on the simple idea of placing each control at an absolute position.(deprecated!)

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/backbutton" android:text="Back" android:layout_x="10px" android:layout_y="5px" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </AbsoluteLayout>

41

Android application source layout


FrameLayout
FrameLayout is designed to display a single item at a time. The item will be display on the top left of the UI layout by default

<FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:text="Learn-Android.com" android:textSize="24sp" android:textColor="#000000" android:layout_height="fill_parent" android:layout_width="fill_parent" android:gravity="center"/> </FrameLayout>

42

Android application source layout


Linear Layout
Linear layout organizes elements along a single line ( vertical or horizontal).

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/backbutton" android:text="Back" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text="First Name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>

43

Android application source layout


Linear Layout

android:orientation="horizontal"

android:orientation=vertical"

44

Android application source layout


Relative Layout
Relative Layout lays out elements based on their relationships with one another by their IDs.

<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:id="@+id/backbutton" android:text="Back" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/firstName" android:text="First Name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/backbutton" /> </RelativeLayout>

45

Android application source layout


TableLayout
Table Layout organizes content into rows and columns. The rows are defined in the layout XML, and the columns are determined automatically by Android.
<TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <TableRow> <Button android:id="@+id/backbutton" android:text="Back" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow> <TableRow> <TextView android:text="First Name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" /> <EditText android:width="100px" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow> </TableLayout>

46

Android Application Layer Dalvik Virtual Machine Android Development Environment Android application source layout Android Debug Tools LAB : Program & Run Android apk on devkit8000

47

Android Debug Tools


Android SDK

There are a set of debug tools in android SDK, Tool is located on platform-tool and tools directory.
Android Debug Bridge(ADB)
a versatile command line tool that lets you communicate with an emulator instance or connected Android-powered device. It is a client-server program.

Dalvik Debug Monitor Server (DDMS)


provides port-forwarding services, screen capture on the device, thread and heap information on the device, logcat, process, and radio state information

48

Android Debug Tools


Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an emulator instance or connected Android-powered device. adb tool in <sdk>/platform-tools/
Shell mode
Opan cmd on window C:\android-sdk_r11-windows\android-sdk-windows\platform-tools>adb shell

49

Android Debug Tools


adb tool in <sdk>/platform-tools/
Install android application (APK)
$ adb install <path_to_apk> -r (recover)and f (force)

communicate PC with android device


adb pull <remote> <local> adb push <local> <remote>
EX: adb push mmn.txt adb pull /temp/mmn.txt /temp/mmn.txt mmn.txt

Show some service information


adb shell dumpsys SurfaceFlinger adb shell dumpsys battery adb shell dumphys betteryinfo

50

Android Debug Tools


Android Debug Bridge(ADB) other command
When android devices connected or emulators started
$cd <android_SDK_path>/platform-tools

$./adb devices #list detected devices $./adb root #change root Permissions $./adb remount #remount system $./adb kill-server #end adb $./adb forward tcp:x tcp:x #port forward

51

Android Debug Tools


Dalvik Debug Monitor Server (DDMS)
DDMS is integrated into Eclipse and is also shipped in the tools/ directory of the SDK
From Eclipse: Click Window > Open Perspective > Other... > DDMS. From the command line: Type ddms (or ./ddms on Mac/Linux) from the tools/ directory.

Viewing heap usage for a process Tracking memory allocation of objects Working with an emulator or device's file system Examining thread information Starting method profiling LogCat information

52

Android Debug Tools


Dalvik Debug Monitor Server (DDMS)
Click to start in eclipse Applications run in android Screen Capture

logcat

53

Android Debug Tools


Useful Reference
http://developer.android.com/guide/index.html

54

Android Application Layer Dalvik Virtual Machine Android Development Environment Android Application Layout Android Debug Tools LAB : Program & Run Android apk on devkit8000

55

Lab files
eclipse_linux.tgz
Eclipse IDE with ADT for Linux

android_sdk.tgz
Android SDK

mmn_apk.tgz
Android application to be modified

Step1.Set the Development Environment


Uncompressing the lab files Change to eclipse folder , revise the qq.sh file with correct path to eclipse binary file
$cd eclipse/eclipse $vim qq.sh (revise as /home/mmn/Downloads/lab9/eclipse/eclipse/eclipse) $sh qq.sh (start eclipse)

Set the workspace path , it will create the folder automatically

Step2. Set the Android SDK path in eclipse

Step3.Import mmn apk source


Import mmn apk source
Toolbar >> File >> Import >> General >>Existing >> Next >>Browse

Step3.Import facedetecttest.apk source

Step4.Complete the Apk


Complete the source code (eclipse)
mmn>>src>>mmm.com.tw>>facedetecttest.java
Create the rest ClickListener function of buttons Button : NextPreviousExit

Face Detection API


Face Detection API are defined in SDK
Class FaceDetector
findFaces(Bitmap bitmap, Face[] faces)

bitmap: to be processed (already initiated in the code) faces: stored the detected faces (already initiated in the code) Class FaceDetector.Face
float confidence ()
The confidence factor between 0 and 1

float eyesDistance () void getMidPoint (PointF point) float pose (int euler)
the Euler axis to retrieve an angle from (EULER_X, EULER_Y or EULER_Z)

Step4.Complete the Apk


facedetecttest.java
Set NextPrevious button

Step4.Complete the Apk


facedetecttest.java
Set button action

Step4.Complete the Apk


facedetecttest.java
Find face in the picture

Step4.Complete the Apk


facedetecttest.java
Draw the rectangle on face

Step5.Test the apk


After modification , right click on your project >> Run as >> android application to test on android emulator

Step6.Run Apk on devkit8000


In /home/mmn/Downloads/lab9/facedetecttest/bin , you can find out the facedetecttest.apk . Copy the apk file to <android_fs>/system/app/ Run your apk on devkit8000 and start apk!
Note: if the apk is updated , you have to restart booting devkit8000, or the system wont update it

You might also like