kandroid_3rd_seminar_20090327_session_7_android_application_technologyissues_and_businessmodels

48
2009 제3회 Korea Android 세미나 Android App. Tech. Issues and Biz. Models www kandroid org 운영자 : 양정수 (yangjeongsoo@gmail com) 2009. 3. 27. www.kandroid.org 운영자 : 양정수 (yangjeongsoo@gmail.com)

Upload: hugh-choi

Post on 30-Mar-2016

214 views

Category:

Documents


1 download

DESCRIPTION

www.kandroid.org 운영자 : 양정수 ([email protected]) www kandroid org 운영자 : 양정수 (yangjeongsoo@gmail com) 2009 제3회 Korea Android 세미나 2009. 3. 27. Application Business Models Where’s the NeXT? A d id K F t Android Key Features Key Technology Issues Key Technology Issues

TRANSCRIPT

Page 1: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

2009 제3회 Korea Android 세미나

Android App. Tech. Issues and Biz. Models

www kandroid org 운영자 : 양정수 (yangjeongsoo@gmail com)

2009. 3. 27.

www.kandroid.org 운영자 : 양정수 ([email protected])

Page 2: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

목 차

A d id K F tAndroid Key Features

Key Technology IssuesKey Technology Issues

Application Business Models

Where’s the NeXT?

Page 3: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : Platform Overview

AA PPL I CAT IONSPPL I CAT IONS

HomeHomeAlarmAlarmCameraCameraBrowserBrowserIMIMSMS/MMSSMS/MMSDialerDialerAlarmAlarm

AA PPL I CAT IONSPPL I CAT IONS

HomeHomeHomeHomeAlarmAlarmAlarmAlarmCameraCameraCameraCameraBrowserBrowserBrowserBrowserIMIMIMIMSMS/MMSSMS/MMSSMS/MMSSMS/MMSDialerDialerDialerDialerAlarmAlarmAlarmAlarm

Java

……ClockClockAlbumsAlbumsMedia PlayerMedia PlayerCalendarCalendarEmailEmailVoice DialVoice DialContactsContacts

AA PPL I CAT IONPPL I CAT ION FF RAMEWORKRAMEWORK

ActivityActivityManagerManager

WindowWindowManagerManager

ContentContentProviderProvider

ViewViewSystemSystem

NotificationNotificationManagerManager

…………ClockClockClockClockAlbumsAlbumsAlbumsAlbumsMedia PlayerMedia PlayerMedia PlayerMedia PlayerCalendarCalendarCalendarCalendarEmailEmailEmailEmailVoice DialVoice DialVoice DialVoice DialContactsContactsContactsContacts

AA PPL I CAT IONPPL I CAT ION FF RAMEWORKRAMEWORK

ActivityActivityManagerManagerActivityActivityManagerManager

WindowWindowManagerManagerWindowWindowManagerManager

ContentContentProviderProviderContentContentProviderProvider

ViewViewSystemSystemViewView

SystemSystemNotificationNotification

ManagerManagerNotificationNotification

ManagerManagerManagerManager

PackagePackageManagerManager

ManagerManager

TelephonyTelephonyManagerManager

ProviderProvider

ResourceResourceManagerManager

SystemSystem

LocationLocationManagerManager

ManagerManager

……

LL IBRAR I E SI BRAR I E S AA NDRO IDNDRO ID RRUNT IMEUNT IME

ManagerManagerManagerManager

PackagePackageManagerManagerPackagePackageManagerManager

ManagerManagerManagerManager

TelephonyTelephonyManagerManager

TelephonyTelephonyManagerManager

ProviderProviderProviderProvider

ResourceResourceManagerManagerResourceResourceManagerManager

SystemSystemSystemSystem

LocationLocationManagerManagerLocationLocationManagerManager

ManagerManagerManagerManager

…………

LL IBRAR I E SI BRAR I E S AA NDRO IDNDRO ID RRUNT IMEUNT IME

C/C++Surface ManagerSurface Manager

Dalvik Virtual MachineDalvik Virtual Machine

Core LibrariesCore Libraries

OpenGL|ESOpenGL|ES

SGLSGL

Media FrameworkMedia Framework

FreeTypeFreeType

SSLSSL

SQLiteSQLite

WebKitWebKit

LibcLibc

Surface ManagerSurface ManagerSurface ManagerSurface Manager

Dalvik Virtual MachineDalvik Virtual MachineDalvik Virtual MachineDalvik Virtual Machine

