[Kotlin 깃북] Ch1 코틀린 안드로이드 이해하기 2. 안드로이드 아키텍쳐

0
post-thumbnail

[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 파일은 구글 플레이가 대리 서명)

profile
Be able to be vulnerable, in search of truth

0개의 댓글