A n d r o
Sponsored Links
This presentation is the property of its rightful owner.
1 / 61

삼성소프트웨어멤버십 20 th 박희근 ( sirini/blog) PowerPoint PPT Presentation


  • 175 Views
  • Uploaded on
  • Presentation posted in: General

A n d r o i d. 삼성소프트웨어멤버십 20 th 박희근 ( http://sirini.net/blog). Hello world!. 순 서. 안드로이드 역사 시스템 구조 응용프로그램 구조 [ 부록 ] 예제프로그램 소개. 안드로이드의 역사. 안드로이드의 역사. 점 점 커져가던 모바일 시장. M o b i l e. 안드로이드의 역사. 모바일 기기까지도 광고 플랫폼으로 만들고 싶었던 Google. M o b i l e. Ads by Google. 안드로이드의 역사.

Download Presentation

삼성소프트웨어멤버십 20 th 박희근 ( sirini/blog)

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


A n d r o i d

삼성소프트웨어멤버십 20th박희근 (http://sirini.net/blog)


Hello world!


순서

안드로이드역사

시스템 구조

응용프로그램 구조

[부록] 예제프로그램 소개


안드로이드의 역사


안드로이드의 역사

점점 커져가던 모바일 시장

M o b i l e


안드로이드의 역사

모바일 기기까지도

광고 플랫폼으로

만들고 싶었던

Google

M o b i l e

Ads by Google


안드로이드의 역사

그 들의 선택


안드로이드의 역사

“모바일 시장에서 지배력을 유지하려면,

우리가 직접 생태계를 창조해야 한다.”


안드로이드의 역사

2005년 7월, 팔로알토의“안드로이드” 사 인수

2007년 11월 5일, 오픈 핸드셋얼라이언스 결성

2008년 10월 21일, 안드로이드 오픈소스화

2009년 2월, 안드로이드 SDK 1.1

2010년 1월, 안드로이드 SDK 2.1


안드로이드의 역사

친구에서 적으로


안드로이드의 역사

구글CEO 에릭슈미트가 애플 이사회를 탈퇴한 후

넥서스원은 공식적으로 멀티터치를 지원하기 시작


안드로이드의 역사

오늘날 안드로이드 플랫폼은 아이폰 OS 에 대항할

강력한 후보 군으로 이름을 알리고 있으며

지금 이 순간에도 전세계 수 많은 개발자들이

안드로이드 플랫폼에서 애플리케이션을

개발하고 있다.

Android

Ads by Google


시스템 구조


시스템 구조

응용 프로그램들

응용프로그램 프레임워크

안드로이드 런타임

라이브러리들

리눅스커널


시스템 구조

리눅스커널 구성

화면출력

블루투스

카메라

메모리

바인더

키패드

USB

WiFi

오디오

전원관리


시스템 구조

라이브러리들

서패이스 매니저

미디어 코덱

SQLite

OpenGL ES

FreeType

웹킷 엔진

SGL

SSL

libc


시스템 구조

안드로이드 런타임

핵심 라이브러리들

Dalvik가상 머신

?


시스템 구조

응용프로그램 프레임워크

액티비티

매니저

윈도우

매니저

컨텐츠

제공자들

보기

시스템

알림

매니저

패키지

매니저

텔레포니

매니저

리소스

매니저

위치

매니저

센서

매니저


시스템 구조

응용프로그램들

연락처

전화

브라우저

여러분의

어플


시스템 구조

!

Dalvik

구글의 댄 본스타인이 만든 가상 머신

낮은 메모리용으로 최적화된 자바 가상머신

달빅 어원: 본스타인 조상이 살던 아이슬란드의

어떤 물고기 잡던 마을 이름


시스템 구조

Dalvikvs Java

달빅VM 은 .dex파일을 실행 (자바는 .jar 파일)

달빅에서 부동소수점 연산은 에뮬레이팅 방식으로 처리(하드웨어 성능이 낮아 소프트웨어적으로 연산 >> 느림)

달빅에선finalization 은 지양하도록 권고됨(대신 명시적으로 close() 나 terminate() 를 쓰도록 권고)


시스템 구조

당신이 모바일 개발자라면

알아야 할 시스템상의 제약들

1. 느린 처리 속도

2. 제한된 RAM / 영구 저장공간

3. 저해상도의 작은 화면

4. 낮은 신뢰성과 비싼 데이터 전송 비용 (ex. 3G)

5. 제한된 배터리 수명


시스템 구조

당신이 훌륭한 모바일 개발자라면

지켜야 할 개발 습관들

효율적으로 동작하는 코드를 작성 할 것

제한된 저장 공간을 예측할 것

작은 화면, 핑거 터치를 위한 UX 를 고려할 것

느린 속도와 긴 지연 시간을 예측할 것

통신 비용을 최대한 줄일 수 있도록 해 줄 것


시스템 구조

안드로이드의 시스템 구조는 전체적으로 열악한

하드웨어 자원을 감안해 철저히 경량화 되어 있고

모듈화 되어 있다. 안정적인 리눅스커널 위에서

맞춤형 자바 가상 머신인달빅이

안드로이드 시스템 전체를

움직이고 있다.


응용 프로그램

구조


응용프로그램 구조

배경 애플리케이션

전경 애플리케이션


응용프로그램 구조

액티비티매니저에 의해 애플리케이션 스택에 기록됨

전경 애플리케이션


응용프로그램 구조

안드로이드SDK에 정의된 객체 중

모든 개발자가 알아야 할4가지 항목?

인텐트

서비스

액티비티

컨텐츠제공자


응용프로그램 구조

액티비티?

사용자 인터페이스 화면을

“액티비티(Activity)” 라 한다.

애플리케이션은 프로그램의

여러 단계를 다루기 위해서

한 개 이상의 액티비티를

정의한다.


응용프로그램 구조

액티비티?

액티비티 예)

애플리케이션 상에서 사용자가

“도움말 보기” 를 클릭 했을 시

띄워지는 팝업 도움말도 하나의

액티비티라 할 수 있다.

도움말

-----------------

공격을 하시려면 화면을 빠르게 터치하세요!

방어는 좌->우 슬라이딩으로!


응용프로그램 구조

액티비티

생명주기

시작

실행

정지

일시중지

소멸


응용프로그램 구조

시작

onCreate(Bundle) : 액티비티 처음 시작시 호출

onStart() : 액티비티가 사용자에게 곧 보여짐

onResume() : 사용자와 상호작용 시작 가능

onRestoreInstanceState(Bundle) :

메서드가 미리 저장해 둔 상태로부터

액티비티가 다시 초기화 될 때 호출됨

실행


응용프로그램 구조

실행

onSaveInstanceState(Bundle) :

인스턴스별 상태 저장

onPause() : 액티비티가 배경으로 전환

onResume()

일시중지


응용프로그램 구조

onSaveInstanceState()

정지

일시중지

onStop() : 액티비티가 사용자에게

더 이상 보여지지 않음

onDestroy()

혹은 <프로세스 종료>

소멸


응용프로그램 구조

실행

onResume()

onStart()

onRestart() : 액티비티가 정지 상태에서

다시 디스플레이됨

정지


응용프로그램 구조

인텐트?

전화를

걸도록 하다

어떤 액션이 수행되도록

특정 액티비티에 의향 선언

1

동영상을

재생하도록 하다

2

3

4

5

6

7

8

9

0

Call

Exit


응용프로그램 구조

인텐트?

공개 인텐트:

집에 “전화” 를 “걸기”

사진을 “열람” 하기

“웹페이지” 를 “열기”

전체 영역에서 구체적 행동을 설명하는 매커니즘

비공개 인텐트:

myApp “도움말” 열기

myApp기록을 “저장” 하기

myApp 저장된 “로그” 열기

특정 App 내에서만 공개된 각각의 행동별매커니즘


응용프로그램 구조

사용자와의 직접적인

상호작용 없이 배경에서 실행되는 작업

예로, 음악을 재생하는 코드는 서비스로

되어 있어야 한다.

서비스?

전경 애플리케이션


응용프로그램 구조

컨텐츠 제공자?

Content://app2/get/3

애플리케이션1

애플리케이션2

Content://app1/save/d3


응용프로그램 구조

컨텐츠 제공자?

한 애플리케이션이 작성한 파일은 다른 애플리케이션에 의해

읽기/쓰기 될 수 없다. 따라서 안드로이드 프로그램은

IPC (Inter-Process Communication) 방식 혹은 컨텐츠 제공자

(ContentProvider) 를 통해서 서로 소통한다.


응용프로그램 구조

컨텐츠 제공자?

기본 형식은 URI (Uniform Resource Identifier) 로 표현

content://authority/path/id

기본

접두사

특정 레코드 기본키

데이터

제공자명

제공자내

가상 디렉토리


응용프로그램 구조

안드로이드의포용과 확장

둘 다

동일한 공개

API 를 사용

원한다면,

기본 App

대신 만든

myApp을

쓸 수 있다!

1

2

0

1

3

9

2

4

5

8

3

6

7

7

4

8

5

6

9

0

Call

Call

Exit

기본 전화걸기App

내가 만든 myApp


응용프로그램 구조

안드로이드의 응용프로그램은 여러 액티비티를 기반으로

동작하게 되며, 각 액티비티들은 저마다 생명주기를 가진다.

애플리케이션은 각자가 관심을 가지고 있는 인텐트가

있으며 사용자와 직접 상호작용 하지 않는

서비스라는 개념도 있다. 또 각각의

애플리케이션들은 컨텐츠 제공자

를 통해서 서로 소통한다.


[부록] 예제

프로그램


TODO List 만들기

순서대로

최신 버전을

설치하세요!

만들기 전 준비할 것?

Android SDK

JDK 6 (+JRE)

Eclipse v3.4


TODO List 만들기

File > New > Other

Android

└ Android Project


TODO List 만들기

Project name: 프로젝트명 입력

(예: exampleAndroid)

Build Target: 안드로이드 SDK

버전 선택

Application name: 어플 이름

(예: my first app)

Package name: 패키지명 입력

(예: com.example.myApp)

Create Activity: 처음 시작시 보일

액티비티클래스명 입력

(예: exampleMyAppClass)


TODO List 만들기

새 안드로이드 가상 머신 만들기


TODO List 만들기

Name : 가상머신 이름 입력

(예: myNewAVD)

Target : 안드로이드 SDK 호환 버전 선택

(예: Android 2.1 – API Level 7)

SD Card Size : 메모리 크기 입력

(예: 512)


TODO List 만들기

코드 작성!


TODO List 만들기

// import 해야 할 목록들

importjava.util.ArrayList;

importandroid.view.KeyEvent;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnKeyListener;

importandroid.widget.ArrayAdapter;

importandroid.widget.EditText;

importandroid.widget.ListView;


TODO List 만들기

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 내가 만든 View 를 부풀린다.

setContentView(R.layout.main);

// UI 위젯의레퍼런스를 얻어온다.

ListViewmyListView = (ListView)findViewById(R.id.myListView);

final EditTextmyEditText = (EditText)findViewById(R.id.myEditText);

// 해야 할 일들을 담기 위한 배열 리스트(array list)를 생성한다.

final ArrayList<String> todoItems = new ArrayList<String>();

// 위 배열을 리스트 뷰와 묶기 위한 배열 어댑터(array adapter)를 생성한다.

final ArrayAdapter<String> aa;

aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,

todoItems);