Core LibrariesCore LibrariesCore LibrariesCore Libraries

OpenGL|ESOpenGL|ESOpenGL|ESOpenGL|ES

SGLSGLSGLSGL

Media FrameworkMedia FrameworkMedia FrameworkMedia Framework

FreeTypeFreeTypeFreeTypeFreeType

SSLSSLSSLSSL

SQLiteSQLiteSQLiteSQLite

WebKitWebKitWebKitWebKit

LibcLibcLibcLibc

C/C++

HHARDWAREARDWARE AABSTRACT IONBSTRACT ION LLAYERAYER

GraphicsGraphics AudioAudio CameraCamera BluetoothBluetooth GPSGPS Radio(RIL)Radio(RIL) WiFiWiFi ……

HHARDWAREARDWARE AABSTRACT IONBSTRACT ION LLAYERAYER

GraphicsGraphicsGraphicsGraphics AudioAudioAudioAudio CameraCameraCameraCamera BluetoothBluetoothBluetoothBluetooth GPSGPSGPSGPS Radio(RIL)Radio(RIL)Radio(RIL)Radio(RIL) WiFiWiFiWiFiWiFi …………

LL INUXINUX KK ERNELERNEL

Display DriverDisplay Driver Camera DriverCamera Driver Bluetooth DriverBluetooth Driver Shared MemoryShared MemoryDriverDriver

Binder (IPC)Binder (IPC)DriverDriver

USB D iUSB D i K d D iK d D i WiFi D iWiFi D i AudioAudio PowerPower

LL INUXINUX KK ERNELERNEL

Display DriverDisplay DriverDisplay DriverDisplay Driver Camera DriverCamera DriverCamera DriverCamera Driver Bluetooth DriverBluetooth DriverBluetooth DriverBluetooth Driver Shared MemoryShared MemoryDriverDriver

Shared MemoryShared MemoryDriverDriver

Binder (IPC)Binder (IPC)DriverDriver

Binder (IPC)Binder (IPC)DriverDriver

USB D iUSB D iUSB D iUSB D i K d D iK d D iK d D iK d D i WiFi D iWiFi D iWiFi D iWiFi D i AudioAudioAudioAudio PowerPowerPowerPower

Kernel

33rd Korea Android Seminar - www.kandroid.org

USB DriverUSB Driver Keypad DriverKeypad Driver WiFi DriverWiFi Driver AudioAudioDriverDriver

PowerPowerManagementManagementUSB DriverUSB DriverUSB DriverUSB Driver Keypad DriverKeypad DriverKeypad DriverKeypad Driver WiFi DriverWiFi DriverWiFi DriverWiFi Driver AudioAudio

DriverDriverAudioAudioDriverDriver

PowerPowerManagementManagement

PowerPowerManagementManagement

Page 4: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : App. Overview

<manifest><uses-permission /><permission /> <permission-group /> <permission-tree />

AndroidManifest.xml

<permission group /> <permission tree /><instrumentation /> <uses-sdk /><application>

<activity><intent-filter>

vers

ers

<intent filter><action /><category /><data />

<meta-data />

ctiv

ities

ast R

ecei

v

ervi

ces

nt P

rovi

de <meta data /><activity-alias>

<intent-filter> .. </intent-filter> <meta-data />

<service>

Ac

Bro

adcaSe

Con

ten <service>

<intent-filter> .. </intent-filter> <meta-data />

<receiver><intent-filter> .. </intent-filter>intent filter .. /intent filter <meta-data />

<provider><grant-uri-permission /> <meta-data />

43rd Korea Android Seminar - www.kandroid.org

meta data /<uses-library />

Page 5: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : App. Overview

Application Building Block• AndroidManifest.xml Intent : Component Activation Method

Explicit Method : Call Class• Activity [User Interaction] :• ContentProvider [Data Provider]• Service [Service Provider]

BroadcastRecei er

- Explicit Method : Call Class- Implicit Method : IntentFilter

• Action, Data, Category• Declared at AndroidManifest.xml

• BroadcastReceiver

TaskActivity Activity

ContentProvider

Activity Activity

ContentProvider

Process

ContentProvider

Service

ContentProvider

Service

includeDalvik VM

APK PackageAPK Package

ProcessProcess

Service

includeDalvik VM

IncludeDalvik VM

53rd Korea Android Seminar - www.kandroid.org

gg

