※ 이강좌는 혼자 연구하면서 알게 되는 과정을 차근차근 재구성한겁니다..









(아무도 안알려주고...우씽...)



이번 강좌는 순정 시스템 apk파일을 디컴파일 할때 에러가 나면서 디컴파일 되지 않는

파일을 디컴파일 하는 방법을 알려드리겠습니다.

먼저 준비물이 필요합니다.

* Java SE Development Kit 6u21

* apk manager

* framework-res.apk 파일

* twframework-res.apk 파일

* phone.apk 파일 (강좌를 보며 따라할수있는 디컴파일 되지 않는 apk파일)

- Java SE Development Kit와 apk manager가 없으신분은 http://toforyou.tistory.com/55 이곳에서 받으시기 바랍니다.

테마를 제작하시거나 개발자분이시라면 시스템어플들을 한번씩은 디컴파일 시도해보신 경험이 있으실겁니다.

하지만 일부 apk파일은 오류가 나면서 디컴파일이 되지 않습니다.

대표적인 예로 phone.apk파일이나 Contacts.apk, Settings.apk 등이 있는데요

이 강좌를 보시면 디컴파일이 되지 않아 압축풀고 이미지만 바꿔야 했던거와는 달리

세부적인 수정도 가능해질겁니다.

예제로 보기 위해서 일단 phone.apk파일을 디컴파일 시도해봅시다.

먼저 apk manager 파일을 압축푸시고 준비물인 phone.apk 파일을

apk manager 안에 place-apk-here-for-modding폴더에 넣고

Script.bat 실행합니다.









먼저 22번을 눌러서 phone.apk파일을 선택해야합니다.








phone.apk파일이 선택되셨으면

9번을 눌러서 디컴파일 해줍니다.











그럼 디컴파일이 되다가 다음과 같이 에러가 납니다.

Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.
"An Error Occured, Please Check The Log (option 21)"

대충 해석해보면 프레임워크 리소스 파일에서 2번대의 id를 찾을수 없다는 말을 합니다.

아까 apk manager를 압축풀었던 폴더에 가보시면 log.txt 파일이 생성되어있습니다.

이유를 알기 위해 log.txt 파일을 분석해봐야합니다.

모든 안되는 이유는 이 log.txt파일에 나와있거든요




#############################################################################################################

--------------------------------------------------------------------------
|2011-02-17 -- 0:24:42.38|
--------------------------------------------------------------------------
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)
'adb'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.
C:apkplace-apk-here-for-modding../place-apk-here-for-modding/signedPhone.apk을(를) 찾을 수 없습니다.
C:apkplace-apk-here-for-modding../place-apk-here-for-modding/unsignedPhone.apk을(를) 찾을 수 없습니다.
1. I: Loading resource table...
W: Skipping "android" package group
I: Decoding resources...
2. I: Loading resource table from file: C:UsersBlueapktoolframework1.apk
3. W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textColor, value=0x0205009a
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000f
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textColor, value=0x0205009a
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000e
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000f


#############################################################################################################



다음과 같이 나와있습니다.

1. 번에서는 resource 테이블을 로딩한다고 나와있습니다.

resource 파일 뭔지 기억하시나요??

제가 http://toforyou.tistory.com/55 이강좌에서 설명드렸습니다. resources.arsc이파일은 모든 ID의 집합체라구요

2. 번을 보시면 C:UsersBlueapktoolframework1.apk 파일에서 resources.arsc를 불러 온다고 합니다.
(이 폴더는 컴퓨터마다 다릅니다. 꼭 log.txt에서 자신의 폴더를 확인하세요)


3 번을 보시면 그 리소스에서 0x0207000d id를 찾을수 없다는 말을 합니다.

여기서

평소에 framework파일과 twframework파일에서 public.xml파일을 유심히 보셨다면 알수있는게 있습니다.














이 위에 나와있는것이 framework파일의 public.xml의 일부분 입니다.

여기서 공통점을 찾으셨나요?

모두 id가 0x01******로 시작한다는겁니다.

그럼 twframework 파일의 public.xml파일을 살펴보겠습니다.














이런식으로 id가 모두 0x02******으로 시작합니다.

여기서 알수있듯이

