1.
baksmali까지 완료하셨으면 data 폴더 안에 android.policy.jar 이라는 이름의 폴더가
생성되었을 것입니다. 들어가보면 계속 단일 폴더 뿐입니다. 쭉쭉 들어가주세요.
android.policy.jar\com\android\internal\policy\impl\
다양한 파일들이 가득한데요, 우리가 수정할 파일은 PhoneWindowManager.smali 입니다.
Notepad++ 등으로 열여주세요.
2. PhoneWindowManager.smali 파일 편집창에서
.method public getSystemDecorRectLw(Landroid/graphics/Rect;)I
위 문구를 검색해 주세요. 하나밖에 안나올겁니다...
.method public getSystemDecorRectLw(Landroid/graphics/Rect;)I (처음부분)
.registers 3
.parameter "systemRect"
.prologue
.line 3011
iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemLeft:I
iput v0, p1, Landroid/graphics/Rect;->left:I
.line 3012
iget v0, p0,
(중략)
.line 3017
:cond_26
const/4 v0, 0x0
goto :goto_1a
.end method (끝부분)
이 부분을 수정할 겁니다. 이 구간이 바로 까만 기본 상단바의 주범!!!
중요!! 위에 명시된 코드에서 .line (숫자) 등 숫자의 값은 통신사, 펌웨어마다 다를 수 있습니다.
코드에서 숫자 부분은 절대 건들지 않도록 하세요!!
위 코드를 다음과 같이 수정합니다.
1)
iput v0, p1, Landroid/graphics/Rect;->bottom:I (검색하면 하나밖에 안나옴) 다음줄부터
goto :goto_1a (검색하면 두개 나오는데 위쪽에 있는거... 나중에 어차피 둘다 지워야하지만;;) 까지 지워줍니다.
2) .end method 상단에 const/4 v0, 0x0 위에 있는 :cond_26 이 부분을 지워줍니다.
3) 마지막으로 .end method 바로 위에 있는 goto :goto_1a를 지우고 return v0 을 입력합니다.
수정이 완료되면 아래 모양처럼 됩니다.
긴 구문 끝부분이 mSystemLeft, Top, Right, Bottom 하나씩만 남아있는 것이 특징입니다.
다시 말씀드리지만 숫자값은 통신사, 펌웨어 별로 다를 수 있습니다.
아래 내용을 절대 복사+붙여넣기 하시면 안됩니다!!
.method public getSystemDecorRectLw(Landroid/graphics/Rect;)I (처음부분)
.registers 3
.parameter "systemRect"
.prologue
.line 3011
iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemLeft:I
iput v0, p1, Landroid/graphics/Rect;->left:I
.line 3012
iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemTop:I
iput v0, p1, Landroid/graphics/Rect;->top:I
.line 3013
iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemRight:I
iput v0, p1, Landroid/graphics/Rect;->right:I
.line 3014
iget v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mSystemBottom:I
iput v0, p1, Landroid/graphics/Rect;->bottom:I
.line 3017
const/4 v0, 0x0
return v0
.end method (끝부분)
수정이 완료되셨으면 저장해주시고 파일을 닫아주세요.
3. 이제 다시 BS Manager에서 2번을 눌러 smali를 해주시면 됩니다.
4.
smali가 완료되면 dex 폴더에 classes.dex 파일이 생성되어 있을겁니다.
이 파일을 jarfile 폴더에 있던 android.policy.jar 파일에 드래그하여 덮어씌워주세요.
이제 진정한 상단바 투명이 가능한 deodex된 android.policy.jar 파일을 얻으셨습니다!!
하지만 마지막 작업이 남았습니다. 바로 odexing입니다.
순정 롬, 곰돌라이트 롬 같은 odexed 롬은 이 과정이 꼭 필요합니다.
POST 롬 등의 deodexed 롬은 아래 과정 필요 없이, android.policy.jar 파일을
/system/framework/ 폴더에 644 권한을 주고 덮어씌워주시면 됩니다.
android.policy.jar 파일은 조금이라도 잘못되면 벽돌 증상이 일어납니다. 그러므로 혹시 모를 상황을 대비해서
CWM을 이용하여 낸드로이드 백업을 꼭!!!! 하시고 odexing 작업을 해주시기 바랍니다.
벽돌이 될 경우 CWM 리커버리로 백업한 파일을 이용해 복구하면 벽돌 증상 직전으로 되돌릴 수 있습니다.
위에 강조한 내용을 읽고 제대로 숙지하셨으면, 다음 과정으로 넘어가겠습니다.
5.
아래 링크에서 adb를 다운 받아서 C 드라이브에 압축을 풀어주세요. (C:\adb)
http://supportgp.tistory.com/4
다음으로, C:\adb 폴더에 위에서 생성한 android.policy.jar 파일을 복사해주세요.
6. 휴대폰을 PC에 연결합니다. 이 때 USB 디버깅이 활성화 상태여야 합니다.
7.
(사진자료 없는 점 양해 부탁드립니다...!)
시작 - 실행 (Windows키 + R)에서 cmd 를 치고 엔터를 눌러줍니다.
명령 프롬프트 창이 뜨는데, 우선 adb 폴더로 이동하겠습니다. 다음과 같이 입력해주세요.
cd c:\adb (엔터)
이제 dexopt-wrapper(odex에 필요한 파일)를 휴대폰 내의
framework 폴더에 넣도록 하겠습니다.
다음과 같이 입력해주세요. (파란 굵은 글씨만 입력해주시면 됩니다.)
엔터를 쳤을 때 입력한 내용이 한번 더 표시되면 정상적으로 수행된 것입니다.
오타 및 대소문자 구분에 주의해주시기 바라며, 띄어쓰기(스페이스바)는 딱 한번씩만 해주시면 됩니다.
* 헷갈리시는 분들을 위해 띄어쓰기가 있는 부분에 회색으로 음영처리( )를 했습니다.
1) adb push dexopt-wrapper /sdcard/ (엔터)
-> dexopt-wrapper 파일을 우선 내장메모리로 복사.
2) adb shell (엔터) -> 휴대폰에 접속.
3) su (엔터)
-> 루트권한 획득. 이때 폰에서 루트 권한을 요청하면 '승인'을 눌러주세요.
root@android:/ $ 가 root@android:/ # 로 바뀌어야 합니다!!
4) mount -o remount /rw /system (엔터) -> system 폴더에 쓰기권한 부여
5) busybox cp /sdcard/dexopt-wrapper /system/framework (엔터)
-> busybox 명령어를 이용하여 dexopt-wrapper 파일을 /system/framework로 복사
6) chmod 777 /system/framework/dexopt-wrapper (엔터)
-> dexopt-wrapper의 파일 권한을 777로 부여
7) exit (엔터) -> 루트권한 해제
8) exit (엔터) -> 쉘 종료
이제 deodexed 상태인 android.policy.jar 파일을 폰으로 전송하고,
dexopt-wrapper을 이용하여 deodexing을 수행하겠습니다.
다음과 같이 입력해주세요. (파란 굵은 글씨만 입력해주시면 됩니다.)
엔터를 쳤을 때 입력한 내용이 한번 더 표시되면 정상적으로 수행된 것입니다.
위에서 사용했던 명령어는 설명 생략하겠습니다.
1) adb push android.policy.jar /sdcard/ (엔터)
2) adb shell (엔터)
3) su (엔터)
4) mount -o remount /rw /system (엔터)
5) cd system (엔터) -> 휴대폰 내 system 폴더로 이동
6) cd framework (엔터) -> 휴대폰 내 framework 폴더로 이동
7) rm android.policy.jar (엔터)
-> 기존의 android.policy.jar 파일 삭제. 안정성을 위해 기존 파일을 지우고 진행합니다.
8) busybox cp /sdcard/android.policy.jar /system/framework (엔터)
9) /system/framework/dexopt-wrapper /system/framework/android.policy.jar
/system/a.odex $BOOTCLASSPATH (엔터)
-> dexopt-wrapper 파일을 이용하여 /system/ 폴더에 임시 odex 파일(a.odex)을 생성합니다.
여기서 (success)가 나와야 다음으로 진행 가능합니다. 다른 메시지가 나오면
파일이 잘못되었거나 다른 문제가 발생한 것입니다.
10) busybox dd if=/system/framework/android.policy.odex of=/system/a.odex
bs=1 count=20 skip=52 seek=52 conv=notrunc (엔터)
-> busybox 명령어를 이용하여 각각의 odex 파일에 상응하는 임시 odex 파일을 생성합니다.
11) mv /system/a.odex /system/framework/android.policy.odex (엔터)
-> 임시 odex 파일(a.odex)을 /system/framework/android.policy.odex 파일에 덮어씌웁니다.
12) chmod 644 android.policy.* (엔터)
-> android.policy.jar, android.policy.odex 파일의 권한을 644로 부여합니다.
13) chown root.root android.policy.* (엔터)
-> android.policy.jar, android.policy.odex 파일의 소유자와 그룹을 root로 변경합니다.
이로써 android.policy.jar 파일의 odexing 작업이 모두 끝났습니다.
14) reboot (엔터) -> 재부팅 합니다.
재부팅 했을 때 벽돌이 되지 않고 정상적으로 부팅이 되었다면 기본 상단바 배경이 사라진
깔끔한 투명 상단바를 확인하실 수 있을 것입니다. 축하합니다!!
여기까지 투명 상단바를 구현하기 위한 방법을 알려드렸습니다. 꽤 어렵죠?^^;
여러분들도 한번 도전해 보시기 바랍니다~~ ㅎㅎ
제가 설명력이 좀 딸려서... (ㅜㅜ) 이해가 잘 되실지 모르겠네요.
수정이 필요한 곳 생각날때마다 수정·보완 하도록 하겠습니다.
궁금한 점 있으면 댓글 달아주세요. 성심성의껏 답변해 드리겠습니다.
잘못된 점 지적도 환영합니다 ^^
지금까지 긴 강좌 읽어주셔서 감사합니다.
* 이 강좌가 작성 되는데 아래 링크가 많은 도움이 되었으며,
이것들을 종합, 수정하여 이 강좌를 작성하였음을 알려드립니다.
http://forum.xda-developers.com/showpost.php?p=40278450&postcount=2
http://supportgp.tistory.com/20