Page 6: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : App. Overview

Activity 생명주기

An activity has essentially three states:

It is active or running when it is in the foreground of the screen. This is the activity that is the focus for the user's actions.

It is paused if it has lost focus but is still visible to the user. That is, another activity lies on top of it and that activity either is transparent or doesn't cover the full screen, so some of the paused activity can show through. A paused activity is completely alive, but can be killed by the system in extreme low memory situations.

It is stopped if it is completely obscured by another activity. It still retains all state and member information.

63rd Korea Android Seminar - www.kandroid.org

Page 7: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : App. Overview

Method Killable? Description

A ti it 가 처음 시작될 때 호출되며 사용자 인터페이스를onCreate() No

Activity가 처음 시작될 때 호출되며, 사용자 인터페이스를만드는 것과 같은 일회적 초기화 작업에 사용된다.

onRestart() No Activity가 Stop 되었다가 다시 시작할 때 호출된다.

onStart() No Activity가 사용자에게 곧 보여지게 될 것임을 나타낸다onStart() No Activity가 사용자에게 곧 보여지게 될 것임을 나타낸다

onResume() NoActivity가 사용자와의 상호작용이 가능할 때 호출되며, 시작 애니메이션이나 음악 등을 시작하기 좋은 위치이다.

onPause() YesActivity가 background로 전환될 때 호출되며, 주로 아직저장되지 않는 변경 정보들을 persistent data에 저장하는데 사용될 수 있다.

onStop() Yes Activity가 더 이상 사용자에게 보여지지 않을 때 호출된다.

onDestory() Yes

Activity가 소멸되기 직전에 호출된다.사용자가 finish()를 호출하는 하거나, 시스템이 메모리 공

onDestory() Yes간을 절약하기 위해 Activity를 임시로 종료시키는 과정에서 호출된다.

73rd Korea Android Seminar - www.kandroid.org

Saving activity state : onSaveInstanceState(), onRestoreInstanceState()

Page 8: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : App. Overview

Service 생명주기

Service isstarted by

startsService()

Service isstarted by

bindService()

A service can be used in two ways:

onCreate() onCreate()

Context.startService()

It can be started and allowed to run until

onStart()

Service is running

onBind()

Client interacts with the serviceonRebind()

someone stops it or it stops itself.

Context.bindService()

The serviceis stopped

(no callback)onUnbind()

It can be operated programmatically using an interface that it

fonDestory()

Service isSh d

onDestory()

Service isSh d

defines and exports.

83rd Korea Android Seminar - www.kandroid.org

Shut down Shut down

Page 9: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : App. Overview

Broadcast receiver 생명주기

A broadcast receiver has single callback method: void onReceive(Context curContext, Intent broadcastMsg)

When a broadcast message arrives for the receiver, Android calls its onReceive() method and passes it the Intent object containing the message. The broadcast receiver is considered to be active only while it is executing this method. When onReceive() returns, it is inactive.

A process with an active broadcast receiver is protected from being killed. But a process with only inactive components can be killed by the system at any time, when the memory it consumes is needed by other processes.

This presents a problem when the response to a broadcast message is time consuming and, therefore, something that should be done in a separate thread, away from the main thread where other components of the user interface run. If onReceive() spawns the thread and then returns, the entire process, including the new thread, is judged to be inactive (unless

fother application components are active in the process), putting it in jeopardy of being killed. The solution to this problem is for onReceive() to start a service and let the service do the job, so the system knows that there is still active work being done in the process.

h i h h l bili f b i kill d

93rd Korea Android Seminar - www.kandroid.org

The next section has more on the vulnerability of processes to being killed.

Page 10: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : App. Overview

Process와 생명주기

A foreground process is one that is required for what the user is currently doing.

A visible process is one that doesn't have any foreground components, but still can affect what the user sees on screen.

A service process is one that is running a service that has been started with the startService() method and that does not fall into either of the two higher categories.

A background process is one holding an activity that's not currently visible to the user (the Activity object's onStop() method has been called).

An empty process is one that doesn't hold any active application components.

103rd Korea Android Seminar - www.kandroid.org

Page 11: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : App. Overview

foreground

process

foreground 프로세스는 사용자와 상호작용을 하고 있는 스크린의 최상위에 있는 Activity나 현재 수행되고있는 IntentReceiver를 점유하고 있는 프로세스이다. 시스템에는 매우 작은 수의 그러한 프로세스들이 존재할 뿐이며, 이런 프로세스가 계속 실행 되기조차 어려운 최후의 메모리 부족 상태에서만 종료된다. 일반적