W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textColor, value=0x0205009a
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000f
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textColor, value=0x0205009a
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000e
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000f

이 에러들은 모두 twframwork-res에 사용되는 id값을 필요로 하고있었습니다.

왜 phone.apk파일을 디컴파일하는데 twframwork파일의 id값들을 요구를 할까요?

그건 phone.apk파일을 만들때 저 id들이 사용되었는데 디컴파일하면서 저 아이디 값이 무엇인지 알려고 하는거고 그 과정에서

id값들을 찾기 못하기에 내는 에러입니다.

C:UsersBlueapktoolframework1.apk

그럼 아까 2번 에러에서 나왔던 폴더를 들어가보면









1.apk 파일이 덩그러니 놓여있습니다.



열어보면 리소스 파일이 들어있습니다.

이 1.apk파일은 우리가 이런 어플들을 디컴파일 시도할때 생깁니다.

지워도 자동으로 다시 생기구요

그리고 몇가지를 시도한끝에 몇가지를 알수있었습니다.

저 1.apk파일안에 들어있는 리소스 파일은

framework-res에 쓰이는 리소스 파일이라는겁니다. 즉 0x01******번대의 id정보가 담겨있다는겁니다.

그럼 삭제할때마다 나타나는 1.apk파일은 어디서 튀어나오는걸까요?

그건 apk manager폴더 안에 other폴더에 있는 apktool.jar에 답이 있습니다.









다시 android-framework.jar 을 열어보면




1.apk파일에 쓰였던 리소스 파일이 들어있습니다.

즉 여기에 framework-res파일의 리소스가 있었기에

phone.apk를 디컴파일할때 0x01*****번대의 id를 못찾는 다는 에러는 나오지 않는것입니다.

하지만 이 1.apk파일에 들어있는 리소스는 우리가(제가) 사용하는 삼성 프레임워크와는 좀 다릅니다.

저 리소스 파일이 어떤 핸드폰의 리소스 파일인지는 모르지만

id값이 약간 다르기때문에 0x01******번대의 에러도 가끔 나타납니다.

여기서 한가지 중요한사실은

framework와 twframework로 나누어져있는 삼성 갤럭시의 시스템입니다.

다른 제조회사의 경우 나눠져있는경우도 있고 다 framework에 들어있는 경우도 있거든요

그렇다면 phone.apk파일을 디컴파일 해주기 위해서는 2번대의 id를 인식해줄수 있게 twframework-res.apk의

리소스를 인식할수 있게 해줘야 합니다.

먼저 C:UsersBlueapktoolframework (사용자마다 이폴더는 다릅니다)

폴더에 있는 1.apk파일을 삭제해주시고

그 폴더에 framework-res.apk파일과 twframework-res.apk파일을 복사해주세요
(자신의 사용하는 기종의 펌웨어 버전 것을 복사하세요. 다른 기종걸 넣고 징징거리지 마세요)
(이걸 응용한다면 다른 회사핸드폰의 시스템어플도 디컴파일하는게 가능합니다. 요구하는게 몇번 id대의 파일인지만 조사하면요)














그리고 1번대의 id를 가지는 framework-res.apk파일은 1.apk파일로 변환해주시고

2번대의 id를 가지는 twframework-res.apk파일은 2.apk파일로 변환을 해줍니다.

그리고 다시 apk manager로 돌아와 phone.apk파일을 디컴파일 해봅니다.














에러없이 디컴파일이 완료되었습니다.

사실 1.apk파일과 2.apk파일 안에는 리소스 파일만 남기고 전부 싹다 지워도 상관없습니다.

디컴파일할때 필요한건 리소스 파일뿐이거든요

하지만 귀찮아서 그냥 원본 갔다가 붙여놓는겁니다.

평소에 디컴파일 안되던 파일들도 디컴파일이 다 잘되실겁니다.

이로써 강좌 끝.


강좌를 마치고 한마디만 하겠습니다.



맛클내에 계신 테마제작자분들, 개발자분들 항상 감사합니다.



그리고 사용자분들에게도 한마디 드리고 싶습니다.



감사의 인사나 추천하시는게 힘드십니까?



그럼 강좌를 쓰거나,테마를 제작하거나, 개발을하시는분들은 얼마나 힘들까요?



