1.39k likes | 1.79k Views
안드로이드 세미나. 2. C/C++ 언어를 자바 언어에서 사용 가능토록 함. C/C++. 안드로이드의 개괄적인 이해. 2. 안드로이드의 개괄적인 이해. 1 Applications. 안드로이드에서는 E-mail 클라이언트 , SMS 프로그램 , 달력 , 지도 , 브라우저 , 전화번호부 , 그리고 다른 것들을 포함하는 핵심 애플리케이션들이 탑재되어 있다 . 모든 애플리케이션은 JAVA 프로그래밍 언어로 작성된다. 2. 안드로이드의 개괄적인 이해. 2 Applications Framework.
E N D
2 C/C++언어를 자바 언어에서 사용 가능토록 함 C/C++ 안드로이드의 개괄적인 이해
2 안드로이드의 개괄적인 이해 1 Applications 안드로이드에서는 E-mail 클라이언트, SMS 프로그램, 달력, 지도, 브라우저, 전화번호부, 그리고 다른 것들을 포함하는 핵심 애플리케이션들이 탑재되어 있다. 모든 애플리케이션은 JAVA 프로그래밍 언어로 작성된다.
2 안드로이드의 개괄적인 이해 2 Applications Framework 개발자들은 애플리케이션 Framework API에 완벽하게 접근할 수 있다. 안드로이드 애플리케이션 프레임워크는 Java 기반의 Framework 이며, 대부분이 JNI(Java Native Interface) 통해 C/C++ 코드로 작성되어 있다. 위와 같은 서비스들은 핵심 시스템 서비스를 담당하는 Core 시스템 서비스들과 하드웨어와의 인터페이스를 담당하는 하드웨어 서비스들로 구성된다.
2 안드로이드의 개괄적인 이해 3 Libraries 안드로이드 시스템의 다양한 컴포넌트에 의해 사용되는 C/C++ 라이브러리 집합. 이러한 라이브러리의 기능들은 안드로이드 애플리케이션 Framework를 통해서 개발자들에게 제공된다. 시스템 C 라이브러리 libc 임베디드 리눅스 기반의 디바이스를 위해서 구현된 표준 C 시스템 라이브러리의 구현물이며 Bionic이라 한다. Bionic은 임베디드에서 사용을 위해 최적화된 직접 구현된 Libc이다. 기존 Linux Libc를 사용하지 않고 새로 만든 이유는user-space에서는 GPL(General Public License : GNU 일반 공중 사용 허가서로 소스 수정 시 꼭 소스를 공개하여야 한다라는 규약이 있다.)을 사용하지 않기 위한 라이센스 이유와, 개별 프로세스마다 포함되어야 하는 영역이기 때문에 크기를 최소화하기 위해서이다. 또한 제한적 CPU 파워하에서도 빠를 필요가 있기 때문이다. Function Library 웹 브라우저를 위한 WebKit, PacketVideo의 OpenCore 플랫폼 기반의 미디어 프레임워크, 가벼운 DB SQLite
2 안드로이드의 개괄적인 이해 Native Server Surface Flinger는 2D/3D Surface의 조합 및 다양한 애플리케이션에서 사용된 Surface들을 Frame buffer 디바이스로의 렌더링을 제어함으로써, 시스템 전역에 걸쳐서 Surface의 구성을 가능하게 한다. Audio Flinger는 모든 오디오 output 디바이스를 제어하는 것으로써, 다양한 오디오 스트림을 PCM 오디오 output 경로로 처리한다.
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 등이 포함되어 있다.
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 이다.
2 안드로이드의 개괄적인 이해 6. 기타
3 클래스 파일 Java 소스 (.java) DX 유틸리티 배포 유틸리티 (adb) Dalvik 파일 (.dex) 패키징 도구 (aapt) 에뮬레이터 혹은 디바이스 리소스 파일 (png,mp3…) 바이너리 XML & 리소스 파일 (.xml, .arsc) XML 파일 (.xml) 안드로이드의 전반 적인 이해 1. 안드로이드 개발 프로세스 java 컴파일러 (javac) Android Package File Format (.apk) 압축파일이다.
3 안드로이드의 전반 적인 이해 2. Application Data Application File Application Data Folder
3 안드로이드의 전반 적인 이해 3. 안드로이드 구동 Low level 안드로이드 구동 High level 안드로이드 구동 ARM based Your Target Board Initialization process /etc/init.rc Android bootloader USB loader Start Android Service Console adbd service manager mountd debuggerd zygote mediaserver installd flash_recovery Load Linux Start kernel - /init/main.c
사용자 ID : B Group : C 사용자 ID : A Group : C 사용자 ID : root 모두 접근 가능 A 프로그램 설치 B 프로그램 설치 3 자동으로 user 등록 자동으로 user 등록 같은 group 허용 가능 A만 접근 가능 공간 생성 사용자 ID : app?? Group : app?? 사용자 ID : app?? Group : app?? A 권한으로 파일 생성 및 실행 수정 삭제 종료 가능 저장 공간 저장 공간 A B 서로의 공간 Write 접근 불허 B만 접근 가능 공간 생성 B 권한으로 파일 생성 및 실행 수정 삭제 종료 가능 리눅스 환경 안드로이드 안드로이드의 전반 적인 이해 !!! 여기서 잠깐 안드로이드 프로그램(팩키지)
최초 프로세스 Process Process Process 3 PID : 2 PID : 4 새로운 process 실행 새로운 process 실행 PPID : 1 PPID : 2 PID : 1 PPID : 0 Process Process PID : 3 PID : 5 새로운 process 실행 새로운 process 실행 PPID : 1 PPID : 3 안드로이드의 전반 적인 이해 !!! 여기서 잠깐
1 3 2 3 4 5 안드로이드의 전반 적인 이해
메모장 프로그램 브라우져 프로그램 zygote 프로세스 fork에 의해 복사본 proc 생성 3 어플리케이션에서 필요로 하는 기본 라이브러리 모두 로딩된 상태 fork에 의해 복사본 proc 생성 브라우져 관련 Dex 메모리 로딩 메모장 관련 Dex 메모리 로딩 사용자 메모장 실행 안드로이드의 전반 적인 이해 사용자 브라우져 실행
3 안드로이드의 전반 적인 이해 테스트 사항 : procmem 확인과 ps확인
3 안드로이드의 전반 적인 이해
CPU 메인 메모리 3 프로그램 메모리에 로딩 메모리 상에서 처리 동작 실행 인스턴스 프로세스 객체 생성 C : malloc() C++ : new 안드로이드의 전반 적인 이해 !!! 여기서 잠깐 안드로이드와 관련한 프로그램에서 인스턴스와 프로세스 그리고 쓰래드에 대해서
쓰래드 쓰래드 … 3 처리… 처리… 처리… 안드로이드의 전반 적인 이해 프로세스는 반드시 하나 이상의 쓰레드가 있습니다. 즉 프로세스는 혼자서는 아무런 일도 할 수 없습니다. 예를 들어 윈도우 시스템에서는 csrss.exe 프로세스가 순회하면서 쓰레드를 관리하고, 커널에게 쓰레드의 실행을 알립니다. 프로세스 프로세스
프로세스 A 프로세스 B 쓰래드 A 쓰래드 B 쓰래드 B 쓰래드 A Process 메모리 구조 Process 메모리 구조 Code영역 실행파일을 구성 명령어 Code영역 실행파일을 구성 명령어 3 Data영역 Static 변수 전역 변수 Data영역 Static 변수 전역 변수 Heap영역 프로그램 할당 Heap영역 프로그램 할당 서로 메모리 접근 Stack영역 지역 변수 전달 인자 Stack영역 지역 변수 전달 인자 X 직접 메모리 공유 서로 메모리 접근 O AIDL 메모리 공유 안드로이드의 전반 적인 이해 메모리 공유 메모리 공유
3 안드로이드의 전반 적인 이해 4. 어플리케이션의 구성
4 윈도우 window 위젯 widget 액티비티 Activities 뷰 그룹 view group 뷰 view 안드로이드의 기본 구조 1 Activities 1.1 Activities 란? ; 애플리케이션의 하나의 스크린 또는 화면을 일컫는 말이다. UI 컴포넌트를 화면에 표시하고, 시스템이나 사용자의 반응을 처리할 수 있다. 윈도우의 창의 개념과 유사하다. 사용자 반응 처리 UI 요소 배치
List View Cursor 4 데이터 처리 용의 박성근 1 박성근 1 박성근 2 박성근 2 박성근 3 박성근 3 박성근 4 박성근 4 박성근 5 박성근 5 ListAdapter 안드로이드의 기본 구조 리스트 내용 어뎁터 Adapters ListView 그룹 view group
4 안드로이드의 기본 구조 Activity starts 1.2 Activities 라이프 사이클 ; Activity 는 라이프사이클을 가진다. OnCreate() OnStart() OnRestart() User navigates back to your activity OnResume() 당신의 액티비티가 foreground로 돌아왔다. Activity is Running Process is killed 새로운 액티비티가 실행되었다 당신의 액티비티가 foreground로 돌아왔다. 다른 APP 실행 시 메모리가 부족할 경우 OnPause() 당신의 액티비티가 더 이상 보이지 않는다. OnStop() OnDestroy() Activity is shut down
4 안드로이드의 기본 구조 1.3 프로세스 라이프 사이클 ; Activity와 관련이 깊은 프로세스 라이프 사이클에 대해서 알아 보자. foreground process 사용자가 현재 조작중인 최상위 화면의 Activity를 말한다. 가장 중요한 프로세스이므로 새로운 App가 실행될 때 메모리가 부족하다면 제일 마지막에 제거되는 프로세스 이다. foreground activity
4 안드로이드의 기본 구조 visible process 사용자 화면에 보여지지만 foreground가 아닌 것을 말한다. 예를 들어 foreground 대화상자의 뒤에 있는 activity를 생각하면 된다. visible process는 foreground process 다음으로 중요하다. visible activity 대화 상자
4 안드로이드의 기본 구조 background process 사용자에게 보여지지 않는 액티비티 이다. 그러므로 더 이상 중요하지 않으며 시스템은 foreground나 visible 프로세스가 메모리를 요구하면 background activity를 안전하게 제거할 수 있다. background activity
4 안드로이드의 기본 구조 empty process 이 프로세스는 아래의 라이프사이클에서 빨강색 부분처럼 Activity shutdown된 Activity이다. 하지만 이 프로세스는 어떤 활성화된 App 컴포넌트도 가지고 있지 않지만, 차후 다시 이 APP가 실행될 때를 대비해서 캐쉬의 용도로 메모리를 점유하고 있다. (startup 시간 단축) 이런 프로세스는 시스템적으로 언제 사라질지 모른다. empty activity
4 안드로이드의 기본 구조 service process 이 프로세스는 특정한 서비스를 위하여 존재하며 UI가 없다. 예를 들어 백그라운드에서 SMS가 수신되면 사용자는 모르게 수신된 SMS를 데이터베이스에 저장한다거나 스팸 확인을 하는 등의 처리를 위해 존재하는 경우가 많다. 이 프로세스는 foreground, visible process 를 보유하기에 충분한 메모리가 존재 하는 한 제거되지 않고 유지 된다. service process
4 안드로이드의 기본 구조 ; 앞에서 프로세스의 라이프 사이클을 설명하였다. 그 내용 중 Activity와 프로세스가 동일한 것이 아니냐는 착각에 빠진다. 한 프로세스는 여러 개의 Activity를 가질 있고, 또한 한 프로세스에는 foreground activity, visible activity, background activity등 모두 가질 수 있다. A 프로세스 visible activity background activity 대화 상자 foreground activity service process
4 안드로이드의 기본 구조 ; 프로세스의 우선순위 (우선순위가 낮을 수록 메모리 부족 시 우선 제거 대상이 된다.) A 프로세스 B 프로세스 C 프로세스 foreground activity 포함 visible activity 포함 backup activity 포함 > >
Task 1 Home Activity1 Activity2 Activity3 4 1 2 3 활성화 활성화 활성화 Home Key Back Key Home Activity4 Activity5 Activity6 활성화 4 활성화 5 활성화 6 Task 2 안드로이드의 기본 구조 1.4 용어가 어려운 Task에 관해서 !!! Activity 의 스택이라고 볼 수 있다.
4 Process 안드로이드의 기본 구조 1.5 Thread에 대해서 ; 한 프로세스는 기본적으로 하나의 Thread를 가지고 있고, 추가적으로 Thread를 생성 가능 하다. 4 1 E 2 3 E
4 위젯 widget 뷰 그룹 view group 뷰 view 안드로이드의 기본 구조 1.6 view와 view group 에 대해서 ; 안드로이드 애플리케이션의 가장 기본적인 구성 단위는 Activity라는 클래스 이다. 이 Activity는 한 화면을 나타내지만 그 자체로는 아무 것도 보여줄 수 없고, Activity에 View와 ViewGroup 클래스를 사용해야만 비로소 화면에 무엇인가를 표시할 수 있다. View 클래스는 화면에서 직사각형 형태의 레이아웃과 각종 정보를 저장하는 자료 구조이다. 화면의 크기 조절, 레이아웃 구성, 그리기, 포커스 변화, 스크롤링과, 키 처리 등을 위해 사용된다. view 클래스는 위젯의 base 클래스이기도 하다.(위젯:컨트롤과 유사)
4 안드로이드의 기본 구조 안드로이드는 트리 구조의 사용자 인터페이스를 제공한다. 화면에 그리는 순서 view group view group view view view view view view group은 아래와 같이 구성된다. LinearLayout RelativeLayout view view view view view
4 안드로이드의 기본 구조 1.6.1 Layout의 좌표와 용어 layout_width 0,0 기준 좌표 layout viewgroup layout_height padding margin 문자열을 표시하는 라벨 view 문자열을 표시하는 라벨 view Hello Hello WRAP_CONTENT FILL_PARENT 부모 객체와의 패딩(여백)을 제외한 나머지 공간을 차지 컨텐츠를 표시한는 데 충분한 크기로
4 안드로이드의 기본 구조 1.6.2 FrameLayout 가장 단순한 레이아웃 객체인데, 단순히 비어있는 공간이라고 생각하면 된다. FrameLayout은 모든 객체들이 화면 왼쪽 위를 기준으로 그린다. 즉 사용자가 각 객체의 절대적 위치를 설정할 수 없다는 의미이다. 원하는 객체를 여러 개를 그린다면 화면좌표 0,0을 기준으로 모두 겹친다. viewgroup : FrameLayout 0,0 기준 좌표 view view view view와 viewgroup과의 배치 관계
4 view view (가중치 0) 5px view (가중치 0) view view view (가중치 1) 5px view view gravity 설정 : 좌우정렬 weight 설정 : 가중치 값 안드로이드의 기본 구조 1.6.3 LinearLayout 모든 하위 구성 요소를 수직 또는 수평 형태 중 하나로 정렬하여 그리는 방식이다. viewgroup : LinearLayout view margin 설정 : 5px
4 view view view view 안드로이드의 기본 구조 1.6.4 TableLayout 행과 열이라는 개념이 있어서 테이블의 행과 열을 기준으로 하위 구성 요소들을 배치한다. 각 셀은 View 오브젝트로 구성되며 각 View의 화면상 절대적 위치는 테이블 구조에 따라 상대적으로 결정된다. viewgroup : TableLayout view view view view 앞에서 처럼 (gravity 설정 : 좌우정렬), (weight 설정 : 가중치 값) 및 padding 처리 가능
4 10 10 안드로이드의 기본 구조 1.6.5 AbsoluteLayout 정확한 x,y좌표를 제시해야 하위 구성 요소들을 화면에 표시 할 수 있다. 서로 다른 단말기 환경에서는 프로그래머가 예상한대로 그려지지 않을 수 있으므로 본 Layout은 가급적이면 피하는 것이 좋다. viewgroup : AbsoluteLayot 0,0 기준 좌표 view1 view3 view2 view와 viewgroup과의 배치 관계 (view1 x=10,y=10 경우)
EditText Button RelativeLayout Button TextView 4 2 1 width : Fill Parent height : wrap content text : Type here width : Fill Parent height : wrap content background : blue padding : 10 3 ID : entry width : Fill Parent height : wrap content 4 5 width : wrap content height : wrap content text : “cancel” ID : ok width : wrap content height : wrap content marginLeft:10 text : “Ok” 안드로이드의 기본 구조 1.6.6 RelativeLayout 하위 구성 요소들이 다른 구성 요소의 상대적인 위치에 따라 그려진다. 예를 들어 두 개의 객체가 있을 때 하나를 다른 객체의 아래에 그리거나 위에 그리는 등의 설정이 가능하다. ID : label below : “label” toLeft : “ok” alignTop : “ok” below : “entry” alignParentRight:true
4 안드로이드의 기본 구조
4 안드로이드의 기본 구조 1.6.7 기타 view group Gallery ViewGroup Class 이미지를 수평으로 스크롤 하면서 보여준다. GridView ViewGroup Class 눈금 구조를 보여준다.
4 안드로이드의 기본 구조 TabHost ViewGroup Class 클릭에 반응하는 탭 선택 목록을 제공하며, 탭을 클릭하면 애플리케이션이 바뀐다. ScrollView ViewGroup Class 수직으로 구성 요소의 열을 스크롤링 하게 된다.
4 안드로이드의 기본 구조 Spinner ViewGroup Class 한 줄짜리 텍스트 박스 안에서 목록의 아이템을 한 번에 하나씩 보여준다. SurfaceView ViewGroup Class 그리기 전용인 표면에 직접 접근할 수 있도록 한다. SurfaceView는 위젯을 이용하는 프로그래밍 보다 점과 라인을 직접 그리는 방식을 사용한다.
4 안드로이드의 기본 구조 ViewFlipper ViewGroup Class 한번에 한 개의 아이템을 보여주는 목록이다. 이것은 슬라이드 쇼처럼 시간 주기로 아이템을 바꾸도록 설정할 수 있다. ViewSwitcher ViewGroup Class ViewFlipper와 유사하다.
4 안드로이드의 기본 구조 ListView ViewGroup Class 스크롤링 되는 하나의 컬럼 리스트를 보여 준다.
Activity Activity Service 4 재생 동영상의 재생을 시작한다. Home or Back Activity1 Activity2 안드로이드의 기본 구조 2. Service Service는 UI와 상관 없이 오랫동안 존재하면서 실행되는 코드이다. 예를 들면 재생 목록에서 노래를 재생하는 미디어 플레이어 같은 것을 Service 라고 할 수 있다. 미디어 플레이어 APP는 사용자가 곡을 선택하고 재생을 시작하는 하나 이상의 Activity를 가지고 있지만, Activity가 음악을 재생하는 것이 아니다.
4 안드로이드의 기본 구조 안드로이드의 기본 구조 2.1 Service의 생명주기 2.1.1 StartService 특정 백그라운드에서 동작할 Service를 개시한다. 예를 들어 서버-클라이언트간의 관계에서 서버 측에서 서비스 할 수 있는 프로그램을 가동하는 것과 같다. startService()로부터 서비스가 시작된다. OnCreate() OnStart() service 실행 중 service가 종료 되었다.(콜백 없음) OnDestroy() Service is shut down