process 으로 디바이스가 메모리 페이징 상태에 도달하는 시점에, 사용자 인터페이스에 대한 응답을 처리하기 위해서 그러한 행위가 요구된다.

visible

visible 프로세스는 사용자의 화면상에는 나타나지만 foreground 상태는 아닌 Activity를 점유하는 프로세스이다. 예를 들어 foreground activity 다이얼로그 형태로 그 뒤에 이전에 보여졌던 activity를 허용하면서 표visible

process

g y y시될 때 이러한 것은 발생하게 된다. 그러한 프로세스는 극도록 중요하게 고려되며 더 이상 그것을 수행하지 않을 때까지 종료되지 않으며, 모든 foreground 프로세스들을 실행 상태로 유지하는 것이 요구된다.

iservice 프로세스는 startService() 메쏘드를 가지고 시작된 Service를 점유하고 있는 프로세스이다. 이러한

세 는 사용자에게 직접적 여지는 않지만 이것은 일반적 사용자와 관련된 어떤 일을 일반service

process프로세스는 사용자에게 직접적으로 보여지는 않지만, 이것은 일반적으로 사용자와 관련된 어떤 일을 일반적으로 수행하며, 시스템이 모든 foreground와 visible 프로세스를 보유하기에 충분한 메모리가 존재하는한, 시스템은 그러한 프로세스들은 항상 실행상태로 유지할 것이다.

background 프로세스는 사용자에게는 현재 보여지지 않는 Activity를 점유하는 프로세스이다. 이러한 프로

background

process

세스는 사용자에게 어떤 것도 직접적으로 영향을 미치지 않는다. activity 생명주기를 정확하게 구현하기 위해서 마련된 것이며, 시스템은 위의 3가지 프로세스 타입 중 한 가지를 위한 메모리 반환 요청이 있을 시에만 그러한 프로세스를 종료시킬 것이다. 일반적으로 많은 수의 이런 프로세스가 실행되고 있으며, 해당 프로세스들은 메모리 결핍 시 사용자에게 가장 최근에 보여진 것이 가장 마지막에 종료되는 절차를 확립하기위해 LRU 리스트 상에서 유지된다위해 LRU 리스트 상에서 유지된다.

empty

process

empty 프로세스는 어떤 활성화 된 애플리케이션 컴포넌트도 점유하지 않는 프로세스이다. 이러한 프로세스를 유지하고 있는 유일한 이유는 다음번에 해당 애플리케이션을 실행할 필요가 있을 때 시동(startup) 시간을 개선하기 위한 캐쉬로써 사용하기 위함이다. 그런 이유로, 시스템은 이러한 캐쉬화된 empty 프로세스들과 기반에 있는 커널 캐쉬들 사이에서 전반적인 시스템 균형을 유지하기 위해 이러한 프로세스들을 가끔 종

113rd Korea Android Seminar - www.kandroid.org

process 과 기반에 있는 커널 캐쉬들 사이에서 전반적인 시스템 균형을 유지하기 위해 이러한 프로세스들을 가끔 종료하게 된다.

Page 12: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : Intents

Activating components : intents

Content providers are activated when they’re targeted by a request from a ContentResolver.The other three components – activities, services, and broadcast receivers – are activated by asynchronous messages called intents. An intent is an Intent object that holds the content of the message. For activities and services, it names the action being requestedcontent of the message. For activities and services, it names the action being requested and specifies the URI of the data to act on, among other things. For example, it might convey a request for an activity to present an image to the user of let the user edit some text. For broadcast receivers, the Intent object names the action being announced. For example, it might announce to interested parties that the camera button has been pressed.p , g p p

There are separate methods for activating each type of component:

An activity is launched (or given something new to do) by passing an Intent object to y ( g g ) y p g jContext.startActivity() or Activity.startActivityForResult().

A service is started (or new instructions are given to an ongoing service) by passing an Intent object to Context.startService(). Android calls the service’s onStart() method and j () ()passes it the Intent Object.

An application can initiate a broadcast by passing an Intent object to methods like Context.sendBroadcast(), Context.sendOrderedBroadcast(), and

123rd Korea Android Seminar - www.kandroid.org

(), (),Context.sendStickyBroadcast() in any of their variations.

Page 13: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : Intents