TODO List 만들기

// 위 배열 어댑터를 리스트 뷰와 묶는다.

myListView.setAdapter(aa);

// 사용자로 하여금 새로운 해야 할 일을 추가할 수 있도록 한다.

myEditText.setOnKeyListener(new OnKeyListener() {

public booleanonKey(View v, intkeyCode, KeyEvent event) {

if(event.getAction() == KeyEvent.ACTION_DOWN) {

if(keyCode== KeyEvent.KEYCODE_DPAD_CENTER) {

todoItems.add(0, myEditText.getText().toString());

aa.notifyDataSetChanged();

myEditText.setText("");

return true;

}

}

return false;

}

});

}


TODO List 만들기

레이아웃

main.xml파일

수정하기!


TODO List 만들기

<?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“ >

<EditText

android:id="@+id/myEditText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="새 해야 할 일"

/>

<ListView

android:id="@+id/myListView"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>


TODO List 만들기

좌측 Android Application

더블클릭 후, 새로 나타날

항목을 클릭하여 Name: 에

App 이름 써주고 Browse…

클릭 후 지금 프로젝트 선택

그 후 Target 클릭!


TODO List 만들기

AVD 선택!

Common 에서 Run 체크!


TODO List 만들기


TODO List 만들기


이제 여러분 차례입니다!

안드로이드 개발자?


Q & A


  • Login