Liliniser
10.09.05
조회 수 50873
추천 수 10
댓글 28
<###
odex 파일에 관한 일반적인 설명 ###>


기본적으로 안드로이드는 자바 기반의
가상머신을 프로그램 실행의 기본으로 삼습니다. 이녀석이 바로 Dalvik이라는 넘입니다.
dex파일이란 녀석은 달빅머신에 의해 사용되는
Dalvik-cache 를 포함하고 있는데요. 이는 apk파일 안에 들어있습니다.

odex파일은 dex파일을 기기 특성에 맞게
최적화하여수정하여 apk의 안에 넣지 않고 apk와 나란히 저장되는 녀석이고, 기본 시스템 어플리케이션들은 모두 apk+odex 형식으로
저장되어 있습니다.

하나의 odex 파일이 생성될 때 BOOTCLASSPATH라는 파일을
불러오고 여기서 이 odex는 해당 BOOTCLASSPATH 파일들에 의존성을 가지게 됩니다. 그러므로
이 odex가 유효하게 사용되기 위해서는 의존성을 가지는 정확한 BOOTCLASSPATH 파일들이 함께 하여야만 하는
것이지요
.
Dalvik은 각각의 odex 파일이 의존하고 있는 녀석들의 checksum을 저장하고 있다가 해당 odex
파일이 사용될 때 BOOTCLASSPATH와의 checksum이 매치가 되는지 단단히 확인을 합니다.

BOOTCLASSPATH는
메인 어플/jar가 로드될 때 추가적으로 클래스를 불러올 수 있는 jar와 어플들의 리스트입니다.
보통의 안드로이드 시스템에는 5개의 기본
BOOTCLASSPATH가 있습니다.
android.policy.jar, services.jar> (-> /system/framework 에 있는 것들이죠)
기본
BOOTCLASSPATH라 함은, 모든 어플들이 이 5개를 기본적으로 참조한다는 말이겠죠?
그러나 몇몇 어플들은 이 기본 jar들 외에
다른 녀석에게 의존성을 가지기도 합니다.
예를 들어보면, 구글 지도를 사용하는 어플리케이션은 위의 기본 5개외에
com.google.android.maps.jar 라는 파일에 의존성을 가지고 있으므로 이를 반드시 BOOTCLASSPATH에 추가해 주어야
한다는 것입니다.

이런 odex의 의존성은 여러 가지 불편한 점이 있습니다.
1) 예를 들어 갤럭시S의
apk+odex를 갤럭시K에 가져와서 실행할 수 없습니다. (익히 알고 계시죠?)
-->> 이 것이 가능하려면
갤럭시K가 갤럭시S와 똑같은 프레임워크 파일들을 사용해야 합니다.
2) BOOTCLASSPATH중 하나에 수정을 가하게 되면 이
녀석에 의존하고 있는 모든 odex 파일들이 사용 불가가 됩니다.


<### Deodex란? ###>

Deodex를 한다는 것은
이렇게 밖으로 나와있는 odex파일들을 apk파일 안으로 되돌려 넣는다는 것을 말합니다. 이를 적용하게 되면 기본적으로 odex파일을 걱정할
필요 없이 쉽게 파일들을 바꿀 수 있습니다. 하지만 이 행위의 주된 목적은 services.jar파일을 deodex함으로써 모든 텍스트의
색깔같은 테마를 변경하는 것이 가능하게 하는 것입니다.
많은 테마변경을 하고자
한다면 롬은 반드시 deodex가 되어야 합니다. 예를 들자면 커스텀 lockscreen 같은 것들은 보통 deodex된 롬을 필요로 합니다.
deodex를 하지 않고서도 몇 가지 테마 수정을 할 수는 있지만, deodex를 하게 됨으로써 더욱 더 많은 변경을 할 수
있습니다.


deodex는 단지 위의 조각들을 원래 어플의 안으로 되돌려 넣는 행위입니다. 이로 인한 장점은
어플들이 효과적으로 수정될 수 있는 점과, 개발자들로 하여금 나눠져 있는 코드의 odex부분때문에 곯머리 썩지 않아도 된다는
것입니다.


결론은 deodex는 odex를 dex로
재컴파일한 다음에 apk 안에 다시 쑤셔 넣는 것을 말합니다.


<### Zipalign이란? ###>

Zipalign을 하게 됨으로써 안드로이드는 어플리케이션과 조금 더 효율적으로 상호작용을 할
수 있게 됩니다. 따라서 이로 인해 전체적인 시스템과 어플리케이션의 실행을 빠르게 할 수 있습니다. 구글에서는 Zipalign을 강하게
권유하는군요. 그래서 했습니다. -_-)

