적용되는 커스텀부분 : 퀵패널버튼, 시계, 퀵패널 문장, 퀵패널 배경, 커스텀 종료메뉴
------- odex ↔ deodex 방법 -------------
준비물
1. Xultimate ( 다운받으러 가기 ) [ 아무곳에 설치 ]
2. 적용툴 ( tools_.zip ) [ c:adb 내에 설치 ]
3. 자바
4. busybox
2번의 파일중 dexopt-wrapper 는 폰의 /system/framework 폴더에 넣어주세요.
adb shell에서 chmod 777 /system/framework/dexopt-wrapper 해주시면 됩니다.
odex -> Deodex
Step1. 준비물 1번 폴더에 들어있는 Main.exe 파일을 실행하세요.
Step2. 실행후 <1>, <2>, <3>, <4> 를 순서대로 눌러주세요.
End.... 모두 완료 후 파일은 done_app 혹은 done_frame 에 Deodex화되어 있습니다.
smali 파일 추출방법
Step1. Deodex화 시켯으면 done_app 혹은 done_frame 폴더안에 apk, jar 파일들이 보일것입니다.
이 파일을 압축프로그램을 이용하여 오픈하세요.
오픈시키면 classes.dex 라는 파일이 보일것입니다.
이 파일을 c:adb 폴더안에 넣어주세요.
Step2. CMD 창을 이용하여 c:adb 폴더로 이동하세요.
Step3. 아래 명령어를 입력해주세요.
java -jar baksmali.jar -o [classes.dex파일을 압축해제시킬 임의의 폴더명] classes.dex
다시 입력이 가능해질때까지 기다려주세요.
Step4. [classes.dex파일을 압축해제시킬 임의의 폴더명] 안에 압축해제후 나오는 파일들이 쭉 있습니다.
End..... smali 파일 수정하시면 됩니다.
Deodex -> odex
Step1. c:adb 폴더의 classes.dex 파일을 삭제해주세요.
Step2. [classes.dex파일을 압축해제시킬 임의의 폴더명] 안의 파일 수정이 완료되었다면
CMD창에 아래 명령어를 입력해주세요. ( 동일하게 c:adb 폴더로 이동되어있어야 합니다.)
java -jar smali.jar [classes.dex파일을 압축해제시킬 임의의 폴더명] -o classes.dex
다시 입력이 가능해질때까지 기다려주세요.
Step3. classes.dex파일이 생성되었으면 done_app 혹은 done_frame 폴더에서
[ smali 파일추출방법 Step1 에서 classes.dex 파일을 빼낸 apk, jar파일 ] 을
c:adb 폴더에 이동시킨후 c:adb 폴더에 있는 classes.dex을
[ smali 파일추출방법 Step1 에서 classes.dex 파일을 빼낸 apk, jar파일 ] 의 classes.dex와
교체해 주세요.
Step4. CMD창에서 아래 명령어를 입력해주세요.
adb push [ smali 파일추출방법 Step1 에서 classes.dex 파일을 빼낸 apk, jar파일 ] [ system에 원래 들어갈 전체 경로 ]
만약 SystemUI.apk 파일이면
adb push SystemUI.apk /system/app/SystemUI.apk
위의 명령어로 폰 내부의 파일을 넣어주시면 됩니다.
Step5. CMD창에서 adb shell을 입력하여 폰 내부로 진입해주세요.
Step6. shell 입력상태에서 아래 명령어를 입력해주세요.
/system/framework/dexopt-wrapper [ system에 원래 들어갈 전체 경로.apk ] /system/a.odex $BOOTCLASSPATH
busybox dd if=[ system에 원래 들어갈 전체 경로.odex ] of=/system/a.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
mv /system/a.odex [ system에 원래 들어갈 전체 경로.odex ]
reboot
End..... 완료 후 정상부팅이 되면 완료.
------ 퀵패널 버튼(6/17 업데이트) --------
1. SystemUI.odex 를 deodex로 변경하세요.
2. 변경된 deodex를 해제하세요.
3. comandroidsystemuistatusbarquickpanel 의 경로에 첨부된 파일[ quickpanel_v2.zip ]을
압축해제하세요.
4. 다시 deodex를 odex 하세요.
5. 자신의 폰에 적용하고, 커스텀 셋팅 앱에서 잘 적용되는지 확인하세요.
PS. 개발노트
2011.06.17 - 퀵버튼에 플래시 버튼 추가
- 3번부터 다시 하세요.
------ 상단바 시계, 퀵패널 문장 --------
1. SystemUI.odex 를 deodex로 변경하세요.
2. 변경된 deodex를 해제하세요.
3. comandroidsystemuistatusbar 의 경로에 첨부된 파일[ statusbar.zip ]을 압축해제하세요.
4. 다시 deodex를 odex 하세요.
5. 자신의 폰에 적용하고, 커스텀 셋팅 앱에서 잘 적용되는지 확인하세요.
------ 퀵패널 배경화면 -----------
Start.... SystemUI.odex 를 deodex로 변경하세요.
Step1. 변경된 deodex를 해제하세요.
Step2. 아래 첨부된 파일 [ StatusBarService.smali ]의 내용을
comandroidsystemuistatusbarStatusBarService.smali 의 제일 아래에 추가하세요.
Step3. comandroidsystemuistatusbarStatusBarService.smali 의 내용중에서
.method private makeStatusBarView(Landroid/content/Context;)V 와
.end method 사이에서
iput-object v7, p0, Lcom/android/systemui/statusbar/StatusBarService;->mTrackingView:Lcom/android/systemui/statusbar/TrackingView;
iget-object v7, p0, Lcom/android/systemui/statusbar/StatusBarService;->mTrackingView:Lcom/android/systemui/statusbar/TrackingView;
iput-object p0, v7, Lcom/android/systemui/statusbar/TrackingView;->mService:Lcom/android/systemui/statusbar/StatusBarService;
iget-object v7, p0, Lcom/android/systemui/statusbar/StatusBarService;->mTrackingView:Lcom/android/systemui/statusbar/TrackingView;
이와같은 구문을 찾으신 후
iput-object v7, p0, Lcom/android/systemui/statusbar/StatusBarService;->mTrackingView:Lcom/android/systemui/statusbar/TrackingView;
iget-object v7, p0, Lcom/android/systemui/statusbar/StatusBarService;->mTrackingView:Lcom/android/systemui/statusbar/TrackingView;
invoke-virtual {p0, v7}, Lcom/android/systemui/statusbar/StatusBarService;->setBackgroundSrc(Landroid/view/ViewGroup;)V
iput-object p0, v7, Lcom/android/systemui/statusbar/TrackingView;->mService:Lcom/android/systemui/statusbar/StatusBarService;
iget-object v7, p0, Lcom/android/systemui/statusbar/StatusBarService;->mTrackingView:Lcom/android/systemui/statusbar/TrackingView;
차이점을 잘 파악 하신후 빨간줄을 추가하세요. ( 구분 가능하게 색깔로 똑같은것 표시해놓았습니다, 기존구문에 빨간줄 추가하였을 뿐입니다. )
Step4. 다시 deodex를 odex 하세요.
End... 자신의 폰에 적용하고 커스텀 셋팅 앱에서 설정후 적용, 재부팅 후 적용되어있는지 확인하세요.
개발자 한마디... 타기기는 재부팅해야됩니다. 후에 적용가능하게 다시 알려드리겟습니다. ^^
------ 커스텀 종료메뉴 (7/3 수정) -----------
Start.... android.policy.odex 를 deodex로 변경하세요.
Step1. 변경된 deodex를 해제하세요.
Step2. 아래 첨부된 파일[ GlobalActions.smali ]의 내용을
comandroidinternalpolicyimplGlobalActions.smali 제일 아래에 추가하세요.
Step3. comandroidinternalpolicyimplGlobalActions.smali 의 소스를 수정하세요.
.method public showDialog(ZZ)V 를 찾으신후...
invoke-direct {p0}, Lcom/android/internal/policy/impl/GlobalActions;->prepareDialog()V
와 .end method 사이에 아래의 소스로 수정해주세요.
.line 116
invoke-virtual {p0}, Lcom/android/internal/policy/impl/GlobalActions;->reset()Z
move-result v1
if-eqz v1, :cond_27
.line 25
invoke-virtual {p0}, Lcom/android/internal/policy/impl/GlobalActions;->exitShow()V
.line 31
:goto_26
return-void
.line 27
:cond_27
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mStatusBar:Landroid/app/StatusBarManager;
const/4 v1, 0x1
invoke-virtual {v0, v1}, Landroid/app/StatusBarManager;->disable(I)V
.line 117
iget-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mDialog:Landroid/app/AlertDialog;
invoke-virtual {v0}, Landroid/app/AlertDialog;->show()V
goto :goto_26
PS. 개발노트
2011.07.03 - 붙여넣을 소스가 짤린것 수정 ( 드래그 하면 숨은부분까지 모두 복사됩니다. ^^)
- 이미 완료 하신 분들은 Step2 부터 다시 하세요.
- 소스파일[GlobalActions.smali]이 새로운 후원버전에 맞추어 수정되었습니다. ^^
------ 환경설정 ( 셋팅 )-----------
Start.... Settings.odex 를 deodex로 변경하세요.
Step1. 변경된 deodex를 해제하세요.
Step2. 첨부된 파일 중에서 [ settings.zip ] ClickListener.smali,
Settings$matpclub_Preference.smali 파일을 comandroidsettings 에 복사/붙여넣기 해주세요.
Step3. 첨부된 파일 중에서 [ settings.zip ] Settings.smali 의 내용을
comandroidsettingsSettings.smali 의 제일 아래에 추가해주세요.
Step4. comandroidsettingsSettings.smali 의 내용중에서
.method protected onCreate(Landroid/os/Bundle;)V 와 .end method 메소드 사이에
return-void 가 한줄 있습니다.
이 바로 윗줄에 아래 내용을 추가해주세요.
invoke-virtual {p0}, Lcom/android/settings/Settings;->init()V
Step5. 다시 deodex를 odex 하세요.
End... 자신의 폰에 적용하고 커스텀 셋팅 앱에서 설정후 적용, 재부팅 후 적용되어있는지 확인하세요.
Start.... SystemUI.odex 를 deodex로 변경하세요.
Step1. 변경된 deodex를 해제하세요.
Step2. 첨부된 파일 중에서 [ MatpclubStatusBarBattery_v2.zip ]
MatpclubStatusBarBattery.smali,
MatpclubStatusBarBattery$statusBarBatteryBroadCast.smali,
MatpclubStatusBarBattery$1.smali, MatpclubStatusBarBattery$1$1.smali,
MatpclubStatusBarBattery$2.smali, MatpclubStatusBarBattery$2$1.smali 파일을
comandroidsystemuistatusbar 에 복사/붙여넣기 해주세요.
Step3. 첨부된 파일 중에서 [ MatpclubStatusBarBattery_v2.zip ] StatusBarService.smali 파일의 내용을
comandroidsystemuistatusbarStatusBarService.smali 파일의 뒤에 추가해주세요.
Step4. 첨부된 파일 중에서 [ MatpclubStatusBarBattery_v2.zip ] StatusBarView.smali 파일의 내용을
comandroidsystemuistatusbarStatusBarView.smali 파일의 뒤에 추가해주세요.
Step5. comandroidsystemuistatusbarStatusBarService.smali 의 내용중
.method public updateIcon(Ljava/lang/String;IILcom/android/internal/statusbar/StatusBarIcon;Lcom/android/internal/statusbar/StatusBarIcon;)V
와 .end method 사이에 아래의 소스로 바꿔주세요.
.registers 8
.parameter "slot"
.parameter "index"
.parameter "viewIndex"
.parameter "old"
.parameter "icon"
.prologue
.line 227
const-string v1, "battery"
invoke-virtual {p1, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_c
.line 228
iget-boolean v1, p0, Lcom/android/systemui/statusbar/StatusBarService;->batteryVisible:Z
iput-boolean v1, p5, Lcom/android/internal/statusbar/StatusBarIcon;->visible:Z
.line 230
:cond_c
iget-object v1, p0, Lcom/android/systemui/statusbar/StatusBarService;->mStatusIcons:Landroid/widget/LinearLayout;
invoke-virtual {v1, p3}, Landroid/widget/LinearLayout;->getChildAt(I)Landroid/view/View;
move-result-object v0
check-cast v0, Lcom/android/systemui/statusbar/StatusBarIconView;
.line 231
.local v0, view:Lcom/android/systemui/statusbar/StatusBarIconView;
invoke-virtual {v0, p5}, Lcom/android/systemui/statusbar/StatusBarIconView;->set(Lcom/android/internal/statusbar/StatusBarIcon;)Z
.line 233
return-void
Step6. comandroidsystemuistatusbarStatusBarView.smali 의 내용중
.method public constructor
와 .end method 사이에서 아래 구문을 찾으세요.
return-void
이 구문 위에 아래 내용을 추가하세요.
invoke-virtual {p0}, Lcom/android/systemui/statusbar/StatusBarView;->makeBatteryBar()V
Step7. comandroidsystemuistatusbarStatusBarService.smali 의 내용중
.method public onCreate()V 와 .end method 사이에서 아래 구문을 찾으세요.
invoke-direct {p0, p0}, Lcom/android/systemui/statusbar/StatusBarService;->makeStatusBarView(Landroid/content/Context;)V
이 구문 바로 아래에 다음내용을 추가해주세요.
invoke-virtual {p0}, Lcom/android/systemui/statusbar/StatusBarService;->reset()V
Step8. 다시 deodex를 odex 하세요.
End... 자신의 폰에 적용하고 커스텀 셋팅 앱에서 설정후 적용, 재부팅 후 적용되어있는지 확인하세요.
PS. 개발정보
2011.06.16 - MatpclubStatusBarBattery.zip 파일 업데이트 및 파일 추가 [ Step2 만 다시 적용하면되요 ]
- MatpclubStatusBarBattery$2.smali, MatpclubStatusBarBattery$2$1.smali
2011.06.17 - 전부 초기화 되었습니다. 다시 적용해주세요.
- 배터리바가 아이콘을 가리는현상이 수정되었습니다.
- 테마스토어 커스텀 락
Start.... android.policy.odex 를 deodex로 변경하세요.
Step1. 변경된 deodex를 해제하세요.
Step2. 첨부된 파일 중에서 [ matpclub_lock.zip ]
KeyguardViewMediator$dateBroadCast.smali 파일을
comandroidinternalpolicyimpl 에 복사/붙여넣기 해주세요.
Step3. 첨부된 파일 중에서 [ matpclub_lock.zip ] KeyguardViewManager.smali 파일의 내용을
comandroidinternalpolicyimplKeyguardViewManager.smali 파일의 뒤에 추가해주세요.
Step4. 첨부된 파일 중에서 [ matpclub_lock.zip ] KeyguardViewMediator.smali 파일의
내용을 comandroidinternalpolicyimplKeyguardViewMediator.smali 파일의 뒤에 추가해주세요.
Step5. comandroidinternalpolicyimplKeyguardViewManager.smali 파일의 내용중
.method public declared-synchronized show(Z)V 와 .end method 사이에서 혹은
.method public declared-synchronized show()V 와 .end method 사이에서
return-void 바로 위에 아래 내용을 추가해주세요.
invoke-virtual {p0}, Lcom/android/internal/policy/impl/KeyguardViewManager;->show2()V
Step6. comandroidinternalpolicyimplKeyguardViewMediator.smali 파일 내용중
.annotation system Ldalvik/annotation/MemberClasses; 와
.end annotation 사이에서
마지막 괄호( } ) 바로 위에 아래 내용을 추가해주세요.
주의!! 입력하기 바로 전줄에 콤마( , )를 입력하고 바로 다음줄에 입력하시면 됩니다.
Lcom/android/internal/policy/impl/KeyguardViewMediator$dateBroadCast;
예제 ) 변경완료 후 예제 ( 빨간 글씨 주의 )
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/android/internal/policy/impl/KeyguardViewMediator$3;,
Lcom/android/internal/policy/impl/KeyguardViewMediator$dateBroadCast;
}
.end annotation
Step7. comandroidinternalpolicyimplKeyguardViewMediator.smali 파일 내용중
.method public constructor
와 .end method 사이에서 return-void 바로 위에 아래 내용을 추가해주세요.
invoke-virtual {p0}, Lcom/android/internal/policy/impl/KeyguardViewMediator;->init()V
Step8. 마지막입니다.
comandroidinternalpolicyimplKeyguardViewMediator.smali 파일 내용중
.method private showLocked()V 와 .end method 사이를 아래 문장으로 바꿔주세요.
.registers 5
.prologue
.line 84
iget-object v2, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mHandler:Landroid/os/Handler;
const/4 v3, 0x2
invoke-virtual {v2, v3}, Landroid/os/Handler;->obtainMessage(I)Landroid/os/Message;
move-result-object v1
.line 85
.local v1, msg:Landroid/os/Message;
iget-object v2, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mHandler:Landroid/os/Handler;
invoke-virtual {v2, v1}, Landroid/os/Handler;->sendMessage(Landroid/os/Message;)Z
.line 88
:try_start_c
new-instance v0, Landroid/content/Intent;
const-string v2, "com.matpclub.lockscreen.policy.start"
invoke-direct {v0, v2}, Landroid/content/Intent;->
(Ljava/lang/String;)V
.line 89
.local v0, ift:Landroid/content/Intent;
iget-object v2, p0, Lcom/android/internal/policy/impl/KeyguardViewMediator;->mContext:Landroid/content/Context;
invoke-virtual {v2, v0}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;)V
:try_end_18
.catch Ljava/lang/Exception; {:try_start_c .. :try_end_18} :catch_19
.line 93
.end local v0 #ift:Landroid/content/Intent;
:goto_18
return-void
.line 90
:catch_19
move-exception v2
goto :goto_18
End... 자신의 폰에 적용하고 커스텀 셋팅 앱에서 설정후 적용, 재부팅 후 적용되어있는지 확인하세요.
* 계속 업데이트 됩니다.
* 이 게시글 무단 배포시 업데이트 중단합니다.
좋은것 같은데 잘 못알아 듣겠는 아흐......