달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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

http://azdesigntm.tistory.com/177

http://azdesigntm.tistory.com/178

Posted by decompiler
|