注:后有文中所提到的需下载的文件
通过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 <brut.alll@gmail.com>
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