기초부터 튼튼하게 가보자
Android 개발자가 되기위해서 앱의 기본 요소를 이해하는게 첫번째인 것 같다. 그렇기 때문에 안드로이드 Docs에서도 첫번째로 소개하는 것이 아닐가 생각한다.
앱 기본 항목
안드로이드 앱은 'Kotlin', 'JAVA', 'C++' 언어를 사용하여 작성할 수 있다. 최근에는 Kotlin이 대부분이라는 점에서 Kotlin을 공부할 예정이다.
안드로이드 SDK 도구는 모든 데이터 및 리소스 파일과 함께 코드를 컴파일하여 하나의 APK를 만든다.
안드로이드 패키지는 .apk인 아카이브 파일로 한 개의 APK파일에는 앱의 모든 콘텐츠가 들어 있다. - 즉 App인 것이다.
보안기능
안드로이드 앱은 자체적인 보안 샌드박스에 속하며, 다음과 같은 안드로이드 보안 기능으로 보호된다.
- 안드로이드 운영체제는 멀티유저 Linux 시스템으로, 여기서 각 앱은 각기 다른 사용자와 같다.
- 기본적으로 시스템이 각 앱에 고유한 Linux ID를 할당한다. (이 ID는 시스템만 사용할 수 있으며 앱에서는 인식하지 못함). 시스템은 앱 안의 모든 파일에 대해 권한을 설정하여 해당 앱에 할당된 사용자 ID만 이에 액세스할 수 있도록 합니다.
- 각 프로세스에는 자체적인 가상 머신(VM)이 있고, 그렇기 때문에 한 앱의 코드가 다른 앱과는 격리된 상태로 실행됩니다.
- 기본적으로 모든 앱이 앱 자체의 Linux 프로세스에서 실행됩니다. Android 시스템은 앱의 구성 요소 중 어느 하나라도 실행해야 하는 경우 프로세스를 시작하고, 더 이상 필요 없거나 시스템이 다른 앱을 위해 메모리를 복구해야 하는 경우 해당 프로세스를 종료합니다.
이러한 방식으로 최소 권한의 원리를 구현한다고 한다.
정리하자면 작업을 수행하기 위해 필요한 권한만 가지고 그 외의 권한은 허용되지 않는다고 한다. 그렇기 때문에 안전한 환경이 구성되어 권한을 부여받지 못한 부분에는 엑세스할 수 없게 된다.
다른 앱과 데이터를 공유하고 시스템 서비스에 액세스하는 방법은 여러 가지가 있다.
- 두 개의 앱이 같은 Linux 사용자 ID를 공유하도록 설정할 수도 있습니다. 이 경우 두 앱은 서로 파일에 액세스할 수 있게 됩니다. 시스템 리소스를 절약하기 위해 사용자 ID가 동일한 앱들이 같은 Linux 프로세스에서 실행되고 같은 VM을 공유하도록 설정할 수도 있습니다. 또한 이러한 앱은 같은 인증서로 서명해야 합니다.
- 앱은 사용자의 연락처, SMS 메시지, 마운트 가능한 저장소(SD 카드), 카메라, 블루투스를 비롯한 여러 가지 기기 데이터에 액세스할 권한을 요청할 수 있습니다. 사용자는 이러한 권한을 명시적으로 부여해야 합니다. 자세한 내용은 시스템 권한 사용을 참조하세요
앱 구성 요소
출처 https://velog.io/@jojo_devstory/안드로이드-Android-4대-컴포넌트
- Activity
- 사용자와 상호작용하기 위한 진입점.
- 사용자 인터페이스를 포함한 화면 하나를 나타냄.
- Service
- 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점
- 백그라운드에서 오랫동안 실행되는 작업을 수행하거나 원격 프로세스를 위한 작업을 수행함.
- 서비스는 사용자의 인터페이스를 제공하지 않음.
- Brodcast Receiver
- 시스템이 정기적인 사용자가 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 구성요소
- 앱으로 들어갈 수 있는 또 다른 명확한 진입점이기 때문에 현재 실행되지 않은 앱에서도 시스템이 브로드캐스트를 전달할 수 있음.
- Contetnt Provider
- 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 액세스할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 앱 데이터의 공유형 집합을 관리.
- 다른 앱은 콘텐츠 제공자를 통해 해당 데이터를 쿼리하거나, 콘텐츠 제공자가 허용할 경우에는 수정도 가능.
- 데이터베이스에서 흔히 사용되는 CURD(Create, Read, Update, Delete)원칙을 준수
구성 요소 활성화
구성요소 4가지중 3가지(Acrivity, Services, Broadcast Reciver)는 인텐트라는 비동기식 메시지로 활성화된다.
인텐트는 런타임에서 각 구성 요소를 서로 Binding한다. 이것은 일종의 메신저라고 생각하면 된다.
인텐트에 대한 자세한 내용은 다음에 다루어 보겠다.