Shutting down components

A content provider is active only while it’s responding to a request form a ContentResolver. And a broadcast receiver is active only while it’s responding to a broadcast message. So there’s no need to explicitly shut down these components.

Activities, on the other hand, provide the user interface. They’re in a long-running conversation with the user and may remain active, even when idle, as long as the conversation continues. Similarly, services may also remain running for a long time. So Android has methods to shut down activities and services in an orderly way:y y

An activity can be shut down by calling its finish() method. One activity can shut down another activity ( one it start with startActivityForResult() ) by calling finishActivity().

A service can be stopped by calling its stopSelf() method, or by calling Context.stopService().

133rd Korea Android Seminar - www.kandroid.org

Page 14: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : Intents Filtering

Intent Resolution : Intent filters

An intent filter is an instance of the IntentFilter class. However, since the Android system must know about the capabilities of a component before it can launch that component, intent filters are generally not set up in Java code, but in the application's manifest file (AndroidManifest.xml) as <intent-filter> elements.(AndroidManifest.xml) as intent filter elements. (The one exception would be filters for broadcast receivers that are registered dynamically by calling Context.registerReceiver(); they are directly created as IntentFilter objects.)

A filter has fields that parallel the action, data, and category fields of an Intent object. An te as e ds t at pa a e t e act o , data, a d catego y e ds o a te t object.implicit intent is tested against the filter in all three areas. To be delivered to the component that owns the filter, it must pass all three tests. If it fails even one of them, the Android system won't deliver it to the component - at least not on the basis of that filter. However, since a component can have multiple intent filters, an intent that does not pass through one of a p p , p gcomponent's filters might make it through on another.

143rd Korea Android Seminar - www.kandroid.org

Page 15: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : Security

Security Architecture

A central design point of the Android security architecture is that no application, by default, has permission to perform any operations that would adversely impact other applications, the operating system, or the user. This includes reading or writing the user's private data (such as contacts or e-mails), reading or writing another application's files, performing network access, keeping the device awake, etc.

An application's process is a secure sandbox. It can't disrupt other applications, except by explicitly declaring the permissions it needs for additional capabilities not provided by the basic sandbox. These permissions it requests can be handled by the operating in various ways, typically by automatically allowing or disallowing based on certificates or by prompting the user. The permissions required by an application are declared statically in that application, so they can be known up-front at install time and will not change after that.

153rd Korea Android Seminar - www.kandroid.org

Page 16: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : Permission

Using Permissions

A basic Android application has no permissions associated with it, meaning it can not do anything that would adversely impact the user experience or any data on the device. To make use of protected features of the device, you must include in your AndroidManifest.xml one ormore <uses-permission> tags declaring the permissions that your application needs.

For example, an application that needs to monitor incoming SMS messages would specify:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.android.app.myapp" ><uses-permission android:name="android.permission.RECEIVE_SMS" />

</manifest>

At application install time, permissions requested by the application are granted to it by the package installer, based on checks against the signatures of the applications declaring those permissions and/or interaction with the user. No checks with the user are done while an application is running: it either was granted a particular permission when installed, and can use that feature as desired, or the permission was not granted and any attempt to use the feature will fail without prompting the user.

163rd Korea Android Seminar - www.kandroid.org

Page 17: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Android Key Features : Permission

173rd Korea Android Seminar - www.kandroid.org

Page 18: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Dalvik VM related

App FrameworkZygote

D l ik VM

App. Framework• System Services• Hardware Services

D l ik VM

Home

Dalvik VM

Native Server• Audio Flinger

Dalvik VM

HomeSystem Serverdaemons• usbd

dbdServiceManager

g• Surface Flinger

libc libc• adbd• debuggerd• rild Zygoteruntime

Manager

libc libc libc

libc libc

Init Kernel

zygote란 애플리케이션을 빠르게 구동하기 위해서 미리 fork 되어 있는 프로세스이다. 이것은 시스템에서 exec() 호출을 통해 특정 애플리케이션을 실행하고자 하기 전까지는 중립적인 상태, 즉Binder Driver

183rd Korea Android Seminar - www.kandroid.org

특정 애플리케이션과 합체되지 않는 상태를 유지한다.

Page 19: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Dalvik VM related

Zygote Maps Browser Home

Zygote heap

(shared dirty,Copy on write;

Mapsdex file

(mmap()ed)

Browserdex file

(mmap()ed)

Homedex file

(mmap()ed)Copy-on-write;rarely written)

