Download presentation
Presentation is loading. Please wait.
1
삼성소프트웨어멤버십 20 th 박희근 (http://sirini.net/blog) A n d r o i d
2
Hello world!
3
순서 1. 안드로이드 역사 2. 시스템 구조 3. 응용프로그램 구조 [ 부록 ] 예제프로그램 소개
4
안드로이드의 역사
5
M o b i l e 점점 커져가던 모바일 시장
6
안드로이드의 역사 M o b i l e 모바일 기기까지도 광고 플랫폼으로 만들고 싶었던 Google Ads by Google
7
안드로이드의 역사 그 들의 선택
8
안드로이드의 역사 “ 모바일 시장에서 지배력을 유지하려면, 우리가 직접 생태계를 창조해야 한다.”
9
안드로이드의 역사 2005 년 7 월, 팔로알토의 “ 안드로이드 ” 사 인수 2007 년 11 월 5 일, 오픈 핸드셋 얼라이언스 결성 2008 년 10 월 21 일, 안드로이드 오픈소스화 2009 년 2 월, 안드로이드 SDK 1.1 2010 년 1 월, 안드로이드 SDK 2.1
10
안드로이드의 역사 친구에서 적으로
11
안드로이드의 역사 구글 CEO 에릭 슈미트가 애플 이사회를 탈퇴한 후 넥서스 원은 공식적으로 멀티터치를 지원하기 시작
12
Android Ads by Google 안드로이드의 역사 오늘날 안드로이드 플랫폼은 아이폰 OS 에 대항할 강력한 후보 군으로 이름을 알리고 있으며 지금 이 순간에도 전세계 수 많은 개발자들이 안드로이드 플랫폼에서 애플리케이션을 개발하고 있다.
13
시스템 구조
14
응용 프로그램들 응용프로그램 프레임워크 리눅스 커널 안드로이드 런타임 라이브러리들
15
시스템 구조 키패드 USB WiFi 오디오 전원관리 화면출력 블루투스 카메라 메모리 바인더 리눅스 커널 구성
16
시스템 구조 OpenGL ES FreeType 웹킷 엔진 서패이스 매니저 미디어 코덱 SQLite 라이브러리들 SGL SSL libc
17
시스템 구조 핵심 라이브러리들 Dalvik 가상 머신 안드로이드 런타임 ? ?
18
시스템 구조 패키지 매니저 패키지 매니저 텔레포니 매니저 텔레포니 매니저 리소스 매니저 리소스 매니저 위치 매니저 위치 매니저 센서 매니저 센서 매니저 액티비티 매니저 액티비티 매니저 윈도우 매니저 윈도우 매니저 컨텐츠 제공자들 컨텐츠 제공자들 보기 시스템 보기 시스템 알림 매니저 알림 매니저 응용프로그램 프레임워크
19
시스템 구조 홈 홈 연락처 전화 브라우저 여러분의 어플 여러분의 어플 응용프로그램들
20
시스템 구조 Dalvik ! ! 구글의 댄 본스타인이 만든 가상 머신 낮은 메모리용으로 최적화된 자바 가상머신 달빅 어원 : 본스타인 조상이 살던 아이슬란드의 어떤 물고기 잡던 마을 이름
21
시스템 구조 Dalvik vs Java 1. 달빅 VM 은.dex 파일을 실행 ( 자바는.jar 파일 ) 2. 달빅에서 부동소수점 연산은 에뮬레이팅 방식으로 처리 ( 하드웨어 성능이 낮아 소프트웨어적으로 연산 >> 느림 ) 3. 달빅에선 finalization 은 지양하도록 권고됨 ( 대신 명시적으로 close() 나 terminate() 를 쓰도록 권고 )
22
시스템 구조 당신이 모바일 개발자라면 알아야 할 시스템상의 제약들 1. 느린 처리 속도 2. 제한된 RAM / 영구 저장공간 3. 저해상도의 작은 화면 4. 낮은 신뢰성과 비싼 데이터 전송 비용 (ex. 3G) 5. 제한된 배터리 수명
23
시스템 구조 당신이 훌륭한 모바일 개발자라면 지켜야 할 개발 습관들 (1) 효율적으로 동작하는 코드를 작성 할 것 (2) 제한된 저장 공간을 예측할 것 (3) 작은 화면, 핑거 터치를 위한 UX 를 고려할 것 (4) 느린 속도와 긴 지연 시간을 예측할 것 (5) 통신 비용을 최대한 줄일 수 있도록 해 줄 것
24
시스템 구조 안드로이드의 시스템 구조는 전체적으로 열악한 하드웨어 자원을 감안해 철저히 경량화 되어 있고 모듈화 되어 있다. 안정적인 리눅스 커널 위에서 맞춤형 자바 가상 머신인 달빅이 안드로이드 시스템 전체를 움직이고 있다.
25
응용 프로그램 구조
26
응용프로그램 구조 전경 애플리케이션 배경 애플리케이션
27
응용프로그램 구조 전경 애플리케이션 액티비티 매니 저에 의해 애 플리케이션 스 택에 기록됨
28
응용프로그램 구조 안드로이드 SDK 에 정의된 객체 중 모든 개발자가 알아야 할 4 가지 항목 ? 인텐트 서비스 컨텐츠 제공자 액티비티
29
응용프로그램 구조 액티비티 ? 사용자 인터페이스 화면을 “ 액티비티 (Activity)” 라 한다. 애플리케이션은 프로그램의 여러 단계를 다루기 위해서 한 개 이상의 액티비티를 정의한다.
30
응용프로그램 구조 액티비티 ? 액티비티 예 ) 애플리케이션 상에서 사용자가 “ 도움말 보기 ” 를 클릭 했을 시 띄워지는 팝업 도움말도 하나의 액티비티라 할 수 있다. 도움말 ----------------- 공격을 하시려 면 화면을 빠르 게 터치하세요 ! 방어는 좌 -> 우 슬라이딩으로 !
31
응용프로그램 구조 시작 실행 정지 일시중지 소멸 액티비티 생명주기 액티비티 생명주기
32
응용프로그램 구조 시작 실행 onCreate( Bundle ) : 액티비티 처음 시작시 호출 onStart() : 액티비티가 사용자에게 곧 보여짐 onResume() : 사용자와 상호작용 시작 가능 onRestoreInstanceState(Bundle) : 메서드가 미리 저장해 둔 상태로부터 액티비티가 다시 초기화 될 때 호출됨
33
응용프로그램 구조 실행 일시중지 onSaveInstanceState( Bundle ) : 인스턴스별 상태 저장 onPause() : 액티비티가 배경으로 전환 onResume()
34
응용프로그램 구조 정지 일시중지 소멸 onStop() : 액티비티가 사용자에게 더 이상 보여지지 않음 onDestroy() 혹은 onSaveInstanceState()
35
응용프로그램 구조 실행 정지 onResume() onStart() onRestart() : 액티비티가 정지 상태에서 다시 디스플레이됨
36
응용프로그램 구조 인텐트 ? 1 2 3 4 5 6 7 8 9 0 Call Exit 전화를 걸도록 하다 동영상을 재생하도록 하다 어떤 액션이 수행되도록 특정 액티비티에 의향 선언
37
응용프로그램 구조 인텐트 ? 공개 인텐트 : 집에 “ 전화 ” 를 “ 걸기 ” 사진을 “ 열람 ” 하기 “ 웹페이지 ” 를 “ 열기 ” 전체 영역에서 구체적 행동 을 설명하는 매커니즘 공개 인텐트 : 집에 “ 전화 ” 를 “ 걸기 ” 사진을 “ 열람 ” 하기 “ 웹페이지 ” 를 “ 열기 ” 전체 영역에서 구체적 행동 을 설명하는 매커니즘 비공개 인텐트 : myApp “ 도움말 ” 열기 myApp 기록을 “ 저장 ” 하기 myApp 저장된 “ 로그 ” 열기 특정 App 내에서만 공개된 각각의 행동별 매커니즘 비공개 인텐트 : myApp “ 도움말 ” 열기 myApp 기록을 “ 저장 ” 하기 myApp 저장된 “ 로그 ” 열기 특정 App 내에서만 공개된 각각의 행동별 매커니즘
38
응용프로그램 구조 서비스 ? 전경 애플리케이션 사용자와의 직접적인 상호작용 없이 배경에 서 실행되는 작업 예로, 음악을 재생하는 코드는 서비스로 되어 있어야 한다. 사용자와의 직접적인 상호작용 없이 배경에 서 실행되는 작업 예로, 음악을 재생하는 코드는 서비스로 되어 있어야 한다.
39
응용프로그램 구조 컨텐츠 제공자 ? 애플리케이션 1 애플리케이션 2 Content://app2/get/3 Content://app1/save/d3
40
응용프로그램 구조 컨텐츠 제공자 ? 한 애플리케이션이 작성한 파일은 다른 애플리케이션에 의해 읽기 / 쓰기 될 수 없다. 따라서 안드로이드 프로그램은 IPC (Inter-Process Communication) 방식 혹은 컨텐츠 제공자 (ContentProvider) 를 통해서 서로 소통한다.
41
응용프로그램 구조 컨텐츠 제공자 ? 기본 형식은 URI (Uniform Resource Identifier) 로 표현 content://authority/path/id 기본 접두사 기본 접두사 데이터 제공자명 데이터 제공자명 제공자내 가상 디렉토리 제공자내 가상 디렉토리 특정 레코 드 기본키
42
응용프로그램 구조 안드로이드의 포용과 확장 1 2 3 4 5 6 7 8 9 0 Call Exit Call 1 2 3 4 5 6 7 8 9 0 둘 다 동일한 공개 API 를 사용 원한다면, 기본 App 대신 만든 myApp 을 쓸 수 있다 ! 기본 전화걸기 App 내가 만든 myApp
43
응용프로그램 구조 안드로이드의 응용프로그램은 여러 액티비티를 기반으로 동작하게 되며, 각 액티비티들은 저마다 생명주기를 가진다. 애플리케이션은 각자가 관심을 가지고 있는 인텐트가 있으며 사용자와 직접 상호작용 하지 않는 서비스라는 개념도 있다. 또 각각의 애플리케이션들은 컨텐츠 제공자 를 통해서 서로 소통한다.
44
[ 부록 ] 예제 프로그램
45
TODO List 만들기 만들기 전 준비할 것 ? JDK 6 (+JRE)Eclipse v3.4 Android SDK 순서대로 최신 버전을 설치하세요 !
46
TODO List 만들기 File > New > Other Android └ Android Project
47
TODO List 만들기 Project name: 프로젝트명 입력 ( 예 : exampleAndroid) Build Target: 안드로이드 SDK 버전 선택 Application name: 어플 이름 ( 예 : my first app) Package name: 패키지명 입력 ( 예 : com.example.myApp) Create Activity: 처음 시작시 보일 액티비티 클래스명 입력 ( 예 : exampleMyAppClass)
48
TODO List 만들기 새 안드로이드 가상 머신 만들기
49
TODO List 만들기 Name : 가상머신 이름 입력 ( 예 : myNewAVD) Target : 안드로이드 SDK 호환 버전 선택 ( 예 : Android 2.1 – API Level 7) SD Card Size : 메모리 크기 입력 ( 예 : 512)
50
TODO List 만들기 코드 작성 !
51
TODO List 만들기 // import 해야 할 목록들 import java.util.ArrayList; import android.view.KeyEvent; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnKeyListener; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView;
52
TODO List 만들기 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 내가 만든 View 를 부풀린다. setContentView(R.layout.main); // UI 위젯의 레퍼런스를 얻어온다. ListView myListView = (ListView)findViewById(R.id.myListView); final EditText myEditText = (EditText)findViewById(R.id.myEditText); // 해야 할 일들을 담기 위한 배열 리스트 (array list) 를 생성한다. final ArrayList todoItems = new ArrayList (); // 위 배열을 리스트 뷰와 묶기 위한 배열 어댑터 (array adapter) 를 생성한다. final ArrayAdapter aa; aa = new ArrayAdapter (this, android.R.layout.simple_list_item_1, todoItems);
53
TODO List 만들기 // 위 배열 어댑터를 리스트 뷰와 묶는다. myListView.setAdapter(aa); // 사용자로 하여금 새로운 해야 할 일을 추가할 수 있도록 한다. myEditText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, 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; } }); }
54
TODO List 만들기 레이아웃 main.xml 파일 수정하기 ! 레이아웃 main.xml 파일 수정하기 !
55
TODO List 만들기 <LinearLayout xmlns: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" />
56
TODO List 만들기 좌측 Android Application 더블클릭 후, 새로 나타날 항목을 클릭하여 Name: 에 App 이름 써주고 Browse… 클릭 후 지금 프로젝트 선택 그 후 Target 클릭 !
57
TODO List 만들기 AVD 선택 ! Common 에서 Run 체크 !
58
TODO List 만들기
60
안드로이드 개발자 ? 이제 여러분 차례입니다 !
61
Q & A
Similar presentations