-
[안드로이드] 안드로이드 런타임(ART), APK안드로이드(java)/기타 등등 2019. 7. 14. 14:36
안드로이드 앱은 오라클의 자바 가상 머신(JVM)이 아니라 안드로이드 런타임(ART) 이라 불리는 가상 기기에서 실행됩니다.
ART는 컴파일된 코드를 안드로이드 디바이스에서 실행하는 시스템입니다.
킷캣 버전의 안드로이드에서 처음으로 ART가 등장했으며 롤리팝부터는 코드 실행 표준으로 자리 잡았습니다.
안드로이드 앱을 개발할 때 자바 소스 코드는 .dex 파일로 컴파일됩니다.
.dex 파일은 실행할 수 있는 바이트코드를 포함하므로 JVM의 .class 파일과 비슷한 역할을 합니다.
하지만 .dex는 JVM 바이트코드가 아니라 달빅(Dalvik)이라 부르는 다른 종류의 바이트코드를 포함합니다.
DEX는 달빅에서 실행할 수 있는 (Dalvik EXcutable)의 약자입니다.
안드로이드에서는 각각의 클래스 파일에 대응하는 .dex 파일을 생성하지 않고 모든 클래스를 컴파일해 classes.dex 라는 한 개의 파일을 만듭니다.
이 한개의 .dex 파일에 앱의 모든 소스코드와 라이브러리가 들어있습니다.
DEX 는 최대 65,535 메서드를 처리할 수 있으므로 앱에 코드가 많거나 큰 라이브러리를 포함하면 여러 .dex 파일로 분할해야 합니다.
안드로이드가 앱을 빌드할 때는 .class 파일을 DEX 파일로 연결하는 dx 라는 도구를 사용합니다.
안드로이드는 .dex 파일에서 끝나지 않습니다. 앱을 구성하는 이미지, 소리, 메타데이터등의 다른 파일들이 있기 때문입니다. 모든 리소스 파일과 DEX 바이트코드는 안드로이드 패키지 또는 .apk 파일이라고 부르는 한 개의 zip 파일로 압축됩니다.
안드로이드 애셋 패킹 도구(Android Asset Packing Tool) 또는 aapt 라고 부르는 다른 도구로 .apk 파일을 생성합니다.
☆ 해당 내용은 Head First Android Development 책에서 참고하였습니다.
'안드로이드(java) > 기타 등등' 카테고리의 다른 글
[안드로이드] androidX 란? (0) 2020.01.05 [안드로이드] 안드로이드 스튜디오 지난 버전 다운로드 하기 (0) 2019.07.26 [안드로이드 ] 에뮬레이터 화면 회전이 적용되지 않을 때 (0) 2019.05.30 [안드로이드] SHA-1 인증서 추출하기 (0) 2019.05.27 [안드로이드] gradle에 라이브러리 추가하는 implementation 종류 (0) 2019.01.19