안드로이드에선, 각각의 어플에 적재된 데이터 파일들이 다중 프로세스에 의해 이용됩니다. 홈
어플리케이션은 다른 어플의 이름과 아이콘에 관한 자원을 읽어들이고, 시스템 서버는 다양한 이유때문에 어플의 자원을 읽습니다. 그리고 명백하게,
어플 자기 자신도 자원들을 읽습니다.
안드로이드의 이 자원관리 코드는 4바이트 경계들로 메모리-맵핑
(Wh.....What?..-0-)되었을 때 효율적으로 이용될 수 있습니다. 하지만 이 자원들이 4바이트 정렬이 되지 않는다면, 즉
zipalign이 되지 않는다면, 이를 명확하게 읽기 위한 과정이 필요하므로 약간의 느려짐과 추가적인 메모리 소비를
보입니다.

따라서 우리는 zipalign 툴을 이용해 어플리케이션 자원들을 4바이트로 정렬하는 것입니다.


댓글 28
댓글 쓰기 권한이 없습니다.
List of Articles
제목 글쓴이 추천 조회 날짜
롬쿠킹 Project Voodoo (1) Kenny 2 6213 2010.10.20
롬쿠킹 =_= 아이디어 하나 올려봅니다. 초리 2 3909 2010.10.22
롬쿠킹 동영상 배속.... 갤갤스 1 5025 2010.10.24
롬쿠킹 갤럭시S DI29 펌과 안드로이드 SDK 문의드려요 Muzik 1 5307 2010.10.25
롬쿠킹 안드로이드상에서 동작하는 gcc? HTC_Kovsky 1 4959 2010.10.27
롬쿠킹 [삼성 펌웨어 업그레이드 프로젝트] KIES와 함께하는 신나는 해킹! 13 Liliniser 1 14402 2010.11.04
롬쿠킹 안드로이드 기본 브라우저의 고해상도 이미지 출력 불가 현상 HTC_Kovsky 1 7184 2010.11.06
롬쿠킹 [re] 알아두시면 좋은 몇 가지 지식들 28 Liliniser 10 50873 2010.09.05
롬쿠킹 [re] [Voodoo] 버그 리포팅을 받겠습니다. 5 Liliniser 3 11895 2010.09.17
일상 초보님들이 보셨으면하는 글들 링크 100 LavI 80 59436 2011.04.19
일상 갤럭시s 초보공략 Part1 ver1.0 by dydx 148 dydx™ 160 50082 2011.03.21
질문 베가x 진저 업글 후 카메라 좌우반전 해결 5 file 치킨한박 8566 2011.11.29
질문 LG U+ 베가레이서 리비전b 7 까지늠 4860 2011.11.06
질문 베가레이서 부팅 안됨과 무한 재부팅을 위한 공장초기화 & 강제 셀프 ... 3 택이ㅋ 1 27998 2011.10.30
질문 KT 베가X 루팅 후 벽돌 및 무한재푸팅시 간단한 해결방법!!!^^ 4 하늘아리 3 10933 2011.02.15
일상 (수정) 정모를 꿈꾸는 회원님들께 드리는 두 가지 팁^^이에용 33 닉넴이뭐 7 2066 2011.02.12
질문 apk매니저 디컴파인,컴파인 오류ㅠㅠㅠㅠ 카톡리팩 1 내사랑비 3382 2012.04.02
질문 ICS 업그레이드 후 옵티머스Q 지식사전 실행오류 관련 문의 드립니다. 3 좌묵 7813 2012.03.26
질문 갤투 글자색 변경하는 경로 좀 알고 싶습니다. 스샷 file 스카이740 1231 2012.03.24
질문 갤럭시s맛클테마적용후 오류. 지금바로 986 2012.03.24
질문 겔럭시s2 skt통메 db를 넥서스s db로 변환 가능할까요? 엘피스 1372 2012.03.24
질문 모비낸드펌 질문드립니다 !! 1 HunX2 1693 2012.03.24
질문 KT갤럭시s2 system/app/Video Player.apk파일 구합니다..ㅠㅠ(EL02) 1 아트라스 1285 2012.03.23
질문 갤럭시s2용 cwm wodnjs95 1264 2012.03.23
질문 갤럭시HD lte (U+) 통합테마 만들어주실분없나요? 1 지야최고 924 2012.03.23
질문 테그라크 오버클럭 1 위스퍼러 946 2012.03.23
질문 복구 방법 찾습니다.. 2 아이쏘 893 2012.03.23
질문 테그라크커널 이용 루팅시 커널버전과 빌드번호가 다르면 어떻게 하나... 1 아트라스 4072 2012.03.23
질문 갤럭시s ics 1 따뜨탄콜 1096 2012.03.23
질문 framework-res.apk 스트링 3 hong5869 991 2012.03.23
1 - 3065 - 5850