[Kotlin 깃북] Ch1 코틀린 안드로이드 이해하기
2. 안드로이드 아키텍쳐
소스 코드 작성에서 실행까지
(A) 소스 코드 작성: 코틀린으로 소스 코드 작성
(B) 설치 파일 생성: 명령을 통해 안드로이드에서 실행될 수 있는 설치 파일로 변환
(C) 업로드: 구글 플레이 스토어에 앱 업로드
(D) 앱 등록: 구글 플레이 스토어에 앱 등록
(E) 앱 설치: 스마트폰으로 구글 플레이 스토어 접속 -> 설치할 앱 설치
(F) 스마트폰에서 실행
코드가 스마트폰에서 실행되는 과정
(1) 빌드(컴파일 + 비밀번호)
- (A)소스 코드 작성 후 빌드를 통해 (B)설치 파일 생성
- 소스 코드를 바이트 코드로 변환 (java 컴파일러)
- APK 매니저에서 비밀번호를 가지고 있는 📌키 스토어와 조합하여 최종 설치 파일 생성
(2) 파일 검증
- 스토어에 파일을 (C)업로드하면, 구글 플레이 스토어에서 앱 검수 후 (D)앱 등록됨
- 설치 파일이 정상적으로 작동하는지, 보안 상의 분제는 없는지 등 검사
(3) 플랫폼 버전 체크
- (E)앱 설치를 위해 스마트폰으로 구글 플레이스토어에 접속하면, 스마트폰의 플랫폼 버전을 확인되어 다음 설치 가능한 앱의 목록만 보인다
(4) AOT 컴파일/설치 권한 체크
- (E)앱 설치 단계에서 APK 파일을 설치하면, 안드로이드 폰 내부 리눅스에서 실행 가능한 파일로 컴파일
- 이 과정에서 설치 시 필요한 권한 요청
(5) JIT 컴파일/실행 권한 체크
- (F)스마트폰에서 실행 단계에서, 처음 앱이 실행될 때 미리 컴파일되지 않은 파일을 호출하여 리눅스 실행 파일로 컴파일
- 이 과정에서 실행 시 필요한 권한 요청
바이트코드와 APK
- 바이트 코드: 코틀린 코드를 안드로이드 런타임(ART)에서 이해할 수 있도록 변환한 코드
- 📌APK: 안드로이드 설치 파일 확장명, 특정 앱의 APK 파일이 있으면 스마트폰에 해당 앱 설치 가능
📌안드로이드에서 컴파일을 2번 하는 이유
- AOT(Ahead-Of-Time) 컴파일:
- 설치시 모두 컴파일 -> 사용할 때 속도 빠름
- 컴파일 된 만큼 디스크 용량 차지 -> 많은 앱 설치 X
- JIT(Just-In-Time) 컴파일::
- 호출시 컴파일
-> 잠시 성능에 영향을 줄 순 있지만, 한번 컴파일된 이후로는 AOT와 동일한 속도
- 디스크 용량 적게 차지
- 두 컴파일 방식에 장단점이 있으므로, 안드로이드는 상황에 맞춰서 컴파일 두 번 한다
빌드
- 빌드(Build): 소스코드를 APK 파일로 만드는 과정
= 소스코드 기계어로 변환(컴파일) & 라이브러리와 연결(링크)하여 실행 파일로 만듦
안드로이드에서의 빌드
- 리눅스에서의 컴파일 vs 안드로이드에서의 컴파일:
리소스(resource) 존재 (ex. 이미지 파일, 음악 파일, 등)
(1) 바이트 코드 단계
- 소스코드, 리소스, 라이브러리까지 한 번에 컴파일
- 컴파일 결과: 안드로이드 플랫폼에서 인식 가능한 바이트 코드(.Dex 파일)
- 바이트 코드(.Dex 파일)는 스마트폰에서 바로 실행 불가능
(2) APK 파일 생성 단계
- (1)단계에서 생성된 .Dex파일 -> APK 매니저라는 도구로 개발자가 설정한 패스워드(키 스토어)와 조합 -> 설치파일(APK) 생성
설치와 실행
- 안드로이드의 아키텍쳐는 앱 설치-> 앱 실행-> 앱 종료까지 관여
참고자료
📌안드로이드 Key Store
안드로이드 스튜디오에서 KeyStore 생성하기
(1) 메뉴바 Build-> Generate Signed Bundle/APK
(2) 대화상자 -> Android App Bundle/APK 선택
(3) Key store path -> Create new
(4) New Key Store 창 -> Key store path 경로 -> 자신의 프로젝트 경로 선택
(5) New Key Store 창 -> 키 정보 입력
- Alias: 키 식별 이름
- Password: 키 암호 (안호 분실시 앱 업데이트 불가능)
- Validity(years): 키가 유효하게 유지되는 기간(년), 최소 25년
- Certificate: 인증서에 사용할 본인 관련 정보
(이 정보는 앱에 표시되지 X, 앱의 일부로 인증서에 포함됨)
(6) 앱 생성을 위한 JKS 생성 완료!
📌APK, AAB
-
2020년 11월에 구글이 '2021년 8월부터 구글 플레이 스토에 올라오는 모든 앱은 AAB 형식이어야 한다'고 선언
-
APK(Android Application Package): 이미 완성된 안드로이드 앱 파일
-
AAB(Android App Bundle): APK를 완성해주는 요소를 담은 패키지
-> 구글 플레이스토어가 사용자 기기에 어떤 내용이 필요한지 확인 후, 그에 맞춘 APK 파일을 만들어 배포
APK(Android Application Package)
- 안드로이드 OS에서 앱을 설치하는 용도로 주로 APK 파일 사용
- APK 파일만 있다면, 구글 플레이스토어에서 다운로드 받지 않아도 사용자가 디바이스에 앱 설치 가능
(하지만, APK 파일을 직접 다운로드하는 경우, 보안 취약)
- 일반적으로 APK는 하나의 파일 안에 여러개의 ABI(Application Binary Interface) 포함
- 이 ABI를 통해 많은 디바이스와 호환 가능
- APK 파일의 크기가 큰 이유
AAB(Android App Bundle)
-
구글이 2018년에 새로 소개한 안드로이드 앱 형식
-
구글 플레이스토어 서버에서 APK파일이 만들어지고, 서명되고, 배포된다
-
AAB의 장점: 앱의 크기가 줄어든다(앱 크기 평균 15% 감소)
-
AAB의 단점: 보안에 대한 우려
(APK 파일에는 개발자의 서명 파일이 들어가지만, AAB 파일은 구글 플레이가 대리 서명)