APK파일은 프로젝트 -> app -> build ->outputs->apk 에서 확인 할수있다.
그럼 이런 APK파일은 어떻게 만들어지는 것일까-?
앞에 그림을 보면 상당히 복잡한 구조로 APK 파일이 만들어지는 것을 확인할 수 있다.
천천히 단계별로 살펴보자.
맨처음은 컴파일 단계로 앱 내의 리소스 관련 파일과 AIDL(android interface description language의 약어로 안드로이드에서 프로세스 사이에 통신이 필요한 경우 필요한 인터페이스를 정의하는 언어 일반적으로 서로 다른 앱에서 통신이 필요한경우 자주 사용 한다.) 파일들이 .java로 각각 aapt 툴과 aidl 툴에 의해서 변환되어 Application Source Code에 해당되는 .java 파일들과 함께 자바 컴퍼일러를 통해 .class 파일로 만들어 진다.
그리고 .class 파일은 DEX툴에 의해 .dex 파일을 만든다. 참고로 .dex파일은 윈도우의 .exe와 같은 안드로이드 실행 파일이라고 할수 있다.(물론 dvm 에서 실행된다.)
결론적으로 리소스에 해당하는 R.java와 Appication Source Code에 해당하는 .java 파일은 자바 컴파일러를 통해 .class 파일로 생성되고 DEX Tool을 통해 안드로이드 달빅 가상 머신에서 동작할수 있는 .dex 파일로 만들어 진다. 그리고 여기까지가 컴파일 단계이다.
다음 단계는 2단계인 패키징 단계이다. 패키징은 앱에서 사용되는 여러 파일들을 보호하기 위한 것과 배포를 쉽게하기위해 사용되는 것으로, Android Project에서 생성된 .dex 파일과 리소스 파일들을 하나로 묶어 .apk 파일로 만들어 주는 과정이다. 그러나 패키징으로 만들어진 .apk 파일은 안드로이드 기기에서 설치 되지 않는다. 그 이유는 서명되지 않았기 때문이다.
3단계인 서명 단계는 패키징으로 만들어진 .apk 파일을 JarSigner 툴에서 서명을 해주며 마무리되는데, 왜 안드로이드는 이런 서명 과정을 필요로할까 ? 기본적으로 배포된 .apk파일이 개발자 자신이 만든 것임을 나타내주고 악의적인 목적으로 수정하여 개발자를 사칭하여 배포하는 것을 방지하기 위함이다. 위조 , 변조에 대해서 방지하는 것은 힘들지만 최소한 개발자를 사칭할수 없도록 방지하기 위함이다.
어쨌든 JarSigner를 통해 서명이 완료되면, 안드로이드 기기에 설치하는 것은 문제가 없다.
하지만 구글 플레이 스토어에 배포하기 위해서는 한가지 과정을 더 진행해야한다. Zipalign이다. 이 과정은 안드로이드에서 리소스를 읽을 때 더 빠르고 효율적으로 읽기 위해 제공되는 툴로 이 과정이 끝나면 구글스토어에 배포할수 있다.
평소에 어플을 만들때 apk 추출좀 해줘~ 라는 말을 듣곤한다.
그 과정에서 보이진 않지만 이런 많은 과정들이 숨어있다!
'Android' 카테고리의 다른 글
Grab, Kakao T 같은 모빌리티 샘플 앱 구현하기 (0) | 2020.06.29 |
---|---|
안드로이드 Q (API 29) 관련 파일 저장 퍼미션 문제 (0) | 2019.11.17 |
커스텀 다이얼 로그를 만들어 보자(왕왕초보자) (0) | 2017.06.12 |
인텐트 및 인텐트 필터에 대해 알아보자. (0) | 2017.05.06 |
초보 개발자의 아주 간단한 커스텀 뷰 개발기 (0) | 2017.05.01 |