您的位置:首页 > 移动开发 > Android开发

对Android APK文件反编译查看其源码

2015-11-02 18:07 489 查看
概述

作为android的开发者,相信你会有那么一刻,比如,对于手机中某一款App,有一项功能或者效果你蛮喜欢的,想学习一下它具体是怎么实现的。追求高一点的话,我想深究它这个App的项目架构,本着一探究竟的原则,我需要查看工程的源代码。

所需工具

apktool:由apk获得dex文件

dex2jar:dex文件反编译成java包

jd-gui:查看jar文件的java源码

过程

网上下载一个**.apk文件,解压缩后可看到以下几个目录



其中res里的图片我们可以拿来用,但是xml等资源文件是经过优化的,我们并不能直接查看,classes.dex是android系统直接运行在dalvik虚拟机上的文件,我们也不能直接查看到里面的内容。

目前有很多反编译apk的工具,我选择了APKTool,由google提供的反编译以及回编译apk,同时安装反编译系统apk所需要的framework-res框架,清理上次反编译文件夹等功能的一款工具。需要java的支持。

我是在http://ibotpeaches.github.io/Apktool/网站下载的,虽然有很多软件站有下载,但很难找到最新的,我推荐大家以后下载软件尽量到官方推荐的网址去下载,有时遇到什么软件操作使用问题,版本区别对待问题,官网上都会有一个很好的解释。我下载的是目前最新版:apktool-2.0.2.jar(不过而2.x和1.x版本安装是有区别),重命名为apktool.jar,

将这段文本
@echo off

if "%PATH_BASE%" == "" set PATH_BASE=%PATH%

set PATH=%CD%;%PATH_BASE%;

java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
另存为apktool.bat文件。将这两个文件放至系统盘或者配置环境变量将文件路径映射到path,这样你在cmd里运行apktool命令就能查看是否配置成功了!(该方式只适用于windows)

下面我们cd到apk所在路径并运行apktool d xx.apk命令,此时图说话

看看与解压缩后的文件有啥不一样的,现在你可以看到清单文件和res文件的具体内容了,不过我想看源文件呢,我点进smali文件夹,咦,好熟悉的包名,不过后面咋全是以.smali为后缀的文件呀(关于smali大家可以自行百度,它是android字节码的反汇编语言),我想看.java源码啊(细心的你可能会去看smali文件内容,稍微了解语法你就能推测出源码的大致内容)!好吧,我们还得依靠其它工具,网上工具比较少,没有具体的官网,比如smali2java,这样就能看到源码呢,不过它有局限性,对于数字型数据的是16进制的,可能还有其他弊端吧,我是用的另外一种方式。

跳过上一个步骤,我们可直接对classes.dex文件进行反编译,接下里我们使用dex2jar工具,大家可以去http://sourceforge.net/projects/dex2jar/下载,解压dex2jar-2.0.zip,运行cmd进入d2j-dex2jar.bat所在目录,输入命令:d2j-dex2jar.bat XXX(XXX指的是你要反编译的apk中的classes.dex文件所在路径及名称),命令完成后便会生成classes-dex2jar.jar文件(不同版本名字会有所差异),此时此刻,相信你对jar感到很熟悉,没错,对于java包,相信你可以查看了,用JD-JUI工具就可以直接打开并查看整个工程的源码啦啦啦~~~



总结

其实吧,反编译过程算是简单,只不过看了网上其它的操作流程都是记录的老版本的操作流程,也没有具体的汇总,所以自己花了一些时间找资料,找来找去,还是官网靠谱。至此,我希望大家养成一个从官网上去查资料的好习惯,最新的是最好上手的。好吧,第一次写博客,花的时间有点久,排版什么的都不熟练,嗯,吾将上下而求索。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: