이번 UC21버전에서 SystemUI.odex 를 deodex 하면 다음과 같은 에러가 발생합니다.
Error occured while loading boot class path files. Aborting.
org.jf.dexlib.Code.Analysis.ClassPath$ClassNotFoundException: Could not find interface Lcom/sec/android/app/minimode/manager/MiniModeAppCallback$OnFocusChangedCallback;
at org.jf.dexlib.Code.Analysis.ClassPath$ClassDef.loadAllImplementedInterfaces(ClassPath.java:865)
at org.jf.dexlib.Code.Analysis.ClassPath$ClassDef.
at org.jf.dexlib.Code.Analysis.ClassPath.loadClassDef(ClassPath.java:280)
at org.jf.dexlib.Code.Analysis.ClassPath.initClassPath(ClassPath.java:163)
at org.jf.dexlib.Code.Analysis.ClassPath.InitializeClassPathFromOdex(ClassPath.java:110)
at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:104)
at org.jf.baksmali.main.main(main.java:293)
Error while loading class Lcom/android/systemui/statusbar/tablet/MiniModeAppsPanel$1; from file SystemUI.odex
Error while loading ClassPath class Lcom/android/systemui/statusbar/tablet/MiniModeAppsPanel$1;
저도 이걸로 헤매다가 최근에 framework 안의 파일명 보다가 생각나서 해봤는데 잘 풀렸습니다.
만능문답 지식IN에도 방금 답변을 달았었는데, 좀 더 많은 분들이 deodex 하는데 어려움이 있을꺼 같아 팁/ 노하우 게시판에도 올립니다.
일단 에러 안의 Lcom/sec/android/app/minimode/manager/MiniModeAppCallback$OnFocusChangedCallback; 이건데요.
UC21 framework 안에 보시면 minimode.jar 파일이 있을 겁니다.
그래서 명령어를 좀 변경해줍니다.
java -jar baksmali.jar -a 15 -d framework -d app -x SystemUI.odex -c core.jar:framework.jar:ext.jar:services.jar:framework2.jar:core-junit.jar:minimode.jar
(길지만 한 줄 입니다.)
옵션 설명을 해드리겠습니다.
-a 는 안드로이드 API 레벨입니다. UC21의 4.0.3 15입니다. (smali 1.3.2에서 기본값은 14(4.0.0~4.0.2)입니다.
-d 는 bootclasspath 폴더 지정입니다. 기본값은 현재 폴더입니다. 폴더를 지정할 때마다 -d "경로"를 넣으시면 됩니다.
-c 는 bootclasspath 지정입니다. 기본 bootclasspath는 core.jar, ext,jar, framework.jar, android.policy.jar, services.jar 기본 5개인데, 명령어를 보시면 아시다시피 minimode.jar 파일을 추가합니다. 파일들 끼리는 ":"로 구분합니다.
이렇게 하시면 스르륵 풀리는 SystemUI.odex 파일을 보실 수 있습니다.
smali는 http://code.google.com/p/smali/ 에서 받으시면 됩니다.
아샌에서는 1.3.2 이상을 사용합니다.
그리고, 다음은 SystemUI.odex 를 deodex 하는데, 부족한 bootclasspath 때문에 생기는 에러 정리입니다.
core.jar | Ljava/lang/Object |
framework.jar | Landroid/renderscript/RenderScript$RSMessageHandler |
ext.jar | Lorg/apache/http/impl/conn/ProxySelectorRoutePlanner |
services.jar | Landroid/widget/PopupMenu$OnMenuItemClickListener |
framework2.jar | Landroid/util/IGateLoggerSettingsService$Stub |
core-junit.jar | Ljunit/framework/TestCase |
minimode.jar | Lcom/sec/android/app/minimode/manager/MiniModeAppCallback$OnFocusChangedCallback |
근데.. MiniMode 저건 도대체 뭐하는애일까요 ㅎㅎ