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

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


  • 155 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


20 th sirini blog

A n d r o i d

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


20 th sirini blog

Hello world!


20 th sirini blog

순서

안드로이드역사

시스템 구조

응용프로그램 구조

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


20 th sirini blog

안드로이드의 역사


20 th sirini blog

안드로이드의 역사

점점 커져가던 모바일 시장

M o b i l e


20 th sirini blog

안드로이드의 역사

모바일 기기까지도

광고 플랫폼으로

만들고 싶었던

Google

M o b i l e

Ads by Google


20 th sirini blog

안드로이드의 역사

그 들의 선택


20 th sirini blog

안드로이드의 역사

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

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


20 th sirini blog

안드로이드의 역사

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

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

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

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

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


20 th sirini blog

안드로이드의 역사

친구에서 적으로


20 th sirini blog

안드로이드의 역사

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

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


20 th sirini blog

안드로이드의 역사

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

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

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

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

개발하고 있다.

Android

Ads by Google


20 th sirini blog

시스템 구조


20 th sirini blog

시스템 구조

응용 프로그램들

응용프로그램 프레임워크

안드로이드 런타임

라이브러리들

리눅스커널


20 th sirini blog

시스템 구조

리눅스커널 구성

화면출력

블루투스

카메라

메모리

바인더

키패드

USB

WiFi

오디오

전원관리


20 th sirini blog

시스템 구조

라이브러리들

서패이스 매니저

미디어 코덱

SQLite

OpenGL ES

FreeType

웹킷 엔진

SGL

SSL

libc


20 th sirini blog

시스템 구조

안드로이드 런타임

핵심 라이브러리들

Dalvik가상 머신

?


20 th sirini blog

시스템 구조

응용프로그램 프레임워크

액티비티

매니저

윈도우

매니저

컨텐츠

제공자들

보기

시스템

알림

매니저

패키지

매니저

텔레포니

매니저

리소스

매니저

위치

매니저

센서

매니저


20 th sirini blog

시스템 구조

응용프로그램들

연락처

전화

브라우저

여러분의

어플


20 th sirini blog

시스템 구조

!

Dalvik

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

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

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

어떤 물고기 잡던 마을 이름


20 th sirini blog

시스템 구조

Dalvikvs Java

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

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

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


20 th sirini blog

시스템 구조

당신이 모바일 개발자라면

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

1. 느린 처리 속도

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

3. 저해상도의 작은 화면

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

5. 제한된 배터리 수명


20 th sirini blog

시스템 구조

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

지켜야 할 개발 습관들

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

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

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

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

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


20 th sirini blog

시스템 구조

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

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

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

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

안드로이드 시스템 전체를

움직이고 있다.


20 th sirini blog

응용 프로그램

구조


20 th sirini blog

응용프로그램 구조

배경 애플리케이션

전경 애플리케이션


20 th sirini blog

응용프로그램 구조

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

전경 애플리케이션


20 th sirini blog

응용프로그램 구조

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

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

인텐트

서비스

액티비티

컨텐츠제공자


20 th sirini blog

응용프로그램 구조

액티비티?

사용자 인터페이스 화면을

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

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

여러 단계를 다루기 위해서

한 개 이상의 액티비티를

정의한다.


20 th sirini blog

응용프로그램 구조

액티비티?

액티비티 예)

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

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

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

액티비티라 할 수 있다.

도움말

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

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

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


20 th sirini blog

응용프로그램 구조

액티비티

생명주기

시작

실행

정지

일시중지

소멸


20 th sirini blog

응용프로그램 구조

시작

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

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

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

onRestoreInstanceState(Bundle) :

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

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

실행


20 th sirini blog

응용프로그램 구조

실행

onSaveInstanceState(Bundle) :

인스턴스별 상태 저장

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

onResume()

일시중지


20 th sirini blog

응용프로그램 구조

onSaveInstanceState()

정지

일시중지

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

더 이상 보여지지 않음

onDestroy()

혹은 <프로세스 종료>

소멸


20 th sirini blog

응용프로그램 구조

실행

onResume()

onStart()

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

다시 디스플레이됨

정지


20 th sirini blog

응용프로그램 구조

인텐트?

전화를

걸도록 하다

어떤 액션이 수행되도록

특정 액티비티에 의향 선언

1

동영상을

재생하도록 하다

2

3

4

5

6

7

8

9

0

Call

Exit


20 th sirini blog

응용프로그램 구조

인텐트?

공개 인텐트:

집에 “전화” 를 “걸기”

사진을 “열람” 하기

“웹페이지” 를 “열기”

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

비공개 인텐트:

myApp “도움말” 열기

myApp기록을 “저장” 하기

myApp 저장된 “로그” 열기

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


20 th sirini blog

응용프로그램 구조

사용자와의 직접적인

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

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

되어 있어야 한다.

서비스?

전경 애플리케이션


20 th sirini blog

응용프로그램 구조

컨텐츠 제공자?

Content://app2/get/3

애플리케이션1

애플리케이션2

Content://app1/save/d3


20 th sirini blog

응용프로그램 구조

컨텐츠 제공자?

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

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

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

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


20 th sirini blog

응용프로그램 구조

컨텐츠 제공자?

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

content://authority/path/id

기본

접두사

특정 레코드 기본키

데이터

제공자명

제공자내

가상 디렉토리


20 th sirini blog

응용프로그램 구조

안드로이드의포용과 확장

둘 다

동일한 공개

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


20 th sirini blog

응용프로그램 구조

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

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

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

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

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

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

를 통해서 서로 소통한다.


20 th sirini blog

[부록] 예제

프로그램


20 th sirini blog

TODO List 만들기

순서대로

최신 버전을

설치하세요!

만들기 전 준비할 것?

Android SDK

JDK 6 (+JRE)

Eclipse v3.4


20 th sirini blog

TODO List 만들기

File > New > Other

Android

└ Android Project


20 th sirini blog

TODO List 만들기

Project name: 프로젝트명 입력

(예: exampleAndroid)

Build Target: 안드로이드 SDK

버전 선택

Application name: 어플 이름

(예: my first app)

Package name: 패키지명 입력

(예: com.example.myApp)

Create Activity: 처음 시작시 보일

액티비티클래스명 입력

(예: exampleMyAppClass)


20 th sirini blog

TODO List 만들기

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


20 th sirini blog

TODO List 만들기

Name : 가상머신 이름 입력

(예: myNewAVD)

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

(예: Android 2.1 – API Level 7)

SD Card Size : 메모리 크기 입력

(예: 512)


20 th sirini blog

TODO List 만들기

코드 작성!


20 th sirini blog

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;


20 th sirini blog

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);


20 th sirini blog

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;

}

});

}


20 th sirini blog

TODO List 만들기

레이아웃

main.xml파일

수정하기!


20 th sirini blog

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>


20 th sirini blog

TODO List 만들기

좌측 Android Application

더블클릭 후, 새로 나타날

항목을 클릭하여 Name: 에

App 이름 써주고 Browse…

클릭 후 지금 프로젝트 선택

그 후 Target 클릭!


20 th sirini blog

TODO List 만들기

AVD 선택!

Common 에서 Run 체크!


20 th sirini blog

TODO List 만들기


20 th sirini blog

TODO List 만들기


20 th sirini blog

이제 여러분 차례입니다!

안드로이드 개발자?


20 th sirini blog

Q & A


  • Login