[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 형태를 취해야 한다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Google Sign In 코드 짜기 #2 (0) | 2018.02.23 |
---|---|
[android] Google Sign In 준비하기 #1 (2) | 2018.02.22 |
[android] earphone(headset) plug or unplug intent action (0) | 2018.01.22 |
[android] Build 할 때 MissingTranslation 관련 에러가 난다면.. (0) | 2018.01.21 |
[Java] Jit Compiler 에 대한 이야기 (0) | 2018.01.14 |
댓글