17
17
package brut .androlib .src ;
18
18
19
19
import brut .androlib .AndrolibException ;
20
- import brut .androlib .mod .IndentingWriter ;
21
- import java .io .*;
22
- import org .jf .baksmali .Adaptors .ClassDefinition ;
23
- import org .jf .baksmali .baksmali ;
24
- import org .jf .dexlib .ClassDefItem ;
20
+ import brut .androlib .mod .BaksmaliMod ;
21
+ import java .io .File ;
22
+ import java .io .IOException ;
25
23
import org .jf .dexlib .Code .Analysis .ClassPath ;
26
24
import org .jf .dexlib .DexFile ;
27
25
@@ -42,51 +40,20 @@ private SmaliDecoder(File apkFile, File outDir, boolean debug) {
42
40
}
43
41
44
42
private void decode () throws AndrolibException {
45
- try {
46
- baksmali .useLocalsDirective = true ;
47
- baksmali .useSequentialLabels = true ;
48
- if (mDebug ) {
49
- baksmali .registerInfo = org .jf .baksmali .main .DIFFPRE ;
50
- ClassPath .dontLoadClassPath = true ;
51
- }
43
+ if (mDebug ) {
44
+ ClassPath .dontLoadClassPath = true ;
45
+ }
52
46
53
- DexFile dexFile = new DexFile ( mApkFile );
54
- for ( ClassDefItem classDefItem :
55
- dexFile . ClassDefsSection . getItems ()) {
56
- decodeClassDefItem ( classDefItem );
57
- }
47
+ try {
48
+ BaksmaliMod . disassembleDexFile ( mDebug , mApkFile . getAbsolutePath (),
49
+ new DexFile ( mApkFile ), false , mOutDir . getAbsolutePath (),
50
+ null , null , null , false , true , true , true , false ,
51
+ mDebug ? org . jf . baksmali . main . DIFFPRE : 0 , false , false );
58
52
} catch (IOException ex ) {
59
53
throw new AndrolibException (ex );
60
54
}
61
55
}
62
56
63
- private void decodeClassDefItem (ClassDefItem classDefItem )
64
- throws AndrolibException , IOException {
65
- TypeName name = TypeName .fromInternalName (
66
- classDefItem .getClassType ().getTypeDescriptor ());
67
- File outFile = new File (mOutDir , name .getFilePath (true )
68
- + (mDebug ? ".java" : ".smali" ));
69
-
70
- if (outFile .exists ()) {
71
- throw new AndrolibException (
72
- "File already exists: " + outFile );
73
- }
74
- outFile .getParentFile ().mkdirs ();
75
-
76
- IndentingWriter indentWriter =
77
- new IndentingWriter (new FileWriter (outFile ));
78
-
79
- if (mDebug ) {
80
- indentWriter .write ("package " + name .package_ + "; class "
81
- + name .getName (true , true ) + " {/*\n \n " );
82
- }
83
- new ClassDefinition (classDefItem ).writeTo (indentWriter );
84
- if (mDebug ) {
85
- indentWriter .write ("\n */}\n " );
86
- }
87
- indentWriter .close ();
88
- }
89
-
90
57
private final File mApkFile ;
91
58
private final File mOutDir ;
92
59
private final boolean mDebug ;
0 commit comments