610 likes | 853 Views
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. 안드로이드의 역사.
E N D
A n d r o i d 삼성소프트웨어멤버십 20th박희근 (http://sirini.net/blog)
순서 안드로이드역사 시스템 구조 응용프로그램 구조 [부록] 예제프로그램 소개
안드로이드의 역사 점점 커져가던 모바일 시장 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 만들기 코드 작성!