core library

Maps livecode and heap

Browser live code and heap

Home livecode and heap

core librarydex files

(mmap()ed)

(private dirty)

shared from

(private dirty)

shared from

(private dirty)

shared from

“live” core libraries

shared fromZygote

shared fromZygote

shared fromZygote

• nascent VM process• starts at boot time• preloads and preinitializes classes

(shared dirty;read-only)

193rd Korea Android Seminar - www.kandroid.org

• fork()s on command

Page 20: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Dalvik VM related

system_serverzygote

RuntimeInit AndroidRuntime ZygoteInitApplicationContext Application

ActivityThread Instrumentation

ApplicationThreadfork

socketDalvik VM

WindowManager ActivityManager PackageManager

fork binder ipc

process_name (eg. android.process.acore)

ApplicationContext Application ApplicationThreadApplicationContext Application

ActivityThread Instrumentation

ApplicationThread

Activity ContentProvider Service

203rd Korea Android Seminar - www.kandroid.org

Activity ContentProvider Service

Page 21: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Native C/C++ Porting

NDK Doc : ~/mydroid/development/pdk/ndk/README

1 가장먼저해야할일은다음과아래의 URL에있는문서에서의다음의두절차1. 가장먼저해야할일은다음과아래의 URL에있는문서에서의다음의두절차, 즉 6번까지의작업과 8번의 goldfish 부분에대한 build를마무리해야함.

http://www.kandroid.org/board/board.php?board=androidsource&command=body&no=4

2. ~mydroid/development/pdk/ndk/config/config.mk 수정

3 ~mydroid/development/pdk/ndk/sample/Makefile lib수정3. mydroid/development/pdk/ndk/sample/Makefile.lib 수정

4. native library 및 application 제작및테스트

213rd Korea Android Seminar - www.kandroid.org

Page 22: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Native C/C++ Porting

public class SimpleJNI extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);try {

InputStream is = getAssets().open("libnative.so"); int size = is available();int size = is.available();byte[] buffer = new byte[size];is.read(buffer); FileOutputStream fos = openFileOutput("libnative.so",

ActivityMODE WORLD WRITEABLE);Activity.MODE_WORLD_WRITEABLE); fos.write(buffer);fos.close(); is.close();

} catch (IOException e) {} catch (IOException e) {throw new RuntimeException(e);

} TextView tv = new TextView(this);int sum = Native add(2 3);int sum = Native.add(2, 3);tv.setText("2 + 3 = " + Integer.toString(sum));setContentView(tv);

}}

223rd Korea Android Seminar - www.kandroid.org

}

Page 23: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Native C/C++ Porting

