[Android] Application의 기본 항목

neoneoneo·2024년 3월 25일
0

android

목록 보기
3/16

Android Developers 공식 문서 읽어보기

Application의 기본 항목

서론

안드로이드 앱은 kotlin, java, C++ 언어를 사용하여 구현할 수 있다.
안드로이드 SDK 도구는 코드를 데이터 및 리소스 파일과 함께 컴파일하는데, APK 또는 Android App Bundle로 컴파일한다.

Android package

  • .apk로 끝나는 보관 파일이다.
  • 런타임에 필요한 안드로이드 앱의 콘텐츠가 포함되어 있다.
  • 안드로이드 지원 기기가 앱을 설치하는 데에 사용한다.

Android App Bundle

  • .aab로 끝나는 보관 파일이다.
  • 런타입에 필요하지 않은 추가 메타데이터를 비롯한 안드로이드 앱 프로젝트의 콘텐츠가 포함되어 있다.
  • AAB는 publising format으로 안드로이드 기기에 설치할 수 없다. APK 생성 및 서명을 다음 단계로 연기시킨다.

이런 상황에서 구글 플레이를 통해 앱을 배포한다고 하면, 구글 플레이 서버는 앱 설치를 요청하는 특정 기기에 필요한 리소스와 코드만 포함하는 최적화된 APK를 생성한다.


각 안드로이드 앱은 자체 보안 샌드박스에 상주하며, 다음 보안 기능으로 보호된다.

  • 안드로이드 운영체제는 각 앱이 서로 다른 사용자멀티 사용자 리눅스 시스템이다.
  • 기본적으로 시스템은 각 앱에 고유한 리눅스 사용자 ID를 할당한다.
    • 이 ID는 시스템에서만 사용하며 앱에서는 알 수 없다.
    • 시스템은 앱에 할당된 사용자 ID만 액세스할 수 있도록 앱의 모든 파일에 관한 권한을 설정한다.
  • 각 프로세스에는 자체 가상 머신이 있으므로 앱의 코드가 다른 앱과 격리된 상태로 실행된다.
  • 기본적으로 모든 앱이 앱 자체의 리눅스 프로세스에서 실행된다.
    • 안드로이드 시스템은 앱의 구성요소 중 하나를 실행해야 할 때 프로세스를 시작하고, 더 이상 필요하지 않거나 시스템이 다른 앱을 위해 메모리를 복구해야 하면 프로세스를 종료한다.

안드로이드 시스템은 최소 권한의 원칙을 구현한다. 기본적으로 각 앱은 작업을 실행하는 데 필요한 구성요소에만 액세스할 수 있으며 그 이상은 허용되지 않는다. 그러므로 앱은 안전한 환경에서 실행되며, 권한을 받지 못한 부분에 대해서는 액세스할 수 없게 된다.

그렇지만, 앱이 다른 앱과 데이터를 공유하고 앱이 시스템 서비스에 액세스하는 방법은 여러가지가 있다.

  • 두 앱이 동일한 리눅스 사용자 ID를 공유하도록 할 수 있다.
    • 두 앱은 서로의 파일에 액세스 가능하다.
    • 시스템 리소스를 절약하기 위해 사용자 ID가 동일한 앱은 같은 리눅스 프로세스에서 실행되는데, 그뿐 아니라 동일한 가상머신을 공유하도록 설정할 수도 있다.
    • 두 앱은 동일한 인증서로 서명되어야 한다.
  • 앱은 기기의 위치, 카메라, 블루투스 연결과 같은 기기 데이터에 액세스하기 위한 권한을 요청할 수 있다.

앱의 구성요소

안드로이드 앱의 필수 구성요소는 Activity, Service, Broadcast receiver, Content provider가 있다. 이는 시스템이나 사용자가 앱에 진입할 수 있는 진입점이다. 각 구성요소에는 생성 및 소멸 방식을 정의하는 고유한 수명주기가 있다.

각 요소에 대해서는 별도의 포스팅에서 정리한다.

  1. Activity
  2. Service
  3. Broadcast receiver
  4. Content provider

[TIL-240325]

0개의 댓글