通过反编译第三方apk,学习和借鉴他人代码是学习Android的一个重要途径之一。下面是我对反编译的笔
记整理。
测试环境:windows。
使用工具:apktool(资源文件获取,可以提取出图片和布局文件)
dex2jar(源码文件获取,将class.dex转换成jd-gui可查看阅读的.jar文件)
jd-gui (源码查看,查看class.dex转化成.jar文件)
整合包下载:反编译工具整合包
反编译流程:
一,反编译得到res目录下的图片资源和xml文件、AndroidManifest.xml等
1、下载上面的整合包解压得到:apktool.rar,dex2jar-0.0.9.15.zip,jd-gui-0.3.5.windows.zip。将它们
分别解压到各自文件名的目录下。
2、apptool.jar解压后其目录三个文件:aapt.exe,apktool.bat,apktool.jar。将需要解压的apk拷贝到其
目录下,打开命令窗口,定位到 .\apktool 目录下执行命令:apktool.bat d -f mapp-debug.apk -o mapp
(命令中mapp-debug.apk 为要反编译的apk,mapp为输出文件夹,即:apktool.bat d -f [apk] -o [输出文件夹])
效果如图所示:
执行完成后查看mapp文件夹:就会发现有res文件夹,里面有我们需要的布局,图片,动画等。
二反编译得到Java的源码病查看源码
1、将mapp-debug.apk的后缀名.apk 改成.rar或.zip。然后解压到map-debug文件夹,得到我们所需的
classes.dex文件。
2、将classes.dex拷贝到 \dex2jar-0.0.9.15目录下,执行命令:dex2jar.bat classes.dex。在其目录下
会生成文件classes_dex2jar.jar。
3、使用jd-gui.exe取查阅classes_dex2jar.jar。
输入dex2jar.bat classes.dex效果如下:
使用jd-gui.exe查看源码效果图:
三,反编译过程种曾经遇到过的异常:
1、Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file...
这个问题的原因是apktool版本过低,过去最新的apktool.jar替换原来的。最新apktool.jar下载
2、Input file was not found or was not readable
apktool升级到2.0以上时,使用方式已经替换,格式为:apktool.bat d -f [apk] -o [输出文件夹]
具体参数意义可输入apktool回车。