class Native {static {static {

// The runtime will add "lib" on the front and ".o" on the end of// the name supplied to loadLibrary.

// System.loadLibrary("native");System load("/data/data/com example android simplejni/files/libnative so");System.load( /data/data/com.example.android.simplejni/files/libnative.so );

}static native int add(int a, int b);

}

233rd Korea Android Seminar - www.kandroid.org

Page 24: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Native C/C++ Porting

#include <jni.h>#include <stdio h>#include <stdio.h>

static jintadd(JNIEnv *env, jobject thiz, jint a, jint b) {int result = a + b;int result = a + b;

printf("%d + %d = %d", a, b, result);return result;

}

static const char *classPathName = "com/example/android/simplejni/Native";

static JNINativeMethod methods[] = {{"add" "(II)I" (void*)add }{ add , (II)I , (void )add },

};

243rd Korea Android Seminar - www.kandroid.org

Page 25: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Native C/C++ Porting

typedef union {JNIEnv* env;void* venv;void* venv;

} UnionJNIEnvToVoid;

jint JNI_OnLoad(JavaVM* vm, void* reserved){{

UnionJNIEnvToVoid uenv; uenv.venv = NULL;jint result = -1; JNIEnv* env = NULL;

if (vm >GetEnv(&uenv venv JNI VERSION 1 4) != JNI OK) {if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) {fprintf(stderr, "GetEnv failed");goto bail;

}env = uenvenv;env = uenv.env;

if (!registerNatives(env)) { fprintf(stderr, "registerNatives failed");

}}

result = JNI_VERSION_1_4;bail:

return result;

253rd Korea Android Seminar - www.kandroid.org

return result;}

Page 26: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Native C/C++ Porting

static int registerNativeMethods(JNIEnv* env, const char* className,JNINativeMethod* gMethods, int numMethods)

{{jclass clazz;clazz = env->FindClass(className);if (clazz == NULL) {

fprintf(stderr "Native registration unable to find class '%s'" className);fprintf(stderr, Native registration unable to find class %s , className);return JNI_FALSE;

}if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {

fprintf(stderr "RegisterNatives failed for '%s'" className);fprintf(stderr, RegisterNatives failed for %s , className);return JNI_FALSE;

}return JNI_TRUE;

}}

static int registerNatives(JNIEnv* env){if (!registerNativeMethods(env classPathNameif (!registerNativeMethods(env, classPathName,

methods, sizeof(methods) / sizeof(methods[0]))) {return JNI_FALSE;

}return JNI TRUE;

263rd Korea Android Seminar - www.kandroid.org

return JNI_TRUE;}

Page 27: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : Native C/C++ Porting

273rd Korea Android Seminar - www.kandroid.org

Page 28: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : WIPI, J2ME

WIPI Application ManagerWIPI Application Manager

Clet Jlet Midlet

pp gpp g

WIPI C WIPI JAVA J2ME

Run Time Engine

H A L

Handset Hardware & Native System Software

283rd Korea Android Seminar - www.kandroid.org

Page 29: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : WIPI, J2ME

WIPI Jlet Lifecycle MIDP Midlet Lifecycle

loadedd

loadedd /paused

startApp()

/paused

startApp()

Active

startApp() pauseApp()

Active

resumeApp() pauseApp()

Paused

destroyApp(boolean)

Paused

destroyApp(boolean)

destroyeddestroyed

293rd Korea Android Seminar - www.kandroid.org

Page 30: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : WIPI, J2ME

public class HelloWorld extends MIDlet {private TextBox tbox;public HelloWorld() {

tbox = new TextBox("Hello world MIDlet", "Hello World!", 25, 0);}protected void startApp() {

Display.getDisplay(this).setCurrent(tbox);}protected void pauseApp() { }

protected void destroyApp(boolean bool) { }}

}

public class HelloAndroid extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.main);

}}

303rd Korea Android Seminar - www.kandroid.org

}

Page 31: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : WIPI, J2ME

<LinearLayout xmlns:android=http://schemas.android.com/apk/res/androidandroid:orientation="vertical“

Screen

android:orientation verticalandroid:layout_width="fill_parent“ android:layout_height="fill_parent“ ><TextView

android:layout width="fill parent"

Alert

a d o d ayou _ d _pa e tandroid:layout_height="wrap_content" android:text="@string/hello“ />

</LinearLayout>

Form

List

LinearLayout

TextBox

RalativeLayout View View

LinearLayoutLayourParams

LinearLayoutLayourParams

LinearLayoutLayourParams

<<interface>>Displayable

View View View

RalativeLayoutL P

RalativeLayoutL P

RalativeLayoutL P

Canvas

Graphics

313rd Korea Android Seminar - www.kandroid.org

LayoutParams LayoutParams LayoutParamsp

Page 32: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : WIPI, J2ME

C t ()

Activitystarts

onCreate()

onStart() onRestart()User navigatesBack to the

activity

loaded/paused

startApp()onResume()

Activity is i

Process is

y

The activity

Active

startApp()

P ()

runningProcess is

killed

Another activity comesin front of the activity

Other applications

The activityComes to theforeground

The activityComes to theforeground

Paused

startApp() pauseApp()

onPause()

onStop()

The activity is no longer visible

ppNeed memory foreground

destroyed

destroyApp(boolean)

onDestory()

323rd Korea Android Seminar - www.kandroid.org

Activity isshutdown

Page 33: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Key Tech. Issues : WIPI, J2ME

http://www.microemu.org/

• http://www.microemu.org/download/5ud0ku.apk• http://labs.opera.com/downloads/OperaMini.apk

333rd Korea Android Seminar - www.kandroid.org

Page 34: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : Basic

The “FOUR OPENS” of Successful Open Access

- The letter of GOOGLE to FCC, July 18, 2007

Open DevicesOpen

Networks

Open Open Applications

Open Services

343rd Korea Android Seminar - www.kandroid.org

Page 35: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : Android Market

353rd Korea Android Seminar - www.kandroid.org

Page 36: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : Android Market

363rd Korea Android Seminar - www.kandroid.org

Page 37: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : Android Market

