-
안드로이드 아키텍처모바일 2021. 9. 29. 14:43
안드로이드 아키텍처 구조

안드로이드 아키텍처 - 어플리케이션 계층
- 프레임워크 계층
- 런타임 계층
- 네이티브 라이브러리 계층
- 커널 계층
커널계층
- 하드웨어, 네트워크, 파일 시스템 접근 등 시스템 전체의 중심 역할 수행
라이브러리 계층
- 네이티브 라이브러리를 제공하기 위한 계층
- SQLite, WebKit, Media(코텍 지원) 등
런타임 계층
- 자바 바이트 코드를 DEX 포맷으로 변환하여 패키징 후 실행함
- 안드로이드 7.0 누가(API24) 이후의 ART VM 에서는 JIT와 AOT를 모두 사용한다.
- Dalvik, ART
- Dalvik : JIT(Just In Time)
- 자바 바이트 코드(.class)를 달빅 바이트 코드(.dex)로 변환해 두고, 이를 런타임에 JIT 컴파일하며 실행하는 방식
- 중간 언어를 실행하는 것이라 JVM처럼 중간 언어를 해석해줄 Dalvik VM이 필요하다.
- 앱이 실행되는 순간 자주 사용되는 코드를 컴파일함
- 설치 속도는 빠르지만 실행 시 마다 컴파일을 진행하기 때문에 실행 시간이 비교적 느림
- 용량 작음
- ART : AOT(Ahead Of Time)
- .dex 파일을 .oat 파일로 컴파일하므로 중간 언어(달빅 바이트 코드)를 받아 Native binary로 컴파일하는 방식
- .oat 파일은 Native machine code로 되어있기 때문에 VM 없이 실행 가능하지만, Dalvik과의 하위 호환성때문에 VM 위에서 돌아가는 것 처럼 실행된다.
- 앱 설치 시 모든 코드를 컴파일함
- 설치 시 컴파일을 완료하기 때문에 비교적 설치 속도가 느리지만, 실행 속도가 빠름
- 용량 큼
- Dalvik : JIT(Just In Time)
프레임워크 계층
- JAVA API가 존재하며, 안드로이드 OS의 기능은 해당 API를 통해서 접근함
- Activity Manager : 액티비티의 생명주기를 호출, 공통적인 네비게이션 백스택을 제공
- Resource Manager : 문자열, 그래픽, 레이아웃 파일 등 리소스를 찾아주는 역할
- View System : 리스트, 그리드, 텍스트 뷰, 버튼, 웹 뷰 등 뷰들의 집합
- Content Provider : 안드로이드 4대 컴포넌트 중 하나, 어플리케이션이 다른 어플리케이션으로부터 데이터를 액세스하거나, 자신의 데이터를 공유함
- Package Manager : 현재 디바이스에 설치된 어플리케이션과 관련된 정보를 가지고 있음
- Notification Manager : 모든 어플리케이션의 상태표시줄에 사용자 지정 알림을 표시 할 수 있도록 지원함
- Window Manager : 화면에 대한 정보, 배치 등을 관리하는 시스템 서비스
- Telephony Manager : 단말기의 상태에 대한 정보를 얻을 수 있는 서비스
- Location Manager : 단말의 위치 값을 지속적으로 얻을 수 있는 서비스
어플리케이션 계층
- 흔히 우리가 사용하는 어플리케이션들이 이 계층에 해당됨
- 시스템 및 사용자 어플리케이션으로 구분
- 시스템 어플리케이션
- /system 디렉터리에 존재하며 사용자가 제거/변경 불가능함
- SMS 메시지 어플리케이션 등이 해당됨
- 사용자 어플리케이션
- /data 디렉터리에 존재하며, 제거/변경 가능함
- 각각의 어플리케이션은 샌드박스에 설치되어 영향을 주거나 데이터 통신 불가
- 각 어플리케이션의 권한을 가진 리소스에만 접근 가능
- 카카오톡과 같은 일반 어플리케이션 등이 해당됨.
- 시스템 어플리케이션
안드로이드 보안 모델
- 코드 서명
- JAR 서명 기법을 이용하여 어플리케이션 간 신뢰 관계 설정을 위해 APK 파일 서명
- 서명을 통해 설치된 대상 어플리케이션의 인증서와 업데이트할 어플리케이션 비교
- 권한
- 샌드박스를 이용하여 어플리케이션 설치 시 고유한 UID/GID 를 할당함
- 생성되는 디렉터리 및 파일은 소유자 및 그룹 외 내용 확인이 불가함
- TrustZone
- 디바이스 공간을 물리적 또는 논리적으로 분리해서 주요 자원을 보호하는 방법
- 활용 사례 : 지문 저장 정보, 지불 관련 기능 저장, DRM 암호 정보 저장
- SELinux
- 강제 접근 제어를 포함한 접근 제어 보안 정책을 지원하는 리눅스 커널 보안 모듈, 안드로이드 5.0부터 완전히 적용됨
- 세가지 모드 : 비활성(disabled), 허용(permissive), 시행(enforcing)
패키지 파일(APK)
- Android Application Package 의 약자로 안드로이드에서 프로그램 형태로 배포되는 형식의 파일
- jar를 확장한 포맷이며, jar 파일은 zip 압축 파일 포맷을 사용함
- 패키지 파일 설치 경로
- /data/app/<패키지명>
- 컴파일된 코드와 앱의 apk 파일이 저장됨
- /data/data/<패키지명>
- 앱이 사용하는 데이터들이 저장되는 장소
- /data/app/<패키지명>
Reference
https://velog.io/@sery270/JVM-DVM-ART
🏃🏽♂️JVM, DVM, ART
모바일 환경에 최적화된 런타임을 제공하기 위해, 기존 자바 가상머신인 JVM을 대체하여 DVM이 나타났습니다.이후 DVM이 지금의 ART로 발전되었습니다. 안드로이드 OS와 자바/코틀린이 돌아가는 런
velog.io
Android Framework(안드로이드 프레임워크)에 대한 정리
안드로이드에 대해 계속 공부하고 있지만, 프로젝트나 기능 위주로만 보다 보니 안드로이드 OS처럼 내 안드로이드 지식도 파편화(?)가 되는 것 같다.
medium.com
https://thesecurity.tistory.com/20
안드로이드 보안 모델
//안드로이드 보안 모델 - 기본적으로 리북스 커널이 제공하는 보안 기능을 사용 - 스마트폰을 사용하는 방식에 맞게 보안 기능을 재구성 - 애플리케이션 격리 : Sandbox, Permission, TrustZone - 플랫폼
thesecurity.tistory.com
안드로이드 플랫폼의 구조 / ART
https://developer.android.com/guide/platform/index.html?hl=ko#art Android는 모바일 기기를 위한 Linux 기반 커널과 미들웨어, 핵심 애플리케이션들을 포함한 소프트웨어 스택이라고 볼 수 있다. ART, Andro..
umbum.dev
Uploaded by Notion2Tistory v1.1.0
Notion2Tistory
boltlessengineer.github.io