https://developer.android.com/guide/components/fundamentals
 

이 문서는

  앱 작성 언어(Kotlin, java, c++),

  실행 파일(apk, aab),

  시스템 보안(linux base, plop, component),

  데이터 공유, 시스템 자원 접근 방법 에 대해 설명한다.


요약

개발언어 

  • Kotlin(Java, C++) 언어로 코드 작성

실행파일

  • 안드로이드 SDK를 사용해 코드 컴파일
  • apk, aab 파일이 생성
  • apk 파일은 기기에 바로 설치가능,
  • aab 파일은 바로 설치가 안되고 구글 플레이 스토어를 통해 한다.

시스템 보안(security)

  • 안드로이드는 멀티유저 리눅스 OS를 기반
    • 각 앱다른 사용자가 된다.
    • 각 앱에게 시스템만 알 수 있는 리눅스 user ID가 주어진다.
    • user ID를 통해 파일 접근 권한이 설정된다.
    • 각 app(user) 마다 따로 VM을 제공
    • 모든 앱은 자신의 리눅스 프로세스에서 실행된다.
      • 앱은 component 들로 구성
        component 중 하나라도 실행이 필요하면 앱을 실행
        실행되는 component가 없다면 앱을 종료
       
  • 안드로이드 시스템의 PLOP(principle of least privilege)
    • 안드로이드 시스템은 앱에 최소 권한의 원칙을 적용한다.
    • 원칙 적용을 위해 component 라는 것을 만들었다.
      component는 명확하게 목표만을 수행하는 객체이다.
      앱은 이 component 들이 모여 만들어진다.
    • component 기반 환경은
      앱이 시스템의 특정 자원을 사용하기 위해서는 반드시 permission을 얻어야
      사용 할 수 있는 굉장히 안전한 환경이 만들어 진다.

데이터 공유, 시스템 자원 접근 방법

  • 두 개의 앱이 서로의 자원을 자유롭게 사용 방법:
    서로 같은 인증서로 서명하면 된다.
    앱이 서로간의 데이터를 제한없이 공유 할 수 있다. (같은 linux ID가 할당되기 때문)
  • 시스템 자원 접근 방법:
    명시적으로 자원에 대한 권한을 시스템에 요청 할 수 있다.
    사용자가 이를 허용하면 접근 가능.

본문

안드로이드 앱은 코틀린, 자바, C++를 사용해서 작성 할 수 있다.

 
안드로이드 SDK 툴은 작성한 코드와 리소스 파일을 컴파일하여
APK 또는 Android App Bundle 파일을 생성한다.
 
안드로이드 패키지(.apk)
런타임(앱 실행 시)에 필요한 내용들을 담고 있고,
안드로이드 기기에 앱을 설치하는데 사용하는 파일이기도 하다.

 

안드로이드 앱 번들(.aab)
안드로이드 앱 프로젝트의 내용을 담고 있고,
런타임시 필요없는 추가적인 메타 데이터들을 포함하고 있다.
 

 

 

 

 

 

AAB는 기기에 직접 설치 할 수 없다.
이 파일은 APK생성과 서명을 나중에 진행 한다.
 
예를 들어 구글 플레이를 통해 앱을 배포 할 때,

구글 플레이의 서버는 기기에

오직 필요한 코드와 리소스만을 담은
최적화된 APK를 생성한다.

 

 

 

 

 

 

각 안드로이드 앱은

아래의 안드로이드 보안 특징들로부터 보호되는
보안 샌드박스에 존재한다.

  • 안드로이드 OS는 
    각 앱이 하나의 사용자인
    리눅스 멀티유저 시스템이다.

  • 기본적으로
    시스템은 각 앱에 유일한 리눅스 사용자 ID를 할당한다.
    이 ID는 시스템만 사용하며, 앱은 알지 못한다.
    시스템은 앱의 파일 접근 권한을 이 ID를 통해 허용한다.

  • 각 프로세스는 자신의 VM을 갖는다.
    그러므로 코드는 다른 앱들로부터 독립되어 실행된다.

 

 

 

 

 

안드로이드 시스템은 최소 권한의 원칙을 구현한다.

 

각 앱은 기본적으로 오로지
요청한 작업 외에는 하지 않는
컴포넌트에만 접근 할 수 있다.
 
이것은
앱이 권한을 부여받지 않는 한
시스템에 접근 할 수 없는

매우 안전한 환경을 만든다.
 

 

 


하지만
1) 다른 앱들과 데이터를 공유하고
2) 시스템에 접근 할 수

있는 방법이 있다.
 

  • 두 앱이 데이터 공유를 위해
    같은 리눅스 사용자 ID를 할당 할 수 있다.
    서로의 파일에 접근이 가능해진다.

    시스템은 자원을 아끼기 위해
    같은 사용자 ID를 쓰는 앱은
    프로세스VM도 함께 사용한다.

    앱은 반드시 같은 인증서로 서명되어야 한다.

  • 앱은
    블루투스, 카메라, 위치와 같은 기기의 데이터에 접근을 위해
    권한을 요청 할 수 있다.

    사용자는 명시적으로 권한을 요청해야 한다.

기타

apk vs aab
apk 파일은 안드로이드 기기에 바로 설치 할 수 있어,
하지만 모든 리소스가 담겨있어 용량이 크다.

반면, aab 파일은 설치 할 수도 없고 파일 자체는 APK파일과 용량도 비슷 할 것이다. 
하지만 플레이스토어와 같은 서비스에서는

이 파일을 다운 받는 기기마다 최적화된 APK를 만들어줘
앱을 다운 받는데 사용하는 네트워크, 서버 비용을 아낄 수가 있다.

+ Recent posts