Described as "a computer-implemented method of effectuating an electronic on-line payment," the systemeffectuating an electronic on line payment, the system mentioned in the patent application is similar to existing Mobile payment services. These services like mobile version of PayPal have been available for some time but have had little success bursting with merchants and with have had little success bursting with merchants and with customers. The main difference between existing mobile payment systems and GPay is, of course, that GPay is created by Google and will be easily adopted by Android Platform.

특허 애플리케이션에서 언급된, 온라인 결재를 유효화하는컴퓨터 구현 방법으로 묘사된 그 시스템은 이미 존재하는모바일결재 서비스와 유사하다. PayPal의 모바일 버전같은바일결재 서비 와 유사하다 y 의 바일 버전같은이들 서비스들은 가끔 유용했었지만, have had little success bursting with merchants and with customers.

이미 존재하는 모바일 결재와 GPay의 주된 차이는,

GPay가 구글에 의해 만들어졌고, 안드로이드 플랫폼에

쉽게 장착될 것이라는 것이다.

373rd Korea Android Seminar - www.kandroid.org

Page 38: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : Android Market

383rd Korea Android Seminar - www.kandroid.org

Page 39: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : Android Market

http://phandroid.com/2009/02/20/android-market-hacked-kinda-sorta/

393rd Korea Android Seminar - www.kandroid.org

Page 40: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : PacketVideo

403rd Korea Android Seminar - www.kandroid.org

Page 41: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : PacketVideo

Recorder App Media Player AppApplications

Media Recorder/java/android/media

Media Player/java/android/media

ApplicationsFramework

Media Player/lib/media

AudioFlingerNative Libraries

Media Recorder/extlibs/pv/anroid

AudioFlinger/servers/audioflingerNative Libraries

(user space HAL)AudioHardwareInterface

/servers/audioflinger

Proprietary AudioLibraries ALSA

/dev/eacLinux Kernel

/dev/audio

Other Audio Drivers ALSA Kernel Driver

413rd Korea Android Seminar - www.kandroid.org

Other Audio Drivers ALSA Kernel Driver

Page 42: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : PacketVideo

Camera ApplicationApplicationsSurfaceHolder

SurfaceView/java/android/view

Camera/java/android/media

ApplicationsFramework

MediaRecorder/java/android/media

SurfaceHolder

SurfaceHolderSurfaceHolder JNI JNI

Media Recorder/extlibs/pv/android

Camera Service (ICS)Native Libraries

Camera/libs/hardware/camera

SurfaceFlinger Binder IPC

Binder IPC(Isurface)

Camera Service (ICS)/servers/cameraNative Libraries

(user space HAL)CameraHardwareInterface

/servers/CameraHardwareInterface.h

/servers/surfaceflingerSurfaceFlinger

/servers/surfaceflingerBinder IPC(Icamera)

Binder IPC(Isurface)

V4L2Proprietary CameraLibraries

Proprietary VideoLibrariesLinux Kernel

/dev/video

V4L2 Kernel Driver

423rd Korea Android Seminar - www.kandroid.org

V4L2 Kernel Driver

Page 43: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : PacketVideo

Audio / Video

RecordPlayback

android.media.MediaPlayer android.media.MediaRecorder

433rd Korea Android Seminar - www.kandroid.org

Page 44: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : PacketVideo

443rd Korea Android Seminar - www.kandroid.org

Page 45: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : Open Intent

www.openintents.org

Applications(for your mobile)

Intents registry(for developers)(for your mobile) (for developers)

453rd Korea Android Seminar - www.kandroid.org

Page 46: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

App. Biz. Model : Open Intent

463rd Korea Android Seminar - www.kandroid.org

Page 47: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Where’s the NeXT?

Where do we come from? Where are we? Where are we going?

Open Networks

Open Devices

WalledGarden ?

Open Applications

Open Services

473rd Korea Android Seminar - www.kandroid.org

Page 48: kandroid_3rd_seminar_20090327_session_7_Android_Application_TechnologyIssues_and_BusinessModels

Where’s the NeXT?

2009년 10.22.~10.23.4th Korea Android Seminar

위의행사는확정된내용이며, 더불어, 아래의행사를서울에서개최하기위해현재논의중임.

1st APAC 한국개최가확정된다면,제4회 Kandroid세미나는 1st APAC가될것임.

1st APAC at Korea(Asia Pacific Android Conference)

483rd Korea Android Seminar - www.kandroid.org