안드로이드 세미나
-
Upload
deborah-baldwin -
Category
Documents
-
view
90 -
download
5
description
Transcript of 안드로이드 세미나
1 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
안드로이드 세미나
2 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
2 안드로이드의 개괄적인 이해
C/C++C/C++ 언어를자바 언어에서
사용 가능토록 함
3 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
2 안드로이드의 개괄적인 이해
1 Applications
안드로이드에서는 E-mail 클라이언트 , SMS 프로그램 , 달력 , 지도 , 브라우저 , 전화번호부 ,
그리고 다른 것들을 포함하는 핵심 애플리케이션들이 탑재되어 있다 . 모든 애플리케이션은
JAVA 프로그래밍 언어로 작성된다 .
4 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
2 안드로이드의 개괄적인 이해
2 Applications Framework
안드로이드 애플리케이션 프레임워크는 Java 기반의 Framework 이며 , 대부분이
JNI(Java Native Interface) 통해 C/C++ 코드로 작성되어 있다 .
위와 같은 서비스들은 핵심 시스템 서비스를 담당하는 Core 시스템 서비스들과
하드웨어와의 인터페이스를 담당하는 하드웨어 서비스들로 구성된다 .
개발자들은 애플리케이션 Framework API 에 완벽하게 접근할 수 있다 .
5 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
2 안드로이드의 개괄적인 이해
3 Libraries
시스템 C 라이브러리 libc
임베디드 리눅스 기반의 디바이스를 위해서 구현된 표준 C 시스템 라이브러리의 구현물이며 Bionic 이라 한다 .
Bionic 은 임베디드에서 사용을 위해 최적화된 직접 구현된 Libc 이다 . 기존 Linux Libc 를 사용하지 않고 새로 만든
이유는 user-space 에서는 GPL(General Public License : GNU 일반 공중 사용 허가서로 소스 수정 시 꼭
소스를 공개하여야 한다라는 규약이 있다 .) 을 사용하지 않기 위한 라이센스 이유와 , 개별 프로세스마다 포함되어야
하는 영역이기 때문에 크기를 최소화하기 위해서이다 . 또한 제한적 CPU 파워하에서도 빠를 필요가 있기 때문이다 .
Function Library
웹 브라우저를 위한 WebKit, PacketVideo 의 OpenCore 플랫폼 기반의 미디어 프레임워크 , 가벼운 DB SQLite
안드로이드 시스템의 다양한 컴포넌트에 의해
사용되는 C/C++ 라이브러리 집합 .
이러한 라이브러리의 기능들은 안드로이드
애플리케이션 Framework 를 통해서 개발자들에게
제공된다 .
6 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
2 안드로이드의 개괄적인 이해
Native Server
Surface Flinger 는 2D/3D Surface 의 조합 및 다양한 애플리케이션에서 사용된 Surface 들을 Frame buffer
디바이스로의 렌더링을 제어함으로써 , 시스템 전역에 걸쳐서 Surface 의 구성을 가능하게 한다 .
Audio Flinger 는 모든 오디오 output 디바이스를 제어하는 것으로써 , 다양한 오디오 스트림을 PCM 오디오 output
경로로 처리한다 .
7 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
2 안드로이드의 개괄적인 이해
4 안드로이드 런타임 (RunTime)
Dalvik 가상머신은 안드로이드에서 자체적으로 만든 것으로
clean-room( 청정영역 ) 을 제공하는 가상 머신 이다 .
이것은 , 애플리케이션의 호환성과 실행 일관성을 제공하며 ,
최적화된 파일 포맷 (.dex) 과 Dalvik 바이트 코드로 실행한다 .
더불어 빌드 시점에서 Java.class / .jar 파일들은 .dex 파일로
변환된다 .
Dalvik 가상머신은 임베디드 환경을 위해 디자인 되었다 . Dalvik 은 디바이스 별로 다양한 가상머신
프로세스들을 지원하며 , 높은 수준으로 CPU 에 최적화된 바이트코드 인터프리터에 기반하여
실행 시 메모리를 매우 효율적으로 사용한다 .
Core 라이브러리는 Java 언어로 라이브러리들을 사용할 수 있도록 한다 .
Core 라이브러리들은 강력하지만 , 단순하고 익숙한 개발 플랫폼을 제공하는 Java 언어를 위한
Core API 들을 포함하고 있다 . 여기에는 Data structure, Utility, File Access,
Network Access, Graphic 등이 포함되어 있다 .
8 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
2 안드로이드의 개괄적인 이해
5 리눅스 커널
안드로이드는 리눅스 커널을 기반하고 있으나 , 리눅스는 아니다 . X-Window 와 같은 내장 윈도우
시스템을 포함하지 않으며 , glibc 를 지원하지 않는다 . 표준 리눅스 유틸리티 전체를 포함하지
않는다 .
안드로이드 리눅스 커널 버전 2.6.23, 2.6.24, 2.6.25, 2.6.27 을 사용해 왔으며 안드로이드 지원을
위해 리눅스 커널 확장을 위한 패치를 포함한다 .
안드로이드에서 리눅스를 사용하는 이유는 메모리 및 프로세스 관리 , Permission 기반의 보안 모델 ,
검증된 드라이버 모델 , 공유 라이브러리 지원 , 오픈 소스 기반 등의 장점 때문이다 .
안드로이드 확장 리눅스 커널 영역은 , Alarm, Ashmem, Binder, Power Management,
Low Memory Killer, Kernel Debugger, Logger 이다 .
9 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
2 안드로이드의 개괄적인 이해
6. 기타
10 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
클래스 파일
바이너리 XML& 리소스 파일(.xml, .arsc)
DX 유틸리티
Dalvik 파일(.dex)
배포 유틸리티(adb)
에뮬레이터혹은
디바이스
Java 소스(.java)
패키징 도구(aapt)
리소스 파일(png,mp3…)
XML 파일(.xml)
1. 안드로이드 개발 프로세스
java 컴파일러(javac)
An
dro
id P
ack
ag
e F
ile F
orm
at
(.ap
k) 압
축파
일이
다.
11 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
2. Application Data
Application File Application Data Folder
12 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
3. 안드로이드 구동
ARM basedYour Target Board
Android bootloaderUSB loader
Load Linux
Start kernel- /init/main.c
Initialization process/etc/init.rc
Start Android Service
Consoleadbdservice managermountddebuggerdzygotemediaserverinstalldflash_recovery
Low level 안드로이드 구동 High level 안드로이드 구동
13 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
!!! 여기서 잠깐 안드로이드 프로그램 ( 팩키지 )
사용자 ID : root 모두 접근 가능
리눅스 환경 안드로이드
A 프로그램 설치
사용자 ID : app??
Group : app??
자동으로 user 등록
저장 공간
B 프로그램 설치
사용자 ID : app??
Group : app??
자동으로 user 등록
저장 공간
A B 서로의 공간 Write 접근 불허
사용자 ID : AGroup : C
A 만 접근 가능 공간 생성
A 권한으로 파일 생성 및실행 수정 삭제 종료 가능
사용자 ID : BGroup : C
B 만 접근 가능 공간 생성
B 권한으로 파일 생성 및실행 수정 삭제 종료 가능
같은 group허용 가능
14 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
!!! 여기서 잠깐
Process
PID : 1
PPID : 0
최초 프로세스
Process
PID : 2
PPID : 1새로운
process실행
Process
PID : 4
PPID : 2새로운
process실행
Process
PID : 3
PPID : 1새로운
process실행
Process
PID : 5
PPID : 3새로운
process실행
15 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
1
2
3
4
5
16 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
zygote 프로세스
어플리케이션에서필요로 하는
기본 라이브러리모두 로딩된
상태
사용자 메모장 실행
메모장프로그램fork 에 의해
복사본 proc 생성
브라우져프로그램
fork 에 의해
복사본 proc 생성브라우져 관련Dex 메모리
로딩
메모장 관련Dex 메모리
로딩
사용자 브라우져 실행
17 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
테스트 사항 : procmem 확인과 ps 확인
18 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
19 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
!!! 여기서 잠깐
프로그램
실행CPU
메모리 상에서 처리
프로세스
동작메인 메모리
메모리에 로딩
인스턴스
객체 생성
C : malloc()
C++ : new
안드로이드와 관련한 프로그램에서 인스턴스와 프로세스 그리고 쓰래드에 대해서
20 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
프로세스
프로세스는 반드시 하나 이상의 쓰레드가 있습니다 .
즉 프로세스는 혼자서는 아무런 일도 할 수 없습니다 .
예를 들어 윈도우 시스템에서는 csrss.exe 프로세스가 순회하면서 쓰레드를 관리하고 ,
커널에게 쓰레드의 실행을 알립니다 .
프로세스
쓰래드
처리…
쓰래드
처리…
…
처리…
21 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
프로세스 A
실행파일을구성 명령어Code 영역
지역 변수전달 인자
프로그램 할당
Static 변수전역 변수
Stack 영역
Heap 영역
Data 영역
Process 메모리 구조
쓰래드 A
쓰래드 B
프로세스 B
실행파일을구성 명령어Code 영역
지역 변수전달 인자
프로그램 할당
Static 변수전역 변수
Stack 영역
Heap 영역
Data 영역
Process 메모리 구조
쓰래드 A
메모리 공유
쓰래드 B
메모리 공유
OAIDL
서로 메모리 접근
서로 메모리 접근
X직접
메모리 공유
메모리 공유
22 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
3 안드로이드의 전반 적인 이해
4. 어플리케이션의 구성
23 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
1 Activities
; 애플리케이션의 하나의 스크린 또는 화면을 일컫는 말이다 .
UI 컴포넌트를 화면에 표시하고 , 시스템이나 사용자의 반응을 처리할 수 있다 .
윈도우의 창의 개념과 유사하다 .
윈도우window
액티비티Activities
뷰 그룹view group
뷰view
위젯widget
사용자 반응 처리
UI 요소 배치
1.1 Activities 란 ?
24 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
ListView 그룹view group
리스트 내용
어뎁터Adapters
List View
박성근 5
박성근 4
박성근 3
박성근 2
박성근 1
ListAdapter
박성근 5
박성근 4
박성근 3
박성근 2
박성근 1
Cursor
데이터 처리용의
25 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; Activity 는 라이프사이클을 가진다 .
Activitystarts
OnCreate()
Activity isshut down
OnStart()
OnResume()
Activity isRunning
OnPause()
OnStop()
OnDestroy()
Process iskilled
다른 APP 실행 시메모리가 부족할 경우
당신의 액티비티가foreground 로돌아왔다 .
OnRestart()
당신의 액티비티가foreground 로돌아왔다 .
당신의 액티비티가 더 이상 보이지 않는다 .
새로운 액티비티가 실행되었다
User navigates backto your activity
1.2 Activities 라이프 사이클
26 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; Activity 와 관련이 깊은 프로세스 라이프 사이클에 대해서 알아 보자 .
foreground process
사용자가 현재 조작중인 최상위 화면의 Activity 를 말한다 . 가장 중요한 프로세스이므로
새로운 App 가 실행될 때 메모리가 부족하다면 제일 마지막에 제거되는 프로세스 이다 .
foreground activity
1.3 프로세스 라이프 사이클
27 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
visible process
사용자 화면에 보여지지만 foreground 가 아닌 것을 말한다 .
예를 들어 foreground 대화상자의 뒤에 있는 activity 를 생각하면 된다 .
visible process 는 foreground process 다음으로 중요하다 .
visible activity
대화 상자
28 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
background process
사용자에게 보여지지 않는 액티비티 이다 . 그러므로 더 이상 중요하지 않으며
시스템은 foreground 나 visible 프로세스가 메모리를 요구하면 background activity 를
안전하게 제거할 수 있다 .
background activity
29 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
empty process
이 프로세스는 아래의 라이프사이클에서 빨강색 부분처럼 Activity shutdown 된 Activity 이다 .
하지만 이 프로세스는 어떤 활성화된 App 컴포넌트도 가지고 있지 않지만 , 차후 다시 이 APP 가
실행될 때를 대비해서 캐쉬의 용도로 메모리를 점유하고 있다 . (startup 시간 단축 )
이런 프로세스는 시스템적으로 언제 사라질지 모른다 .
empty activity
30 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
service process
이 프로세스는 특정한 서비스를 위하여 존재하며 UI 가 없다 .
예를 들어 백그라운드에서 SMS 가 수신되면 사용자는 모르게 수신된 SMS 를 데이터베이스에
저장한다거나 스팸 확인을 하는 등의 처리를 위해 존재하는 경우가 많다 .
이 프로세스는 foreground, visible process 를 보유하기에 충분한 메모리가 존재 하는 한
제거되지 않고 유지 된다 .
service process
31 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; 앞에서 프로세스의 라이프 사이클을 설명하였다 .
그 내용 중 Activity 와 프로세스가 동일한 것이 아니냐는 착각에 빠진다 .
한 프로세스는 여러 개의 Activity 를 가질 있고 , 또한 한 프로세스에는 foreground activity,
visible activity, background activity 등 모두 가질 수 있다 .
A 프로세스
service process
대화 상자foreground activity
visible activity
background activity
32 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; 프로세스의 우선순위 ( 우선순위가 낮을 수록 메모리 부족 시 우선 제거 대상이 된다 .)
A 프로세스 B 프로세스 C 프로세스
foreground activity
포함
visible activity
포함
backup activity
포함> >
33 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
1.4 용어가 어려운 Task 에 관해서
Home
Task 1
Task 2
Home
Activity1
1활성화
Activity2
2활성화
Activity3
3활성화
Activity4
4활성화
Activity5
5활성화
Activity6
6활성화
Home
KeyBack Key
!!! Activity 의 스택이라고 볼 수 있다 .
34 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; 한 프로세스는 기본적으로 하나의 Thread 를 가지고 있고 , 추가적으로 Thread 를 생성 가능 하다 .
1.5 Thread 에 대해서
Process
1
2
3
4
E
E
35 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; 안드로이드 애플리케이션의 가장 기본적인 구성 단위는 Activity 라는 클래스 이다 .
이 Activity 는 한 화면을 나타내지만 그 자체로는 아무 것도 보여줄 수 없고 , Activity 에
View 와 ViewGroup 클래스를 사용해야만 비로소 화면에 무엇인가를 표시할 수 있다 .
뷰 그룹view group
뷰view
위젯widget
View 클래스는 화면에서 직사각형 형태의
레이아웃과 각종 정보를 저장하는 자료
구조이다 . 화면의 크기 조절 , 레이아웃 구성 ,
그리기 , 포커스 변화 , 스크롤링과 , 키 처리
등을 위해 사용된다 .
view 클래스는 위젯의 base 클래스이기도
하다 .( 위젯 : 컨트롤과 유사 )
1.6 view 와 view group 에 대해서
36 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
view group
view group view view
view view view
안드로이드는 트리 구조의 사용자 인터페이스를 제공한다 .
LinearLayout
RelativeLayout view view
view view view
화면에
그리는
순서
view group 은 아래와 같이 구성된다 .
37 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
0,0기준좌표
layout_width
layout_height
margin
Hello Hello
WRAP_CONTENT FILL_PARENT
컨텐츠를 표시한는 데 충분한 크기로 부모 객체와의 패딩 ( 여백 ) 을 제외한
나머지 공간을 차지
문자열을 표시하는 라벨 view 문자열을 표시하는 라벨 view
layout viewgroup
padding
1.6.1 Layout 의 좌표와 용어
38 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
가장 단순한 레이아웃 객체인데 , 단순히 비어있는 공간이라고 생각하면 된다 .
FrameLayout 은 모든 객체들이 화면 왼쪽 위를 기준으로 그린다 .
즉 사용자가 각 객체의 절대적 위치를 설정할 수 없다는 의미이다 .
원하는 객체를 여러 개를 그린다면 화면좌표 0,0 을 기준으로 모두 겹친다 .
viewgroup : FrameLayout0,0기준좌표
view
view
view 와 viewgroup 과의 배치 관계
view
1.6.2 FrameLayout
39 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
모든 하위 구성 요소를 수직 또는 수평 형태 중 하나로 정렬하여 그리는 방식이다 .
viewgroup : LinearLayout
view
margin 설정 : 5px
5px
view
view
5px
gravity 설정 : 좌우정렬
view( 가중치 0)
view( 가중치 1)
view( 가중치 0)
weight 설정 : 가중치 값
1.6.3 LinearLayout
view
view
view
40 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
행과 열이라는 개념이 있어서 테이블의 행과 열을 기준으로 하위 구성 요소들을
배치한다 . 각 셀은 View 오브젝트로 구성되며 각 View 의 화면상 절대적 위치는
테이블 구조에 따라 상대적으로 결정된다 .
viewgroup : TableLayout
view view
view view
앞에서 처럼 (gravity 설정 : 좌우정렬 ), (weight 설정 : 가중치 값 ) 및 padding 처리 가능
view
view
view view
1.6.4 TableLayout
41 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
정확한 x,y 좌표를 제시해야 하위 구성 요소들을 화면에 표시 할 수 있다 .
서로 다른 단말기 환경에서는 프로그래머가 예상한대로 그려지지 않을 수 있으므로
본 Layout 은 가급적이면 피하는 것이 좋다 .
viewgroup : AbsoluteLayot0,0기준좌표
view1
view2
view3
view 와 viewgroup 과의 배치 관계
(view1 x=10,y=10 경우 )
1.6.5 AbsoluteLayout
10
10
42 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
하위 구성 요소들이 다른 구성 요소의 상대적인 위치에 따라 그려진다 .
예를 들어 두 개의 객체가 있을 때 하나를 다른 객체의 아래에 그리거나 위에 그리는 등의
설정이 가능하다 .
1.6.6 RelativeLayout
TextView
width : Fill Parentheight : wrap contenttext : Type here
2
Button
width : wrap contentheight : wrap contenttext : “cancel”
5
ID : label
EditText
ID : entrywidth : Fill Parentheight : wrap content
3
below : “label”
RelativeLayout
width : Fill Parentheight : wrap contentbackground : bluepadding : 10
1
Button4
ID : okwidth : wrap contentheight : wrap contentmarginLeft:10text : “Ok”
below : “entry”alignParentRight:true
toLeft : “ok”alignTop : “ok”
43 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
44 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
Gallery ViewGroup Class
이미지를 수평으로 스크롤 하면서 보여준다 .
GridView ViewGroup Class
눈금 구조를 보여준다 .
1.6.7 기타 view group
45 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
ScrollView ViewGroup Class
수직으로 구성 요소의 열을 스크롤링 하게 된다 .
TabHost ViewGroup Class
클릭에 반응하는 탭 선택 목록을 제공하며 ,
탭을 클릭하면 애플리케이션이 바뀐다 .
46 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
Spinner ViewGroup Class
한 줄짜리 텍스트 박스 안에서 목록의 아이템을 한 번에 하나씩 보여준다 .
SurfaceView ViewGroup Class
그리기 전용인 표면에 직접 접근할 수 있도록 한다 .
SurfaceView 는 위젯을 이용하는 프로그래밍
보다 점과 라인을 직접 그리는 방식을 사용한다 .
47 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
ViewFlipper ViewGroup Class
한번에 한 개의 아이템을 보여주는 목록이다 .
이것은 슬라이드 쇼처럼 시간 주기로 아이템을
바꾸도록 설정할 수 있다 .
ViewSwitcher ViewGroup Class
ViewFlipper 와 유사하다 .
48 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
ListView ViewGroup Class
스크롤링 되는 하나의 컬럼 리스트를 보여 준다 .
49 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
2. Service
Service 는 UI 와 상관 없이 오랫동안 존재하면서 실행되는 코드이다 .
예를 들면 재생 목록에서 노래를 재생하는 미디어 플레이어 같은 것을 Service
라고 할 수 있다 . 미디어 플레이어 APP 는 사용자가 곡을 선택하고 재생을
시작하는 하나 이상의 Activity 를 가지고 있지만 , Activity 가 음악을 재생하는
것이 아니다 .
Activity1
Activity Activity
Activity2
Service
동영상의 재생을 시작한다 .재생
Home
or Back
50 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
2.1 Service 의 생명주기
2.1.1 StartService
안드로이드의 기본 구조
startService() 로부터서비스가 시작된다 .
OnCreate()
Service isshut down
OnStart()
service 실행 중
OnDestroy()
service 가 종료 되었다 .(콜백 없음 )
특정 백그라운드에서 동작할 Service 를 개시한다 .
예를 들어 서버 - 클라이언트간의 관계에서 서버 측에서
서비스 할 수 있는 프로그램을 가동하는 것과 같다 .
51 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
2.1.2 BindService
bindService() 로부터서비스가 시작된다 .
OnCreate()
Service isshut down
OnBind()
OnDestroy()
Client interacts with the service
OnUnbind()
OnRebind()
StartService 에서 가동된 Service 에
bind 하여 특정 서비스를 이용하는 것을
말한다 .
52 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
2.1.3 StartService 와 BindService 의 관계
startService() 로부터서비스가 시작된다 .
1
동영상을 재생하는
서비스를 가동
2
Activity
3
Play 4
Pause 5
Stop 6
stopService7
main thread 1
Process
동영상을 재생을
직접 처리도 가능
하나의 Process 에서 돌아 갈 때
53 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
54 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
startService() 로부터서비스가 시작된다 .
1
동영상을 재생하는
서비스를 가동
2
Activity
3
bindService() 로부터서비스가 시작된다 .
Bind
4
Play 5
Pause 6
Stop 7
Unbind 8
stopService9
하나의 Process 에서 확장 Thread 를 생성하여 돌아 갈 때
main thread 1 thread 2
Process
55 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
56 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
startService() 로부터서비스가 시작된다 .
1
동영상을 재생하는
서비스를 가동
2
Activity
3
bindService() 로부터서비스가 시작된다 .
Bind
4
Play 5
Pause 6
Stop 7
Unbind 8
stopService9A
IDL
두 개의 Process 에서 돌아 갈 때
Process 1(main thread) Process 2(main thread)
57 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
58 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
3. Broadcast Receivers
핸드폰으로 전화가 걸려오거나 , 데이터 네트워크 접속이 활성화 되었을 경우와
같이 외부에서 이벤트가 발생한 시점에 어떤 처리를 하기 위해 사용된다 .
SMS_RECEIVED
Components
Intent
Broadcast
SMS_RECEIVED
Components
Receiver
59 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
4. Content Providers
어떤 APP 데이터를 다른 APP 에서 공유할 필요가 있을 때 유용하게 사용한다 .
이 클래스를 이용하면 다른 APP 에서 데이터를 저장하거나 가지고 올 수 있다 .
Components A
Content Resolver
Components
; 데이터를 쓰거나 읽거나 수정할 수
있는 API 를 제공한다 .
Content Providers
; Content Providers 의 데이터
구조는 SQLite 혹은 파일 등
원하는 구조로 설계할 수 있다 .
Preferences
Files
SQLite(DB)
Network
InterfaceContent Provider Class
Content Providers 는 Intents 를 통해서 구동
되지 않는다 . Resolver 에 의해서 활성 / 비활성
요청
Components B
Content Resolver
60 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; 안드로이드 APP 마다 자신만의 데이터 영역과 ID 를 가진다 .
다른 APP 에서 데이터를 접근하기 위해서는 content provider 를 통해서 가능하다 .
content providers 내부의 Data Storage 종류에 대해서 살펴 보자 .
; APP 설정 메뉴 즉 config 파일 등으로 대부분 이용된다 .
XML 로 저장되는 형식 ( 저장 방식 : name,value)
전체로 공유 파일 하나 파일명을 지정하지 않음 ( 자신이 가진 패키지 명으로 만들어짐 )
컴포넌트 별로 사용 파일명을 지정해서 생성 ()
SharedPreferences prefs = getPreferences(0);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("prefs_name1", "prefs_value1");
editor.commit();
4.1 Data Storage
4.1.1 Preferences
Key name
Key value
61 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; 파일 형태의 read/write 가 가능하다 .
InputStream is = getAssets().open("sample.txt");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);FileOutputStream fos =
openFileOutput("sample.txt", Activity.MODE_WORLD_WRITEABLE);
fos.write(buffer);
fos.close();
is.close();
4.1.2 Files
file 접근
62 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; SQLite 를 이용하여 데이터베이스를 구성할 수 있다 .
( adb shell sqlite3 /data/data/ )
4.1.3 Database
SQLite3 Query
; TCP/IP 를 이용하여 데이터를 가지고 올 수 있다 .
상세한 사용법은 셈플 코드 참조
4.1.4 네트워크
소켓 통신
63 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
; Content Providers 를 서버로 본다면 Resolver 는 클라이언트에 해당한다 .
Content Providers 를 접근하기 위해 알아야 될 사항
1) URI
2) 받고자 하는 데이터 필드명를 알아야 한다 .
3) 필드의 타입을 알아야 한다 .
예 ) URI : "content://org.kandroid.sample.Provider/namecard"
사용법은 DB 사용법과 유사하다 .
4.2 Content Resolver
content://com.example.transportationprovider/trains/122
A B C D
기본 Prefix 권한 파트 Path ID
64 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
Components A
Content Resolver
content://org.kandroid.sample.Provider/namecard
Components A
Content providers
URI
content://org.kandroid.s…
예
결과 전달0101234568
박성근 전화번호를 알려주세요
숫자로 알려주세요 .
65 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
ComponentsComponents
Context.startActivity()Activity.startActivityForResult()
Context.startService()Context.bindService()
Context.sendBroadcast()Context.sendOrderedBroadcast()Context.sendStickyBroadcast()
Activity
Service
Broadcast
!!! 전달 대상 APP 구성 항목 3 가지
Activity
Service
Broadcast
or
or
(Intents)
담아서 전달
; 인텐트를 통해서 컴포넌트 활성화
5. Intents
어떤 A 라는 컴포넌트가 B 컴포넌트를 실행 시키기 위해서 메시지를 전달하는 오브젝트이다 .
66 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
5.1 Intent 의 구성요소 6 가지
구성요소 설명
Component Name 인텐트 전달 대상의 컴포넌트 명
Action 동작 관련 ( 예 : SMS 를 받았다 .)
Category 대상의 종류 ( 예 : SMS)
Data 보통 데이터 위치와 타입을 설정 ( 예 : 전화번호 )
Extra 기타 정보 전달을 위함 ( 예 : 전화번호 관련 정보 )
Flag 다양한 플래그
67 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
Components
intent 작성내용 : … to class A
1
intentTo Class A
2
Components
Class A
활성화5
안드로이드 System
ActivityManager 를통해 패키지 메니져에서 해당 class 이름을 찾는다 .
<class list>…class A…
3
manifest 기준으로
4
5.2 Explicit Method : Call Class
68 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
5.3 Implicit Method : IntentFilter
Intent
예 )case 1)
Category; 전화가Action; 걸려왔다 .Data; 전화번호 정보
case 2)Category; 카메라가Action; 활성화 되었다 .
Components
intent 작성
Components
전화번호 저장하는 서비스
Components
전화를 수신 받는 서비스
Components
카메라를 preview 하는 서비스
69 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
intent filter 기준
- action
- data
- category
Components
intent 작성내용 : … to 무기명
1
intentTo 무기명
or action
or data
or category
2
5
해당 조건 성립
Components
Class Name A
5
해당 조건 성립
Components
Class Name B
해당 조건 성립
안함
Components
Class Name C
안드로이드 System
manifest 기준으로3
ActivityManager 를통해 패키지 메니져에서 해당 class 이름을 찾는다 .
action 필터
data 필터
category 필터
class list
action 필터
data 필터
category 필터
class list
action 필터
data 필터
category 필터
class A
4
컴포넌트를
찾는다 .
인텐트 필드 테스트
70 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
1) Component Name (explicit 인텐트이다 .)
Intent
Component Name
Action
Data
Category
Extra
Flag
Components
intent 작성
setCompenent()
setClass()
setClassName()
getComponent()
컴포넌트 이름 설정
컴포넌트 이름 얻기
5.4 Intent 구성하기
71 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
2) Action (implicit 인텐트이다 .)
Intent
Component Name
Action
Data
Category
Extra
Flag
Components
intent 작성
ACTION_CALL 타겟 컴포넌트
intent전달
;; Initiate a phone call.
단 데이터 항목도 추가로
작성해 주어야 한다 .
ACTION_EDIT;; 에디팅 가능한 컴포넌트
Activity
72 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
Intent
Component Name
Action
Data
Category
Extra
Flag
Components
intent 작성
ACTION_MAIN 타겟 컴포넌트
intent전달
;; Task 의 초기 activity 로
(i/o 이 없다 )
Activity
ACTION_SYNC
;; 모바일 장치의 데이터와
서버상 데이터 동기 시
73 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
Intent
Component Name
Action
Data
Category
Extra
Flag
Components
intent 작성
타겟 컴포넌트
intent전달
broadcast receiver
ACTION_BATTERY_LOW
;; 베터리 부족 시 경고
74 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
대상 상수 값 (string) 설 명
ACTION_AIRPLANE_MODE_CHANGED
ACTION_ALL_APPS
Activity ACTION_ANSWER
Activity ACTION_ATTACH_DATA
Broadcast ACTION_BATTERY_CHANGED
ACTION_BATTERY_LOW
Broadcast ACTION_BOOT_COMPLETED
ACTION_BUG_REPORT
Activity ACTION_CALL
ACTION_CALL_BUTTON
ACTION_CAMERA_BUTTON
Activity ACTION_CHOOSER
ACTION_CLOSE_SYSTEM_DIALOGS
ACTION_CONFIGURATION_CHANGED
ACTION_CREATE_SHORTCUT
75 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
대상 상수 값 (string) 설 명
ACTION_DATE_CHANGED
ACTION_DEFAULT
Activity ACTION_DELETE
ACTION_DEVICE_STORAGE_LOW
ACTION_DEVICE_STORAGE_OK
Activity ACTION_DIAL
Activity ACTION_EDIT
Activity ACTION_FACTORY_TEST
Activity ACTION_GET_CONTENT
ACTION_GTALK_SERVICE_CONNECTED
ACTION_GTALK_SERVICE_DISCONNECTED
ACTION_HEADSET_PLUG
ACTION_INPUT_METHOD_CHANGED
Activity ACTION_INSERT
ACTION_INSERT_OR_EDIT
76 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
대상 상수 값 (string) 설 명Activity ACTION_MAIN Task 에서 최초 Activity 활성화 하는 경우
ACTION_MANAGE_PACKAGE_STORAGE
ACTION_MEDIA_BAD_REMOVAL
ACTION_MEDIA_BUTTON
ACTION_MEDIA_CHECKING
ACTION_MEDIA_EJECT
ACTION_MEDIA_MOUNTED
ACTION_MEDIA_NOFS
ACTION_MEDIA_REMOVED
ACTION_MEDIA_SCANNER_FINISHED
ACTION_MEDIA_SCANNER_SCAN_FILE
ACTION_MEDIA_SCANNER_STARTED
ACTION_MEDIA_SHARED
ACTION_MEDIA_UNMOUNTABLE
ACTION_MEDIA_UNMOUNTED
77 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
대상 상수 값 (string) 설 명
ACTION_NEW_OUTGOING_CALL
Broadcast ACTION_PACKAGE_ADDED
Broadcast ACTION_PACKAGE_CHANGED
Broadcast ACTION_PACKAGE_DATA_CLEARED
ACTION_PACKAGE_INSTALL
Broadcast ACTION_PACKAGE_REMOVED
ACTION_PACKAGE_REPLACED
Broadcast ACTION_PACKAGE_RESTARTED
Activity ACTION_PICK
Activity ACTION_PICK_ACTIVITY
ACTION_PROVIDER_CHANGED
ACTION_REBOOT
Activity ACTION_RUN
ACTION_SCREEN_OFF
ACTION_SCREEN_ON
78 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
대상 상수 값 (string) 설 명Activity ACTION_SEARCH
ACTION_SEARCH_LONG_PRESS
Activity ACTION_SEND
Activity ACTION_SENDTO
ACTION_SET_WALLPAPER
Activity ACTION_SYNC
ACTION_SYSTEM_TUTORIAL
Broadcast ACTION_TIMEZONE_CHANGED
Broadcast ACTION_TIME_CHANGED
Broadcast ACTION_TIME_TICK
Broadcast ACTION_UID_REMOVED
ACTION_UMS_CONNECTED
ACTION_UMS_DISCONNECTED
ACTION_USER_PRESENT
Activity ACTION_VIEW
79 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
대상 상수 값 (string) 설 명
ACTION_VOICE_COMMAND
ACTION_WALLPAPER_CHANGED
Activity ACTION_WEB_SEARCH
80 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
3) Category (implicit 인텐트이다 .)
Intent
Component Name
Action
Data
Category
Extra
Flag
Components
intent 작성
타겟 컴포넌트
intent전달
Activity
CATEGORY_LAUNCHER
;; LaunCher 가 되는
것들을 동작 시켜라 .
CATEGORY_DEFAULT (implicit intents 는 무조건 DEFAULT 가 포함된다 .)
; 자신이 두 개의 카타고리를 만족해야 할 때 DEFAULT 는 무엇이든 상관 없다 .
81 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
상수 값 (string) 설 명
CATEGORY_ALTERNATIVE
CATEGORY_BROWSABLE
CATEGORY_DEFAULT
CATEGORY_DEVELOPMENT_PREFERENCE
CATEGORY_EMBED
CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST
CATEGORY_HOME
CATEGORY_INFO
CATEGORY_LAUNCHER
CATEGORY_MONKEY
CATEGORY_OPENABLE
CATEGORY_PREFERENCE
CATEGORY_SAMPLE_CODE
CATEGORY_SELECTED_ALTERNATIVE
CATEGORY_TAB
82 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
상수 값 (string) 설 명
CATEGORY_TEST
CATEGORY_UNIT_TEST
83 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
URI 예 ) http://groups.google.com/group/clickin-2-da-beaat/files
setData(URI)
setType(MIME)
setDataAndType(URI 와 MIME)
MIME 예 ) text/html, image/jpeg ( … / … )
4) Data (독자적으로 어떤 컴포넌트를 활성화 할 수는 없다 .)
84 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
intent 매칭을 위해 사용하지 않는다 .
단지 동작된 컴포넌트에게 기타 정보를 전달하기 위한 항목이다 .
putExtras(); / getExtras();
Flag 예 : FLAG_ACTIVITY_NEW_TASK 기존 Task 에 Activity 가 추가 되지 않고
새로운 Task 를 생성한 후 추가 된다 .
5) Extra / Flag (독자적으로 어떤 컴포넌트를 활성화 할 수는 없다 .)
85 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
상수 값 (string) 설 명
EXTRA_ALARM_COUNT
EXTRA_BCC
EXTRA_CC
EXTRA_DATA_REMOVED
EXTRA_DONT_KILL_APP
EXTRA_EMAIL
EXTRA_INTENT
EXTRA_KEY_EVENT
EXTRA_PHONE_NUMBER
EXTRA_REPLACING
EXTRA_SHORTCUT_ICON
EXTRA_SHORTCUT_ICON_RESOURCE
EXTRA_SHORTCUT_INTENT
EXTRA_SHORTCUT_NAME
EXTRA_STREAM
86 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
상수 값 (string) 설 명
EXTRA_SUBJECT
EXTRA_TEMPLATE
EXTRA_TEXT
EXTRA_TITLE
EXTRA_UID
87 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
상수 값 (string) 설 명
FLAG_ACTIVITY_BROUGHT_TO_FRONT
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
FLAG_ACTIVITY_FORWARD_RESULT
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
FLAG_ACTIVITY_MULTIPLE_TASK
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_NO_HISTORY
FLAG_ACTIVITY_NO_USER_ACTION
FLAG_ACTIVITY_PREVIOUS_IS_TOP
FLAG_ACTIVITY_REORDER_TO_FRONT
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_SINGLE_TOP
FLAG_DEBUG_LOG_RESOLUTION
88 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 안드로이드의 기본 구조
상수 값 (string) 설 명
FLAG_FROM_BACKGROUND
FLAG_GRANT_READ_URI_PERMISSION
FLAG_GRANT_WRITE_URI_PERMISSION
FLAG_RECEIVER_REGISTERED_ONLY
89 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
Intents 항목 Object측 Filter 측Action 설정치 않음 MAIN
Category LAUNCHER LAUNCHER
호출 여부 전달 불가
Intents 항목 Object측 Filter 측Action MAIN 설정치 않음
Category LAUNCHER LAUNCHER
호출 여부 전달 불가
Intents 항목 Object측 Filter 측Action 설정치 않음 설정치 않음
Category LAUNCHER LAUNCHER
호출 여부 전달 불가
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category 설정치 않음 설정치 않음호출 여부 전달 불가
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category LAUNCHER LAUNCHER
호출 여부 전달 가능
위의 경우와 같이 intents 작성 측과 수신 측 모두 Action 항목을 설정하지 않으면 해당
컴포넌트를 활성화 할 수 없다 . 또한 모두 intents 가 모두 존재한다고 해도 category 를 설정하지
않으면 해당 컴포넌트를 활성화 할 수 없다 .
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category 설정치 않음 DEFAULT
호출 여부 전달 가능
4 안드로이드의 기본 구조
5.5 인텐트 항목간 연관 관계 : Action 설정 관련
90 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category 설정치 않음 DEFAULT
호출 여부 전달 가능
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category 사용자정의 A 사용자정의 A
호출 여부 전달 불가
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category BROWSABLE BROWSABLE
호출 여부 전달 불가
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category설정하지 않음 DEFAULT
사용자정의 A 사용자정의 A
호출 여부 전달 가능
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category 설정치 않음 설정치 않음호출 여부 전달 불가
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category설정하지 않음 DEFAULT
BROWSABLE BROWSABLE
호출 여부 전달 가능
Object측에서 Category 를 설정하지 않으면 자동으로 DEFAULT 가 설정 된다 .
또한 Category 에서 LAUNCHER 를 제외한 category 를 넣을 경우 Filter측에서 꼭
DEFAULT 를 넣어 두어야 한다 .
4 안드로이드의 기본 구조
5.6 인텐트 항목간 연관 관계 : Category 설정 관련
91 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
Intents 항목 Object측 Filter 측Action MAIN MAIN
Category LAUNCHER LAUNCHER
호출 여부 전달 가능
4 안드로이드의 기본 구조
92 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4
6. AndroidManifest.xml
안드로이드의 기본 구조
93 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.1 manifest
속 성 설 명
xmls:android 안드로이드의 namespace 이다 .
package 어플리케이션을 위한 자바 Full 패키지 명
sharedUserId 자신의 프로세스와 공유될 리눅스 UserID
sharedUserLabel 자신의 프로세스와 공유될 리눅스 UserID Name
versionCode version Code
versionName version Name
manifest 의 단어적인 뜻 : 적하 목록
가장 최상위 요소 (element) 이다 .
꼭 하위 요소로 <Application> 을 포함하고 있어야 한다 .
94 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.2 User-Permission ( Contained IN : manifast )
속 성 설 명
name 이 Permission 의 이름이다 .
Permission 은 두 가지 용도로 사용된다 .
첫째 : 사용자에게 어플리케이션이 최초 설치될 때 설치되는 시스템 내에 어떤 서비스를 이용하는
APP 인지 간략히 경고 문구로 보여 주고 설치 여부를 결정하도록 하는 용도
둘째 : 시스템 내에 어떤 서비스를 사용할 수 있는 권한을 부여한다 .
만일 해당 permission 을 기술하지 않으면 시스템 내에 사용하려는 서비스를 사용할 수 없다 .
95 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
6.2.1 Permission 사용 예
96 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
6.2.2 Permission 의 종류
상수 값 (string) 설 명
ACCESS_CHECKIN_PROPERTIES DB 안에 tabel 속성 ,값을 r/w 하기 위해서 필수
ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION GPS 등의 정교한 위치 정보 제공자 사용시 필수
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_MOCK_LOCATION
ACCESS_NETWORK_STATE 네트워크 관련 정보 접근 시 필수
ACCESS_SURFACE_FLINGER 아랫단에 SufaceFlinger 사용 시 필수
ACCESS_WIFI_STATE WIFI 네트워크 관련 정보 접근 시 필수
ADD_SYSTEM_SERVICE
BATTERY_STATS
BIND_APPWIDGET
BIND_INPUT_METHOD IME 서비스 (입력기 ) 개발 시 필수
BLUETOOTH 한 쌍의 블루투스 디바이스를 연결하기 위해서 필수
BLUETOOTH_ADMIN 외부의 블루투스 디바이스 장치 탐색을 위해서 필수
BRICK 장치를 비활성화 시키기 위하여 필수
아래에 사항은 필수 숙지 사항이다 . 어떤 기능 구현 시 발생하는 많은 문제는 Permission 으로
인하여 야기되기도 하기 때문이다 .
97 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
상수 값 (string) 설 명
BROADCAST_PACKAGE_REMOVED
BROADCAST_SMS
BROADCAST_STICKY
BROADCAST_WAP_PUSH
CALL_PHONE
CALL_PRIVILEGED
CAMERA 카메라 디바이스 접근 시 필수
CHANGE_COMPONENT_ENABLED_STATE
CHANGE_CONFIGURATION
CHANGE_NETWORK_STATE
CHANGE_WIFI_STATE
CLEAR_APP_CACHE
CLEAR_APP_USER_DATA
CLEAR_APP_USER_DATA
CONTROL_LOCATION_UPDATES
98 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
상수 값 (string) 설 명
DELETE_CACHE_FILES
DELETE_PACKAGES 설치된 패키지를 삭제할 때 필수
DEVICE_POWER
DIAGNOSTIC
DISABLE_KEYGUARD
DUMP
EXPAND_STATUS_BAR
FACTORY_TEST
FLASHLIGHT Flashlight 를 사용하기 위해서 필수 (카메라플래시 )
FORCE_BACK
FOTA_UPDATE
GET_ACCOUNTS
GET_PACKAGE_SIZE
GET_TASKS
HARDWARE_TEST
99 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
상수 값 (string) 설 명
INJECT_EVENTS
INSTALL_PACKAGES 특정 패키지를 설치 하기 위해서는 필수
INTERNAL_SYSTEM_WINDOW
INTERNET 인터넷 사용 유무 (네트워크 소켓 사용시 필수 )
MANAGE_APP_TOKENS
MASTER_CLEAR
MODIFY_AUDIO_SETTINGS
MODIFY_PHONE_STATE
MOUNT_FORMAT_FILESYSTEMS
MOUNT_UNMOUNT_FILESYSTEMSFile System 에서 특정 storage 영역을 mounting / unmounting 하기 위해서 필수
PERSISTENT_ACTIVITY 항상 실행된 상태를 유지하는 Activity 사용시 필수
PROCESS_OUTGOING_CALLS
READ_CALENDAR 사용자 Calendar 데이터를 읽기 위해서 필수
READ_CONTACTS 사용자 연락처 데이터 접근 시 필수 ( 예 :주소록 )
READ_FRAME_BUFFER스크린의 Frame buffer 를 일기 위해서는 필수( 예 : 스크린 캡쳐 기능 패키지 )
100 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
상수 값 (string) 설 명
READ_INPUT_STATE
READ_LOGS
READ_OWNER_DATA
READ_PHONE_STATE
READ_SMS
READ_SYNC_SETTINGS
READ_SYNC_STATS
REBOOT
RECEIVE_BOOT_COMPLETED시스템 부팅이 완료되는 시점에 발생되는 BroadcastACTION_BOOT_COMPLETED 메시지를 받기위해서는 필수 ( 부팅 시 실행되는 APP 에 사용 )
RECEIVE_MMS MMS 수신 메시지 모니터링 , 기록 , 처리시 필수
RECEIVE_SMS SMS 수신 메시지 모니터링 , 기록 , 처리시 필수
RECEIVE_WAP_PUSH
RECORD_AUDIO
REORDER_TASKS Task 스택의 순서를 변경할 때 필수
RESTART_PACKAGES
101 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
상수 값 (string) 설 명
SEND_SMS SMS 발신을 위해서는 필수
SET_ACTIVITY_WATCHER
SET_ALWAYS_FINISH
SET_ANIMATION_SCALE
SET_DEBUG_APP
SET_ORIENTATION
SET_PREFERRED_APPLICATIONS
SET_PROCESS_FOREGROUND
SET_PROCESS_LIMIT실행될 수 있는 APP 프로세스 최대 개수를 설정 하기 위해서 필수
SET_TIME_ZONE
SET_WALLPAPER바탕화면 (Home 화면 ) 설정을 하기 위하여 필수( 예 : 바탕화면 이미지 변경 )
SET_WALLPAPER_HINTS
SIGNAL_PERSISTENT_PROCESSES
STATUS_BAR
SUBSCRIBED_FEEDS_READ
102 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
상수 값 (string) 설 명
SUBSCRIBED_FEEDS_WRITE
SYSTEM_ALERT_WINDOW
UPDATE_DEVICE_STATS
VIBRATE 진동기의 접근 시 필수
WAKE_LOCK
WRITE_APN_SETTINGS
WRITE_CALENDAR
WRITE_CONTACTS 사용자 연락처 작성시 필수 (read 는 안됨 )
WRITE_GSERVICES
WRITE_OWNER_DATA
WRITE_SECURE_SETTINGS
WRITE_SETTINGS
WRITE_SMS SMS 메시지 작성시 필수
WRITE_SYNC_SETTINGS
103 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
6.2.3 시스템에서 지원하는 Permission 리스트 보기
사용자 정의 Permission
@ 다음 장에서 설명
104 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.3 Permission ( Contained IN : manifast )
속 성 설 명
description Label 에 대한 상세 설명
icon 단지 permission 을 묘사하는 아이콘이다 .
label permission 에 대한 설명
name 사용자 정의 Permission 명
permissionGroup Permission 그룹
protectionLevel 보안 수위
사용자 정의 Permission 에 해당한다 . 사용자가 원하는 Permission 을 정의 할 수 있는데
사용자가 정의한 Permission 관련 Activity, Service, Content Provider 의 경우 외부
어플리케이션에서 접근할 때는 꼭 user-permission 이 필요하다 .
105 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
6.3.1 Permission Name
106 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
6.3.2 Permission Label 과 Permission Group
107 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4 Application Components
Protection 설 명
normal “인스톨 시점에 설치하겠냐 ?” 는 내용을 묻지 않는다 .
dangerous “인스톨 시점에 설치하겠냐 ?” 는 내용을 꼭 물어본다 .
signature ???
Signature Or System ???
6.3.3 Permission ProtectionLevel
108 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.4 Permission-group ( Contained IN : manifast )
속 성 설 명
description Label 에 대한 상세 설명
icon 단지 permission-group 를 묘사하는 아이콘이다 .
label permission-group 설명
name Permission 그룹 명
Permission 그룹을 설정한다 .
109 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.4.1 사용자 Permission 접근 제한 범위
타 APP 에서 접근 제한 범위
110 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.5 Permission-tree ( Contained IN : manifast )
속 성 설 명
icon 단지 permission-tree 를 묘사하는 아이콘이다 .
label ???
name ???
뭘 하는 걸까 ?
111 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.6 instrumentation ( Contained IN : manifast )
속 성 설 명
functionalTest 스트레스 테스트 / 기능테스트 / 로딩 시간 테스트
handleProfiling ??
icon 단지 instrumentation 을 묘사하는 아이콘이다 .
label 단지 instrumentation 을 묘사하는 label 이다 .
name ??
tragetPackage 테스트 대상의 패키지 명
안드로이드 어플리케이션 테스트 프레임워크를 정의한다 .
112 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.7 uses-sdk ( Contained IN : manifast )
속 성 설 명
minSdkVersion SDK 버젼
상위 버전에서 하위 버전의 팩키지를 설치하는 경우를 방지 하는 용도로 사용 된다 .
113 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.8 application ( Contained IN : manifast )
안드로이드 어플리케이션의 속성을 정의한다 .
114 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
속 성 설 명
allowClearUserData 사용자 데이터 삭제 가능 유무
allowTaskReparenting ??
debuggable 타겟 보드에서 디버깅을 하려면 꼭 True 로 설정하여야 한다 .
description ??
enabled 이 값이 “ false” 이면 절대 실행될 수 없는 application 이 된다 .
hasCode 프로그램 코드 존재 유무
icon프로그램의 아이콘 이미지를 설정한다 .Activity 나 혹은 다른 곳에 설정이 안되었을 경우에 적용되는 값이다 .
label 프로그램 명에 해당한다 . 디폴트 값이다 .
manageSpaceActivity ??
name ??
permission 앞장에서 사용자 Permission 항목과 연관 ( 앞장 참조 )
persistent 항상 실행된 상태를 유지할 것인가에 대한 유무
process APP 실행 시 Process 명을 변경할 수 있다 .
taskAffinity Task 그룹에 대한 정의 (친밀한 타스크의 그룹 )
theme ??
115 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4
taskAffinity 와 allowTaskReparenting
; taskAffinity : 친화력
; allowTaskReparenting : 자신의 타스크를 변경 가능토록 한다 .
Component android.task.task1
<application android:icon="@drawable/icon" android:label="@string/app_name" android:allowTaskReparenting="true" android:taskAffinity="android.task.sample1" >
allowTaskReparenting = TruetaskAffinity = android.task.task2
Component android.task.task2
없음
activite1 activite2 activite2activite1
안드로이드의 기본 구조
116 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
4
Component : android.task.task1
allowTaskReparenting = TruetaskAffinity = android.task.task1
Component : android.task.task2
없음
activite1 activite2HomeHome activite1 activite2
task1 task2
activite1 activite2Home
결과 : task2
실행 실행
task1 과 task2 가 결합 되었다 .
안드로이드의 기본 구조
117 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.9 uses-configuration ( Contained IN : manifast )
속 성 설 명
reqFiveWayNav ??
reqHardKeyboard ??
reqKeyboardType ??
reqNavigation ??
reqTouchScreen ??
…
118 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.10 activity ( Contained IN : manifast / application )
Activity 에 대한 속성을 정의 한다 .
119 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
속 성 설 명
allowTaskReparenting
alwaysRetainTaskState 타스크 시간이 경과되어도 남아 있다 .
clearTaskOnLaunch타스크 전환 시 모두 클리어( 단 타스크 안에 최초 Activity 에 설정해야함 )
configChangeskeyboardHidden : UI 회전 방지APP 가 변경하는 시스템 config
enabled 이 값이 “ false” 이면 절대 활성화 될 수 없는 Activity 가 된다 .
excludeFromRecents 최근 실행 어플리케이션 목록에 등록 유무
exported 타 어플리케이션에서 구동 가능 유무
finishOnTaskLaunch타스크가 재 시작 될 때 종료되도록 한다 .Activity 종료 시 단말 종료 유무
icon 프로그램의 아이콘 이미지를 설정한다 .
label 프로그램명에 해당한다 .
launchMode [multiple|singleTop|singleTask|]
multiprocess [true:false] 프로세스가 쪼개지는 것을 지원한다 .
120 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
속 성 설 명
name Activity 의 class 명에 해당한다 . (Java 파일명에도 해당한다 .)
noHistory
permission 앞장에서 permission 관계 설명 참조
process 쪼개진 프로세스명
screenOrientation
stateNotNeeded
taskAffinity
theme
windowSoftInputMode
121 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 Application Components
Home
Components A
Activity
Components B
Activity
Components C
Activity
Task 1
6.10.1 clearTaskOnLaunch 옵션
Home
Key
Home
Components A
Activity 실행
Components A
Activity 실행
clearTaskOnLaunch 를 False 로 설정한 경우 ( 일반적인 상황 )
122 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 Application Components
Home
Components A
ActivityclearTaskOnLaunch
Components B
Activity
Components C
Activity
Task 1 Home
Key
Home
Components A
Activity 실행
Components A
Activity 실행
clearTaskOnLaunch 를 True 로 설정한 경우
Task 1
Task 전환 시 ClearTaskOnLaunch 로 인하여 Task1 Clear
Components A
ActivityclearTaskOnLaunch
Task 1
123 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 Application Components
Task
Home
Components A
ActivityStandard Task
Components B
Activity
Components C
ActivityTop
(Standard Task)
Standard Task
Task 1
6.10.2 launchMode 옵션
124 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 Application Components
Home
Components A
Activity
Components B
Activity
Top 에 하위와 동일한 Activity 허용 안함
Standard Task
Task (SingleTop Task)
Components B
ActivityTop
Single Top TaskStandard Task
Task 1
재 사용
125 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 Application Components
Home
Components A
Activity
Task 1
Components B
Activity
Components C
ActivityTop
SingleTask Task
Home
Components C
Activity
SingleTask TaskStandard TaskStandard Task
SingleTask Task
Components D
ActivityStandard Task
Task 2
Task (SingleTask Task)
이것은 꼭 Task 의 root 에서 activity 가 활성화 된다 .
126 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 Application Components
Home
Components A
Activity
Task 1
Components B
Activity
Components C
ActivityTop
Single Instance Task
Home
Components C
Activity
Standard Task Standard Task
Components D
ActivityTop
Task 2
Task (SingleInstance Task)
SingleInstance Task
SingleInstance Task
Standard Task
하위 새로운 타스크로 생성된다 .
이것은 꼭 Task 의 root 에서 activity 가 활성화 된다 .
127 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.11 activity-alias ( Contained IN : manifast / application )
속 성 설 명
enabled 이 값이 “ false” 이면 절대 활성화 될 수 없는 activity 가 된다 .
exported ??
icon 프로그램의 아이콘 이미지를 설정한다 .
label 프로그램 명에 해당한다 .
name ??
permission 앞장에서 permission 관계 설명 참조
targetActivity` ??
128 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.12 service ( Contained IN : manifast / application )
속 성 설 명
enabled 이 값이 “ false” 이면 절대 활성화 될 수 없는 service 가 된다 .
exported ??
icon 프로그램의 아이콘 이미지를 설정한다 .
label 프로그램 명에 해당한다 .
name Service 의 class 명에 해당한다 . (Java 파일명에도 해당한다 .)
permission 앞장에서 permission 관계 설명 참조
process ??
129 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.13 receiver ( Contained IN : manifast / application )
속 성 설 명
enabled 이 값이 “ false” 이면 절대 활성화 될 수 없는 receiver 가 된다 .
exported ??
icon 프로그램의 아이콘 이미지를 설정한다 .
label 프로그램 명에 해당한다 .
name Receiver 의 class 명에 해당한다 . (Java 파일명에도 해당한다 .)
permission 앞장에서 permission 관계 설명 참조
process` ??
130 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.14 provider ( Contained IN : manifast / application )
131 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
속 성 설 명
authorities ??
enabled 이 값이 “ false” 이면 절대 활성화 될 수 없는 provider 가 된다 .
exported ??
grantUriPermissions ??
icon 프로그램의 아이콘 이미지를 설정한다 .
initOrder ??
label 프로그램 명에 해당한다 .
multiprocess ??
name Provider 의 class 명에 해당한다 . (Java 파일명에도 해당한다 .)
permission 앞장에서 permission 관계 설명 참조
process ??
readPermission ??
syncable ??
writePermission ??
132 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.15 uses-library ( Contained IN : manifast / application )
속 성 설 명
name ??
133 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.16 grant-uri-permission ( Contained IN : manifast / application / provider )
속 성 설 명
path ??
pathPattern ??
pathPrefix ??
134 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.17 meta-data ( Contained IN : manifast / application / activity,activity-alias,service,receiver )
속 성 설 명
name 정보 명
resource 해당 정보의 리소스 명
value 해당 정보의 값
중요한 요소는 아니다 . 특정 사용자 정보를 기입할 수 있으면
name 과 resource 혹은 name 과 value 와 같이 짝으로 입력할 수 있다 .
예 ) name = “android.appwidget.provider” , resource = “@xml/analog_appwidget”
안드로이드 위젯 provider 이며 , 리소스 analog_appwidget 리소스를 참조한다 .
135 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.18 intent-filter ( Contained IN : manifast / application / activity,activity-alias,service,receiver )
속 성 설 명
icon 단지 상위 activity,service,receiver 를 묘사하는 아이콘이다 .
label 단지 상위 activity,service,receiver 를 묘사하는 label 이다 .
priority ??
intent 의 Filter 내용을 기입한다 . ( 자세한 사항은 앞장에서 개념 설정 부분 참조 )
136 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.19 action ( Contained IN : manifast / application / activity,activity-alias,service,receiver )
속 성 설 명
name ??
137 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.20 category ( Contained IN : manifast / application / activity,activity-alias,service,receiver / intent-filter )
속 성 설 명
name ??
138 박 성 근 (010-9985-2539) 무단 복제를 금합니다 .(^^;)
5 AndroidManifest.xml
6.21 data ( Contained IN : manifast / application / activity,activity-alias,service,receiver / intent-filter )
속 성 설 명
host ??
mimeType ??
path ??
pathPattern
pathPrefix
port
scheme