? 注:后有文中所提到的需下载的文件
?
?
通过dex2jar和jd我们可以反编译apk中的dex,可以比较完美的查看java源文件;通过apktool可以反编译apk中的xml等资源文件,然后通过apk-sign签名,可以制作成修改版的可发布apk文件。
?
1.dex2jar反编译dex文件:
?
a.下载文件见附件:apktool-1.3.1.tar.bz2,jd-gui.zip,或点击这里下载;解压;
b. 把apk文件后缀名改为.zip,然后解压缩其中的class.dex文件,它是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件;
c.把class.dex拷贝到dex2jar.bat所在目录,运行dex2jar.bat class.dex,生成classes.dex.dex2jar.jar ;
d.运行jd-gui工具(绿色无须安装),打开上面生成的jar文件,即可看到源代码;
?
2.Android反编译工具:Apktool,支持Linux 、Windows。
Android apktool是一个用来处理APK文件的工具,可以对APK进行反编译生成程序的源代码和图片、XML配置、语言资源等文件,也可以添加新的功能到APK文件中。用该工具来汉化Android软件然后重新打包发布是相当简单的。
?
1.安装
1).首先安装需要JAVA环境,先下载JDK/JRE,请下载,已经有JAVA环境的可跳过此步
2).到code.google上下载apktool.jar以及相关文件:http://code.google.com/p/android-apktool/downloads/list
点击下载apktool-1.0.0.tar.bz2 和apktool-install-windows-2.1_r01-1.zip
3).解压apktool-install-windows.zip到任意文件夹,然后解压apktool.jar 到apktool-install-windows.zip所在的文件夹下。
?
4).点击开始菜单,运行,输入CMD回车,用cd命令转到刚刚解压apktool-install-windows所在的文件夹,输入apktool,出现一些命令说明即成功安装。
C:\android\android-apktool\apktool-install-windows-r04-brut1>apktool.bat
Apktool v1.4.1 - a tool for reengineering Android apk files
Copyright 2010 Ryszard Wi?niewski <[email protected]>
Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
Usage: apktool [-v|--verbose] COMMAND [...] ? -- 熟悉dos命令的很容易可以看懂
COMMANDs are:
??? d[ecode] [OPTS] <file.apk> [<dir>]
??????? Decode <file.apk> to <dir>.
??????? OPTS:
??????? -s, --no-src
??????????? Do not decode sources.
??????? -r, --no-res
??????????? Do not decode resources.
??????? -d, --debug
??????????? Decode in debug mode. Check project page for more info.
??????? -f, --force
??????????? Force delete destination directory.
??????? -t <tag>, --frame-tag <tag>
??????????? Try to use framework files tagged by <tag>.
??????? --keep-broken-res
??????????? Use if there was an error and some resources were dropped, e.g.:
??????????? "Invalid config flags detected. Dropping resources", but you
??????????? want to decode them anyway, even with errors. You will have to
??????????? fix them manually before building.
??? b[uild] [OPTS] [<app_path>] [<out_file>]
??????? Build an apk from already decoded application located in <app_path>.
??????? It will automatically detect, whether files was changed and perform
??????? needed steps only.
??????? If you omit <app_path> then current directory will be used.
??????? If you omit <out_file> then <app_path>/dist/<name_of_original.apk> -- 这个需要注意,生成新的apk所在的目录
??????? will be used.
??????? OPTS:
??????? -f, --force-all
??????????? Skip changes detection and build all files.
??????? -d, --debug
??????????? Build in debug mode. Check project page for more info.
??? if|install-framework <framework.apk> [<tag>]
??????? Install framework file to your system.
For additional info, see: http://code.google.com/p/android-apktool/
2、使用
apktool d? XXX.apk ABC??? 反编译XXX.apk到文件夹ABC
apktool b? ABC?????????????? 从文件夹ABC重建APK,输出到ABC/dist/out.apk
例子:
C:\android\android-apktool\apktool-install-windows-r04-brut1>apktool d C:\android\参考\simple.apk SIMPLE
I: Baksmaling...
testI: Loading resource table...
I: Loaded.
I: Loading resource table from file: C:\Documents and Settings\Administrator\apk
tool\framework\1.apk
I: Loaded.
I: Decoding file-resources...
I: Decoding values*/* XMLs...
I: Done.
I: Copying assets and libs...
C:\android\android-apktool\apktool-install-windows-r04-brut1>apktool b SIMPLE
I: Checking whether sources has changed...
I: Smaling...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...
??
?
OK,这样包就重新打好了,可能你并没有直接看到什么东西产生,不过这个时候你看一下 SIMPLE\dist?文件夹的SIMPLE\dist里,已经产生了一个我们修改后的APK,就是它了,但是这个文件目前还不能安装,需要一个签名!下一步就是关于软件签名的,早在09年就已经有老外研究过了,我们现在用的只是人家当年的技术了。
4 D/ z/ U??H4 C) d! r4 A
签名程序名为 Autosign ,你可以自己去google搜索.这个的安装很简单吧,原作者都写了,其实你要做的就是解压,然后使用就OK,当然如果你跟我一样使用Ubuntu/FreeBSD等系统,就执行下面的命令
java -jar signapk.jar ?(网上有教程)v& }+ B6 H. k" j
Windows用户只要双击exe执行即可,操作已经很简单,不必多说了。Ubuntu/FreeBSD用户可以自己写一个小脚本,很简单也不用多说了。
好了,经过了以上的操作,你的作品就可以公布了。
?
?
3.apk-sign签名apk文件:
?
1). 下载文件件附件apk-sign.rar,解压到任意文件夹;
2).将XXX.apk文件解压到XXX文件夹,然后将XXX文件夹直接拖到apk-sign文件中的sign_pack.bat批处理文件上以执行,弹出cmd执行窗口,等待执行完即可;
3).生成新文件夹XXX_signed中的apk文件即为已签名;
4)在apk-sign文件夹中会多出一个文件夹,里面就是签名过的Apk
?