푸우♡
14.07.06
조회 수 11546
추천 수 22
댓글 12

본 테마의 강좌는 삼성전자 기기를 기준으로 제작된 강좌입니다.

본 강좌를 직접적으로 수정해서 적용한 기종은 갤럭시노트3, 갤럭시노트2, 갤럭시S4, 갤럭시S4 LTE-A

기종만 테스트 하였습니다. 본 강좌를 본후 적용이 완료된 기종은 아래 댓글로 알려주시면 감사 하겠습니다.

 

[강좌]안드로이드 4.4 기종 배터리 이미지화 활성화 하기

 

 

 

 

[준비물]

 

Apkmanager 5.6

DeoDex된 SystemUI.apk

첨부파일 :

drawables.zip

smali.zip

★ apk manager 사용법은 네이버 검색을 통해 사용법을 익히세요!

 

[1] Apkmanager 5.6으로 Deodex된 SystemUI.apk 를 불러온후 Decompile 합니다.

 

 

[2] Decompile 후 첨부 된 파일 drawables.zip 파일을 압축해제한후 drawable 폴더와 drawable-xxhdpi 폴더를 Decompile한 폴더에 붙여넣기 합니다.

 

 

 

[3] 파일을 붙여넣은후 layout폴더의 status_bar.xml 파일을 노트패드(메모장)으로 불러온후 검색(Ctrl + F)에서 id/battery 를 검색합니다.

 

[4] 위 그림과 같이 해당 라인을 삭제하고 아래의 소스를 넣어줍니다.

 

 

 

[5] apkmanager5.6으로 돌아와 Compile을 해줍니다.

 

 

[6] Compile 후 다시 Set current project(22번)을 한후 컴파일된 unsignedSystemUI.apk를 선택합니다.

 

 

 [7] unsignedSystemUI.apk를 decompile 합니다.

 

[8] 컴파일한 unsignSystemUI 폴더로 들어간 후 아까 첨부된 파일을 다운받았던 BatteryController.smali 파일을 노트패드(메모장)으로 오픈합니다.

 

★ 첨부된 smali 의 Public id 값 입니다.

 

    
   
   
   
   
 

 

[9] 컴파일한 unsignSystemUI 폴더에서 values-public.xml 파일을 엽니다.

 

[9-1] 찾기(Ctral + F)를 하신후 tw_stat_sys_battery 를 찾습니다.

ex)

 

[9-2] 찾은 파일의 id 값을 메모해 둡니다. 첨부된 BatteryController.smali 에서 찾기(Ctrl + F)를 하신후 0x7f020288 를 검색하시고

검색된 해당 라인의 0x7f020288 아까 메모해둔 id값으로 바꿔줍니다.

 

[!]이해하기

 첨부된 파일의 tw_stat_sys_battery 의 id 값이 0x7f020288 입니다. 이 부분을 현재 내가 컴파일한 public 의 id값과 동일 해야 배터리 아이콘이 나타납니다. 즉! 0x7f020228을 지금 public id 값이 맞게 수정해주시면됩니다. 현재의 public id 값은  (예) 0x7f02026f 이므로 이렇게 바꿔주면 됩니다.

 

★ Public id 값에 있는 name의 모든 값을 현재의 Pulbic id 값으로 변경 해주세요 !

 

[10] id값 수정이 끝나셨으면 해당 BatteryController.smali 파일을 디컴파일된 unsignSystemUIsmalicomandroidsystemuistatusbarpolicy 에 붙여 넣기 합니다.

 

[11] BatteryController$BatteryStateChangeCallback.smali 파일을 노트패드(메모장)으로 불러온후 아래 의 빨간 구문을 파란 구문으로 변경 해줍니다.

# virtual methods
.method public abstract onBatteryLevelChanged(IZ)V
.end method 

 

 

빨간글씨 구문을 아래의 파란글씨 구문으로 바꿔줍니다.

 

# virtual methods
.method public abstract onBatteryLevelChanged(IZI)V
.end method 

 

[12] SystemUIsmalicomandroidsystemuistatusbarphonePhoneStatusBar.smali 를 Notepad++로 열어줍니다.
찾기를 하셔서 Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBatteryController 를 찾습니다.

 

 

  iput-object v0, v1, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBatteryController:Lcom/android/systemui/statusbar/policy/BatteryController;

    .line 724
    new-instance v25, Lcom/android/systemui/statusbar/policy/SmartBondingController;

    move-object/from16 v0, p0
  ... 

 

 

 

아래의 구문처럼 파란글씨를 추가해줍니다. 

 

    iput-object v0, v1, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBatteryController:Lcom/android/systemui/statusbar/policy/BatteryController;

    move-object/from16 v0, p0

    iget-object v0, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBatteryController:Lcom/android/systemui/statusbar/policy/BatteryController;

    move-object/from16 v26, v0

    move-object/from16 v0, p0

    iget-object v0, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mStatusBarView:Lcom/android/systemui/statusbar/phone/PhoneStatusBarView;

    move-object/from16 v25, v0

    const v27, 0x7f070077

    move-object/from16 v0, v25

    move/from16 v1, v27

    invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/phone/PhoneStatusBarView;->findViewById(I)Landroid/view/View;

    move-result-object v25

    check-cast v25, Landroid/widget/ImageView;

    move-object/from16 v0, v26

    move-object/from16 v1, v25

    invoke-virtual {v0, v1}, Lcom/android/systemui/statusbar/policy/BatteryController;->addIconView(Landroid/widget/ImageView;)V


    .line 724
    new-instance v25, Lcom/android/systemui/statusbar/policy/SmartBondingController;

    move-object/from16 v0, p0
  ... 

 

  

[13] 찾기를 하셔서 iput-object v0, v1, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBatteryText 를 찾습니다.

 

 iput-object v0, v1, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBatteryText:Landroid/widget/TextView;

    .line 728
    move-object/from16 v0, p0

    iget-object v0, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mContext:Landroid/content/Context;
  ... 

 

 

아래의 구문처럼 파란글씨를 추가해줍니다. 

 

   iput-object v0, v1, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBatteryText:Landroid/widget/TextView;

    move-object/from16 v0, p0

    iget-object v0, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBatteryController:Lcom/android/systemui/statusbar/policy/BatteryController;

    move-object/from16 v25, v0

    move-object/from16 v0, p0

    iget-object v0, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mBatteryText:Landroid/widget/TextView;

    move-object/from16 v26, v0

    invoke-virtual/range {v25 .. v26}, Lcom/android/systemui/statusbar/policy/BatteryController;->addLabelView(Landroid/widget/TextView;)V


    .line 728
    move-object/from16 v0, p0

    iget-object v0, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mContext:Landroid/content/Context;
  ... 

 

 

 

편집을 모두 완료 하였습니다. 다시 컴파일하고 컴파일한 파일을 적용하시면됩니다.
이제 우리는 JB 4.3 배터리를 이미지로 변경 할 수 있습니다.

 

원문 : http://poodroid.tistory.com/134 

댓글 12
댓글 쓰기 권한이 없습니다.
강좌 정렬 목록 검색 쓰기
등록된 글이 없습니다.
1