본문 바로가기

안드로이드 프로그래밍/kotlin

[Android Studio] 02. 안드로이드 아키텍처 - 컴파일, 빌드, 런타임, APK

▼ 코드는 어떻게 앱으로 만들어지고 스마트폰에서 실행 될까?

1. 소스 코드 작성 : 코틀린으로 소스 코드를 작성

2. 설치 파일 생성 : 명령을 통해 안드로이드에서 실행될 수 있는 설치 파일의 형태로 변환

3. 업로드 : 구글 플레이 스토어에 앱을 업로드

4. 앱 등록 : 구글 플레이 스토어에 앱을 등록

5. 앱 선택/설치 : 스마트폰으로 구글 플레이 스토어에 접속한 다음 설치할 앱을 선택/설치

6. 스마트폰에서 실행 : 아이콘을 터치해서 앱을 실행

 

 

 

 

▼ 코드가 스마트폰에서 실행되는 과정

 

① 빌드(컴파일 + 비밀번호) : [B. 설치 파일 생성] 단계는 빌드를 통해 진행

- 이 과정에서 먼저 소스 코드를 바이트코드로 변환하여 APK 매니저에게 비밀번호를 가지고 있는 키 스토어와 조합해서 최종 설치 파일을 생성

 

② 파일 검증 : [C. 업로드] 단계로 단순히 파일을 업로드하는 데서 끝나는 게 아니라 구글 플레이 스토어에서 앱을 검수하는 과정을 거침

- 이때, 설치 파일이 정상적으로 동작하는지, 보안상의 문제는 없는지 등을 검사

 

③ 플랫폼 버전 체크 : [E. 앱 선택] 단계

- 스마트폰으로 구글 플레이 스토어에 접속하면 스마트폰의 플랫폼 버전을 확인한 다음 설치 가능한 앱의 목록만 보여줌

 

④ AOT 컴파일 / 설치 권한 체크 : [E. 앱 설치] 단계

- APK파일을 설치하면 리눅스에서 실행 가능한 파일로 안드로이드폰 내부에서 한 번 더 컴파일 함.

- 이 과정을 통해 실행 속도가 빨라지며 사용자에게 기능의 사용 권한을 요청함.

 

⑤ JIT 컴파일 / 실행 권한 체크 : [F. 스마트폰에서 실행] 단계

- ④에서 설치할 때는 필요한 파일만 컴파일 함, 그리고 첫 번째 앱을 실행할 때 미리 컴파일되지 않은 파일을 호출하면서 리눅스 실행 파일로 컴파일 함. 그리고 권한 중에 '실행 시 권한'이 포함되어 있으면 해당 코드가 동작해서 사용자에게 확인 요청을 함

 

* 바이트 코드 : 우리가 작성한 코틀린 코드를 가상 머신인 안드로이드 런타임에서 이해할 수 있도록 변환한 코드

* APK : 안드로이드 패키지의 줄임말로, 안드로이드 설치 파일의 확장자명으로 사용됨. 특정 앱의 APK 파일이 있으면 스마트폰에 수동으로 해당 앱을 설치할 수 있음

 

 

 

▼ 빌드 

 

- 빌드 Build 

  • 소스 코드를 변환해서 안드로이드에서의 실행 파일인 APK 파일로 만드는 것
  • 소스 코드를 기계어로 변환한 후 라이브러리와 연결해서 실제 실행 파일로 만드는 과정
  • 안드로이드는 리눅스 커널 기반이므로 리눅스 시스템에서의 빌드를 이해하는 것이 좋다.

 

- 컴파일 Compile

  • 사람이 읽을 수 있는 형태의 소스 코드를 컴퓨터가 읽을 수 있는 형태의 기계어로 변한해주는 과정
  • 컴퓨터는 기계어만 이해하고 동작하는데 이 기계어의 구조를 사람이 이해하는 것이 어려워 C, 자바, 코틀린 과 같은 컴퓨터 언어가 생겨난 것

 

- 리눅스에서의 빌드

  • 소스 코드를 컴퓨터가 읽을 수 있는 기계어로 번역(컴파일)하고, 내가 만든 소스 코드에서 사용하는 라이브러리와 연결(Link)해서 최종 실행 파일 형태로 만드는 것

 

 

 

- 안드로이드에서 빌드

리눅스 컴파일과의 차이점은 안드로이드에는 리소스(Resource) 라는 개념이 있다.

 

 

안드로이드는 2단계로 컴파일

º1단계 : 바이트코드 단계

다음 그림과 같이 소스 코드와 리소스(이미지 파일, 음악 파일 등), 라이브러리까지 한 번에 컴파일 해줌,

이때 생성된 파일은 안드로이드 플랫폼에서 인식할 수 있는 바이트코드로 컴파일 됨,

이 파일은 스마트폰에서 바로 실행할 수 없다.

 

º 2 단계 : APK 파일 생성 단계

안드로이드의 빌드는 1단계에서 생성된 파일을 APK 매니저 라는 도구로 개발자가 설정한 패스워드와 조합해서 설치 파일인 APK 파일로 만들어 줌.

 

=> 이렇게 1단계와 2단계를 모두 거쳐 APK 파일이 생성된 과정을 빌드라고 함.

 

 

 

* APK 와 AAB
- AAB 는 안드로이드가 새롭게 제안하는 APK 파일을 대체하는 빌드 파일 형태
구글 플레이 스토어에 AAP 파일 형태로 앱을 등록하면 사용자가 앱을 다운로드할 때 사용자의 디바디스에 필요한 모듈만 골라서 APK 파일로 다시 생성 해줌. 

 

 

 

 

▼ 설치와 실행

- 우리가 설치하는 앱이 가장 상단에 있는 애플리케이션 영역에서 동작하고, 안드로이드는 중간에 있는 안드로이드 런타임 영역에서 개발자가 만든 앱을 제어한다.

 

안드로이드 아키텍처

- 위 그림의 우측 위에서부터 순서대로 앱을 설치하면 설치 파일의 일부가 리눅스 운영체제에서 실행할 수 있는 파일 형태로 한 번 더 (이미 빌드 시에 한 번 컴파일 된 상태) 컴파일 되는데 이런 구조를 AOT (Ahead Of Time) 이라고 함.

→ 플랫폼 버전 5.0 롤리팝에서는 이와 같이 모든 파일이 설치 시 컴파일 되는 형태였다가 효율성의 문제로 일부만 컴파일되는 형태로 변경

 

- JIT (Just-In-Time) : 앱을 실행하면 호출되는 파일 중에서 컴파일되지 않았던 파일이 한 번 더 컴파일 되는 구조

 

=> 안드로이드는 AOT 와 JIT 라는 2개의 컴파일 형태를 같이 사용함으로써 효율성을 높이고 있다.

 

* 안드로이드는 왜 컴파일을 두번이나 할까?

AOT 컴파일을 하면 설치 시 모두 컴파일되므로 사용할 때 속도는 빠르지만, 컴파일된 파일만큼 디스크의 용량을 차지한다. 즉, 많은 앱을 설치할 수 없다. 
반면에, JIT 컴파일을 하면 호출 시 컴파일되므로 잠시 성능에 영향을 줄 수는 있지만 한 번 컴파일된 이후로는 AOT와 동일한 속도를 내고, 디스크의 용량을 적게 차지한다.

이 두 컴파일 방식은 각기 장단점이 있으므로 안드로이드는 상황에 맞춰서 컴파일을 두 번 한다.  

 

728x90
반응형