1.resources.arsc
이것은 우리가 흔히 사용하는 일반적인 apk파일안에 포함돼 있는것입니다.(알집으로 열어보면 보입니다.)
그런데 apk파일을 "디컴파일"하면 이 resources.arsc라는 파일은 온데간데 없고, res폴더안에 value라는 폴더(values가 앞에 붙은 다른 폴더도 포함)가 생성됩니다.
바로 그 values가 앞에 붙은 폴더들이 resources.arsc입니다.
public.xml를 비롯하여 styles.xml/dimens.xml등 아주 중요한 xml을 포함하고 있는 apk파일의 핵심적인 디렉토리입니다.
하지만, 이 중요한 values라는 폴더는 디컴파일을 하지 않으면 볼수가 없습니다.
위에서 언급했지만 일반적인 apk파일 상태에서는 그냥 resources.arsc란 파일로 존재할뿐입니다.
고로...
apk파일을 디컴파일 하지 않으면 이 resources.arsc파일은 수정작업 자체가 안됩니다.
이번엔 거꾸로 디컴파일한 apk파일을 다시 "컴파일"하게되면, 컴파일된 apk파일안에는 values라는 폴더는 없고 원래의 resources.arsc파일만 존재하는것이죠.
테마사들이 "res/values쪽을 수정했을 경우엔 컴파일후에 resources.arsc를 기존apk파일안에 덮어씌우라"는 말이 바로 그 뜻입니다.
2.classes.dex
이것은 쉽게 말해서 smali라고 보시면 됩니다.(데오덱스apk파일에서의 개념)
위에 resources.arsc과 비슷한 개념으로...
데오덱스된 일반적인 apk파일을 열어보면 classes.dex라는 파일이 그안에 포함돼 있습니다.
framework경로의 .jar파일들도 마찬가집니다.
그런데 그 apk파일(또는 jar파일)을 "디컴파일(또는 baksmali)"하면, classes.dex라는 파일은 온데간데없고 smali라는 폴더가 생성되어있습니다.
그렇게 디컴파일후 생성된 smali폴더를 열어 원하는 smali를 수정작업한후 다시 "컴파일"하게되면 이번엔 smali라는 폴더는 온데간데없고 원래의 classes.dex파일이 떡~하니 있습니다.
그걸 원래의 파일에 덮어씌줘주면 되겠죠~.
》오덱스apk(또는 jar)파일에서의 classes.dex개념:
오덱스롬에 있는 apk파일(.jar)을 알집등으로 열어보면 데오덱스롬에 있는 apk파일과는 달리 classes.dex라는 파일이 없습니다.
그럼 그 녀석들이 대체 어디 있느냐?
바로 apk(jar)파일 밑에 같은 이름이지만 뒤에 확장자명 .odex로 찰싹 달라붙어있는 녀석들입니다.
그 odex파일안에 classes.dex가 들어있습니다.
apk파일과 그 밑에 찰싹붙은 odex파일을 데오덱스화 한 후 디컴파일(baksmali)하면 위의 데오덱스 apk파일과 같이 smali라는 폴더가 생성됩니다.그걸 수정작업하면 되겠죠~
그리고 다시 컴파일(smali)하면, smali라는 폴더는 없고 원래의 classes.dex라는 파일만 생성됩니다.
(일반적으로 테마사들은 작업과정이 조금 번거롭고 복잡한 오덱스롬보다는 데오덱스롬 테마작업을 선호합니다.)
〉보충설명:(사실 기본개념만 설명하고 이 부분은 설명안할려고 했는데...안할수가 없겠네요.지적해주신 흰고양이님 감사합니다.^^)
오덱스롬같은 경우는,
apk(또는 jar)파일과 odex파일을 데오덱스화하여 수정작업을 거친후에 다시 폰에 넣기위해선 별도의 추가 작업(오덱스화)이 필요합니다.
우선, 오덱스롬의 system/app경로에 있는 파일들은 컴파일후에 생긴 데오덱스화된 apk파일을 굳이 따로 오덱스화 시킬 필요는 없습니다.그냥 데오덱스화된 apk파일 그대로 system/app경로에 투척해준 후, 기존에 있는 .odex파일만 삭제(또는 이름 변경)해주면 됩니다.
그래도 굳이 odex파일을 만들고 싶은분들은, 일단 데오덱스화된 apk파일을 system/app경로에 넣고 재부팅한후에, data/dalvik-cache경로에 있는 해당 @classes.dex파일을 Total Commander어플같은걸로 odex파일로 만들어 투척해주면 됩니다.(이 방법은 AZdesign님 블로그에 가시면 아주 상세하게 잘 나와 있습니다.)
그런데 정말 중요한것은, system/framework경로입니다.
이 경로는 오덱스롬에 데오덱스화된 jar파일을 그냥 넣어선 안됩니다.
(이거..예전에 제가 어디선가 설명한것 같은데...ㅇㅅㅇ)
오덱스롬의 system/framework경로에는 반드시 .odex파일이 존재해야 합니다.
그렇게 하기 위해선 주로 adb push작업을 하는데 그건 추후 별도로 설명드리도록 하겠습니다.
(이 방법도 AZdesign님 블로그에 가시면 아주 상세하게 잘 나와 있습니다.)
▽결론;
resources.arsc는 디컴파일하면 res/values라는 폴더로 나타나고,
classes.dex는 디컴파일하면 smali라는 폴더로 나타나는 개념입니다.
둘 다 컴파일하면 원래의 파일로 나타나구요~^^
고로....
apk(jar)파일을 디컴파일(baksmali)하여 res/values쪽이나 smali쪽을 수정작업했다면,
컴파일후에는 resources.arsc나 classes.dex를 원본파일에 덮어쓰워주면 됩니다.
(제대로 설명이 됐는지..저도 쪼매 헷갈리네요..ㅎㅎ)
1.데오덱스 apk파일입니다.
2.저렇습니다.
3.디컴파일된 파일입니다.
4.smali가 생성돼 있습니다.(컴파일하면 저 smali폴더는 없고 classes.dex만 있습니다.)
5.res/values폴더가 있습니다.(컴파일하면 저 res/values폴더는 없고 resources.arsc만 있습니다.)