apk反编译需要
apktool-1.0.0.tar.bz2()
apktool-1.0.0.tar.bz2解压后是一个apktool.jar文件。
apktool-install-windows-2.1_r01-1.zip( )
最新版本在http://code.google.com/p/android-apktool/中可下载
解压apktool-install-windows-2.1_r01-1.zip其中的apktool.bat文件。
apktool.bat 中只有两行批处理,
@echo off
java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9第一样注释,不管它;
第二行是运行apktool.jar,"%~dp0\apktool.jar"是在当前路径寻找apktool.jar,可以改成自己的apktool.jar所在的路径。
apktool 1.4.1反编译错误如下:
C:\Documents and Settings\Administrator>apktool d D:\clocksync.apk D:\clocksync01
I: Baksmaling...
I: Loading resource table...
I: Loaded.
W: Could not decode attr value, using undecoded value instead: ns=android, name=
versionCode, value=0x0000000a
W: Could not decode attr value, using undecoded value instead: ns=android, name=
versionName, value=0x00000011
Exception in thread "main" java.lang.NullPointerException
at java.io.Writer.write(Unknown Source)
at brut.androlib.res.util.ExtMXSerializer.writeAttributeValue(ExtMXSeria
lizer.java:38)
at org.xmlpull.mxp1_serializer.MXSerializer.attribute(MXSerializer.java:
673)
at org.xmlpull.v1.wrapper.classic.XmlSerializerDelegate.attribute(XmlSer
ializerDelegate.java:106)
at org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.writeStartT
ag(StaticXmlSerializerWrapper.java:267)
at org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.event(Stati
cXmlSerializerWrapper.java:211)
at brut.androlib.res.decoder.XmlPullStreamDecoder.decode(XmlPullStreamDe
coder.java:46)
at brut.androlib.res.decoder.ResStreamDecoderContainer.decode(ResStreamD
ecoderContainer.java:34)
at brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:1
00)
at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:114
)
at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:93)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:98)
at brut.apktool.Main.cmdDecode(Main.java:120)
at brut.apktool.Main.main(Main.java:57)
apktool为1.4.1版本(),换成apktool 1.0.0 就好了。
注意:在使用1.0.0版本的时候, apktool apktool d D:\clocksync.apk D:\clocksync0 会删掉后面路径中的内容,所以最好新建一个文件夹;而1.4.1版本会提示文件夹已存在。
正确反编译,如下:
C:\Documents and Settings\Administrator>apktool d D:\clocksync.apk D:\clocksync0
1
I: Baksmaling...
I: Decoding resource table...
I: Decoding resources...
I: Copying assets and libs...
C:\Documents and Settings\Administrator>
解压完成后会有一个smali文件夹,下面的文件都是.smali格式。使用dex2jar工具将clocksync.apk中的dex文件编译成.class文件,
然后使用jd-gui工具将.class文件转成.java文件,把这些文件替换掉smali文件夹下的文件。OK,反编译完成,但这并不能保证反编译的源代码能够在eclipse中正确运行。