아마 웃음투자님이 작성하신 설명서를 보시고도 저처럼 초반에 헤메신 분들이 있을꺼 같은데요.
그래서 아주 간단한 설명서를 작성해보려 합니다.
1. 기본 폴더 구성
① 기본 작업할 apk 파일 넣을 경로
② deodex된 jar 파일을 넣을 경로
③ 각 폰에 사용될 기본 framework-res.apk / twframework-res.apk (삼성기준) 을 넣을 경로
④ 주 작업 경로
- 보통 apkmanager로 deodex 작업도 가능하다고 하지만, deodex 작업은 이 툴로 작업하시는 것보다 이곳의 강좌를 기반으로 하시는걸 추천드립니다.
2. 기본 메뉴 구성
① 디컴파일 메뉴
- 아래 10번 메뉴로 디컴파일은 프레임웍스를 설치하지 않으신 분들이 수동으로 프레임웍스 파일을 설정하셔서 작업하시는
메뉴 입니다. 그러나 저는 초보라 66번 메뉴를 통해서 프레임웍스를 설치후 9번 디컴파일만 이용하고 있습니다.
② 컴파일 메뉴
③ unsigned 파일의 사인메뉴
- 시스템 파일은 unsigned 상태 그대로 이름변경후 넣는겁니다. 시스템 파일은 사인하시면 안됩니다. 이게 가장 중요합니다.
④ 리컴파일 메뉴
- 프로젝트 폴더내에 작업폴더가 있을시 그 폴더내에서 재수정후 컴파일하실땐 이 메뉴로 하셔야합니다.
11번 컴파일은 최초 작업시에만 1회 사용하시는 겁니다.
⑤ API 변경 메뉴
- 각각의 OS 버전에 맞는 API로 변경시 사용하시면 됩니다. 현재 5.0.x 버전의 롤리팝은 21번 API로 작업하시면 됩니다.
⑥ place-res-apk-here-to-install 폴더에 넣어둔 프레임웍스 파일의 설치 메뉴
- 이 작업을 하시면 아래 사진의 apktool 폴더내에 프레임웍스 폴더를 생성하고 그 안에 1.apk / 2.apk 파일로 프레임웍스가
설치됩니다. 이 작업은 모든 작업중 1순위로 하시는게 좋습니다.
- 이 작업은 기본 2회정도 하셔야 합니다. 삼성기준 framework-res.apk 와 twframework-res.apk 파일 두개의 파일을 설치할
필요가 있기 때문입니다.
아마 여기까지만 알고계셔도 맛클과 기타 검색으로 찾으시는 대부분의 수정방법들은 사용이 가능하실껍니다.
바로 위 스샷의 .android 폴더는 구글 android SDK 설치시 생성되는 폴더입니다.
위
이 스샷은 Script.bat 파일내부입니다. 위 적색으로 네모친 api 설정은 현재 롤리팝으로 변경해둔 상태입니다. 최초 다운로드시 19번 킷캣 4.4.2 버전으로 설정된 상태입니다. 각자 자신이 작업할 용도의 api로 설정해두시는게 편리합니다.
제가 번호를 붙여서 설명한것들은 대부분 저처럼 수정작업 입문 초보가 숙달하시면 도움이 되는것들 입니다.
* 웃음투자님의 설명에 9번 디컴파일 > 11번 컴파일 >12번 사인 > 결과확인 > 32번 리컴파일 > 12번 사인 > 결과재확인 이렇게 설명하신게 있는데 이건 시스템 어플에 관련된 설명이 아닌 예문입니다. 시스템 파일의 작업시 최초 9번 디컴파일 > 11번 컴파일 > 결과확인 > 32번 리컴파일 > 결과확인 순으로 작업하시는게 맞습니다.
상세 설명 감사드립니다..^^
근데 시스템UI를 디컴파일은 되는데 컴파일이 안되서
로그파일 하나올려봅니다
21번오류나네요 컴파일도중에요
혹시 뭐때문인지 여쭤봐도 되럴지요^^
되는것되고 안되는것 안되네요 튜닝버젼인데요ㅠㅠ
|2015-04-03 -- 16:22:11.13|
--------------------------------------------------------------------------
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
W: Could not decode attr value, using undecoded value instead: ns=androidprv, name=primaryUserOnly, value=0xffffffff
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080b56
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080793
W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x01080798
W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x01080798
W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x01080798
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080793
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080793
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080793
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080793
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080793
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080793
W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x010808c9
W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x01080792
W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x01080798
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080791
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x0108078c
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x0108078c
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x0108078d
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x0108078e
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x0108078f
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080790
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080791
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x0108077d
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x0108077e
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x0108077f
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080780
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080781
W: Could not decode attr value, using undecoded value instead: ns=android, name=src, value=0x01080782
Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec: 0x010a00a0
at brut.androlib.res.data.ResPackage.getResSpec(ResPackage.java:59)
at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:57)
at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:53)
at brut.androlib.res.data.value.ResReferenceValue.getReferent(ResReferenceValue.java:60)
at brut.androlib.res.data.value.ResReferenceValue.encodeAsResXml(ResReferenceValue.java:47)
at brut.androlib.res.data.value.ResScalarValue.encodeAsResXmlValue(ResScalarValue.java:57)
at brut.androlib.res.data.value.ResStyleValue.serializeToResValuesXml(ResStyleValue.java:71)
at brut.androlib.res.AndrolibResources.generateValuesFile(AndrolibResources.java:565)
at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:328)
at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:131)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:101)
at brut.apktool.Main.cmdDecode(Main.java:165)
at brut.apktool.Main.main(Main.java:81)