본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] odex 에 대해 알아보자.

by 돼지왕 왕돼지 2018. 1. 24.
반응형

 [android] odex 에 대해 알아보자.


Android, android.policy.jar, apk, apk + odex, bootclasspath, cache save, classes.dex, CODE, core.jar, dalvik cache, dalvik jvm, data/dalvik-cache, deodex, eng mode, ext.jar, Framework, framework.jar, jar, odex, Pair, parse, preprocessed, release, reodex, services.jar, suer mode, system/app, Theme, theme 적용, zip, [android] odex 에 대해 알아보자., 디오덱스, 시스템 앱

-

Android 앱은 ZIP 형태로 압축된 apk 에 담겨져 있다.

이 apk 파일을 압축해제해보면 classes.dex 라는 파일이 있는데, 이 파일에 code 가 들어 있다.

이 파일이 Dalvik JVM 에 의해 parse 가 되고, Dalvik cache 에 저장이 된다. ( /data/dalvik-cache/ 폴더에 저장 )

parse & cache save 과정 때문에 최초 실행은 조금 오래 걸릴 수 있는 것이다.



-

odex 는 classes.dex 의 pre-processed 된 버전이라고 볼 수 있다.

즉 Dalvik 이 바로 실행될 수 있는 형태의 dex 라고 보면 된다.

앱이 odex 화되면, apk 압축파일에서 classes.dex 는 제거되고, 이후에는 해당 apk 로부터 Dalvik cache 에 무언가를 쓰는 일은 발생하지 않는다.

그리고 odex 는 apk 와 짝을 이루고 있다.


만약 odex 가 있어도 apk 파일 안에 classes.dex 파일이 있다면, Dalvik cache 에 저장하는 과정은 또 실행이 된다.



-

apk 나 jar 가 classes.dex 를 포함하고 있는 상태를 디오덱스(deodex)화된 상태로 말한다.



-

기본 시스템 앱들은 모두 apk + odex 형식으로 저장되어 있다.

framework 의 user mode 에서 존재하며, eng mode 에서는 존재하지 않는다.

/system/app 안에 존재한다.



-

odex 는 해당 시스템에 최적화된 형태이기 때문에, 이 녀석을 다른 프레임워크 & 기기에서 사용할 수 없다.



-

odex 파일은 BOOTCLASSPATH 와 pair 를 이룬다.

이 BOOTCLASSPATH 는 앱이나 jar 가 로드될 때 추가적으로 클래스를 불러올 수 있는 jar 와 앱의 리스트이다.


보통 안드로이드에는 5개의 BOOTCLASSPATH 가 있다.

core.jar, ext.jar, framework.jar, android.policy.jar, services.jar 이다.

모든 앱이 위의 5개 jar 를 참조한다는 말이고, 추가로 jar 를 사용하는 경우에는 이 파일에 해당 jar 가 추가되어야 한다.



-

theme 을 사용하는 경우에는 odex 를 deodex -> theme 적용 -> reodex -> release 형태를 취해야 한다.




반응형

댓글