그분들의 노고를 헤아려 주셨으면 합니다.
댓글 68
1 2
댓글 쓰기 권한이 없습니다.
분류 추천순 목록 검색 쓰기
List of Articles
제목 글쓴이 추천 조회 날짜
[롤리팝] 커널패치 루팅법 입니다! (킷캣,젤리빈에도 유용!!!) 193 file hsk 448 27571 2014.12.07
맛클 포인트 얻기에 가장 쉬운 방법............ 196 비빅비 406 8772 2013.04.17
4.3 드디어 루팅법 알아냈습니다ㅜ 71 file Jason K 184 32388 2013.10.25
강좌 테그라크(빌드30이후) 업데이트폴더 테마적용방법 232 file 택이아빠 150 71918 2011.06.11
[6개] 겔럭시 노트 젤리빈 베터리 광탈 현상 최소화 하기..! 152 file HackerChang 143 25411 2013.02.18
강좌 안드로이드 framework-res.apk 수정방법(테마수정, 시스템어플수정) 136 불멸[갤K] 140 88261 2011.02.11
부팅 및 종료 애니메이션 파일(*.qmg) 파일 만들기 방법 68 file 웃음투자 137 17426 2013.03.25
Universal Adrenaline Shot V14 470 file 맛싸이언 124 39511 2011.09.30
강좌 [간단루팅]갤럭시S3 NI3 루팅하기! 54 file 5755084 117 27150 2014.10.07
Galaxy Tuner 소개 (IO scheduler, LCD 색온도, HW sound) 201 file 자양 114 35633 2011.01.05
lgu 갤s8+ 구글락 글올린 사람입니다 598 file 떳다마린 113 17603 2018.03.25
[겔S : 1월 11일 V2] 이카루스 패치 N2 - 배포게시판이동 262 file 이카루스 113 16246 2011.01.09
[포인트 올리는 법] 포인트를 올리는 가장 기본적인 루트를 적어두었습... 17 berics 109 526187 2015.03.10
기어s2 다운그레이드 (스포츠,클래식)(아이폰연동) 105 file 정현성 103 16552 2016.01.25
노트2/갤탭10.1)멀티윈도우 가능한 어플 추가하기 108 file 고대인 103 64292 2012.11.11
강좌 잠금화면 상단바 갤4처럼 투명화하기 191 file MuHyeon 100 17653 2013.08.01
강좌 LG V20 부트로더 언락하기(국내 내수용,버라이즌,스프린트,AT&T 모... 300 file xps 94 11971 2017.02.12
노트3 기본 어플 자동 삭제 (세계 최고 387개) #1차 수정 99 file Anony 93 25632 2014.03.01
갤럭시노트 멀티윈도우 포팅시 주의할점과 포팅방법 75 file focusnf 92 16555 2013.02.14
[팁] 롤리팝 디오덱 방법 68 file 푸른구름 88 13551 2015.07.21
갤럭시S4 SKT 기본어플 삭제가능목록 정리해서 올립니다. 61 file 야미 87 60858 2013.09.07
강좌 [안드로이드] 디컴파일 되지 않는 시스템어플 디컴파일 하기 68 불멸[갤K] 87 22894 2011.02.17
강좌 textplus를 이용한 공기계 카카오톡 인증! 36 file bjw4227 86 55530 2015.01.31
[팁][롤리팝] S파인더 퀵커넥트 간단하게 제거하기 24 file hsk 85 22619 2015.05.21
강좌 [대부분의 삼성기종] 카메라 셔터무음 활성화 76 file bdessd 85 14659 2015.05.08
강좌 노트10.1 lte (E230S) 루팅강좌 + 순정펌(4.4.4) 킷캣 58 file 장벌 85 20619 2014.10.28
강좌 Root Explorer(루트익스플로러) 사용방법 114 berics 85 63401 2011.02.10
루팅 관련 용어 정리 71 크램프 84 3456 2013.01.23
패블릿모드 하는법! 강좌 379 file 쿤투 83 30993 2013.03.17
[참고] 롤리팝 루팅 이후 보안알림 제거 (KNOX, SecurityLogAgent 제거... 36 file hsk 81 31851 2015.03.22
1 - 135