27
2017
09

android开发笔记之APK反编译(一)ClassyShark

这里写图片描述

ClassyShark下载地址

下载地址

启动ClassyShark

java -jar ClassyShark.jar

启动如图:
这里写图片描述

使用说明

打开一个apk,如图:

这里写图片描述

可以看到,有三部分:manifest文件,classes.dex文件集和res资源文件。

查看class文件的源码

这里写图片描述

上图可以看出ClassyShark工具将类的相关方法和变量声明进行了结构调整,分为三部分显示fields,constructors,methods。结构会更清晰,但是也不难发现源码基本都是省略号(看来只能看类基本的组成而已- -)。另外有个小技巧,双击对应的变量对象可以快速跳转至该对象class文件。

查看res文件

这里写图片描述

查看res/anima/abc_popup_enter.xml文件

图形化查看整个apk的构成(这是此工具的一个非常有特色的功能)

将右边的目录栏tab切换成Methods count,如下图:

这里写图片描述

有时候我们可能只想了解别人的架构,相关组成部分的占比权重,上图能很清晰的表现出来。可以看出ApeAppLock.apk,android部门占了12941,com部分占用了2949.

我们再点击查看com部分的代码:

这里写图片描述

可以清楚的看出:
com部分,ape占用了1362,而在applock就占用了1336,其中有ui,fingerprint,receiver,service,provider,adapter等等。

使用总结

总的来说ClassyShark的使用非常便捷,只需一个命令行,然后打开对应的apk即可,而且显示的内容非常有条理,非常适合在对别人apk整体架构借鉴时使用。

Android Studio反编译使用

将APK拖入到Android Studio,我们就可以看到此APK的反编译的一些信息,将其列在这,是因为此方法与ClassyShark有非常好的对比性。

如图:
这里写图片描述

我们可以明显的看到,我们在ClassyShark工具中图形化显示各个源码的比例,也可以在AndroidStudio中非常方便的看到。并且,AndroidStudio中我们还可以非常方便的看到此APK的各个部分占用空间的比例。如ApeAppLock.apk中,dex占用了65.7%的空间,arsc文件占用了12.1%的空间,而res占用了19%的空间。

并且,我们可以非常方便的查看各个res资源占用的空间大小比例:
这里写图片描述

此对我们优化一个APK大小是特别的有用,为什么,因为许多APK的图片会占用大量的空间,而此界面可以清楚的列出各个分辨率的图片占用的空间比例。所以,我们优化图片时,直接优化占用空间多的分辨率,如(drawable-xhdpi-v4,drawable-xxhdpi-v4,drawable,drawable-xxxhdpi-v4,)。

参考资料:

1.Android ClassyShark vs ApkTool
http://blog.csdn.net/sp6645597/article/details/51301663
2.google/android-classyshark
https://github.com/google/android-classyshark/releases
3. jadx 反编译apk
http://blog.csdn.net/sp6645597/article/details/51319413

上一篇:C++11中移动语义(std::move)和完美转发(std::forward) 下一篇:android开发笔记之APK反编译(二) jadx