咨询电话
0750-6619079
联系我们
0750-6619079
邮箱:
秒速牛牛@126.com
电话:
0750-6619788
传真:
0750-6619788
手机:
13978972599
地址:
广东江门会城双水工业园
安卓新闻
想拆开一个apk安装 包来研究和参考

来源:未知 作者:admin 日期:2018-11-20 18:08

  

  应用程序是安卓系统重要的组成部分,我们可以通过很多方式在安卓系统上安装应用程序,就像Windows系统的appx和塞班系统的sis一样,安卓系统的应用程序也有其专属的安装包格式——apk。

  apk的全称是AndroidPackage,翻译成中文就是“安卓安装包”。既然apk是“包”,那就说明里面包着很多东西,这就让我很好奇了,里面到底有些什么啊?

  apk其实就是一个压缩文件,把它的文件扩展名改成zip格式之后可以直接解压,今天,IT之家就拆开一个安卓应用的安装包,带大家看看里面到底都有些什么。

  我们今天开刀的小白鼠是微软的待办事项应用——Microsoft To-Do。

  通常这个文件夹里存放的是一些静态文件,比如说明文档或者字体文件,我们以Microsoft To-Do的安装包为例,它的/assets目录下有个名为fonts的子目录,打开它,我们可以看到三个ttf格式的字体文件。

  当然了,不同类型应用的安装包,它/assets里面包含的资源也是不同的,比如有些浏览器应用的/assets目录下有很多html格式的文件,这些文件用旗鱼浏览器可以直接打开:

  通常这个文件夹里存放的是安装包的签名证书和安装包中所有文件哈希值的计算结果。

  应用程序的安装包在打包的时候,每个文件都会经过校验计算,计算结果就存放在/META-INF里,

  我们可以直接使用文本编辑器来打开后缀名为MF和SF的记录这些文件校验计算结果的文件:

  在我们安装一个应用的时候,系统会首先根据/META-INF里的文件校验结果来核实安装包中文件的正确性和完整性,目的是确保安全,避免用户安装到遭受过病毒感染的或者被恶意篡改过的应用程序。

  这个文件夹下的RSA格式的文件是开发者对该应用程序进行签名的签名证书文件,玩过塞班系统的同学应该对这个词并不陌生,这也是为了保证应用程序和系统的安全,签名文件不是纯文本格式,不过当我们用文本编辑器打开它时,可以在乱码中零散地看到Microsoft Corporation字样。

  res是resource的缩写,里面存放的是应用程序的资源文件,比如图片素材和布局文件,这个文件夹下有很多子目录,

  以drawable开头的文件夹,通常里面存放的是应用程序的图片或图形资源;

  有些以drawable开头的文件夹在结尾会跟着诸如hdpi、xhdpi这样表示解析度的字符,目的是适配不同分辨率的屏幕。

  我们来进入一个以drawable开头的文件夹,可以看到里面有png和webp格式的图片,其中,webp格式的图片可以用旗鱼浏览器打开:

  AndroidManifest.xml是一个单独的文件,里面包含很多信息,比如应用程序的包名、数据权限、接口权限、版本信息、安装参数等等,另外,它还可以声明应用程序的每一个组件及其属性,声明应用程序所申请的权限、进程,声明显示模式等等,AndroidMainfest.xml里面包含的信息太多了,单独为它开一篇文章都不为过。这是一个非常重要的文件,它的名称是固定的,不能随意修改。

  这是可在安卓的Dalvik虚拟机中直接运行的字节码,是由JAVA的源代码经过复杂的编译形成的,和传统的.class文件相比,dex文件的运行效率更高。

  虽然Microsoft To-Do的安装包中不包含这个文件夹,不过它在其他安卓应用程序安装包中的出镜率还是挺高的,通常这个文件夹中会存放一些应用程序依赖的库,一般以.so结尾。

  有人可能会问了,你带我们把apk拆开了,可是里面的东西有好多都看不了啊,打开以后是乱码,有什么用啊?不要着急,请接着往下看。

  是的,安卓应用安装包里的很多文件中的内容我们是不能直接看到的,比如Microsoft To-Do应用,它里面的xml文件和dex文件用文本编辑器打开以后显示的是乱码,如果你想愉快地看到这些文件的真身,那就需要对它的安装包进行反编译。

  如何判断你的JAVA是否安装成功了呢?很简单,打开命令提示符,输入命令:

  apktool的作用是把apk中那些直接打开之后显示为乱码的xml文件翻译成明文;

  首先,我们新建一个文件夹(任何位置都可以,小编把文件夹建在了桌面上),然后把我们下载好的三个工具扔进去;

  接着把你要处理的apk文件扔到这个文件夹中的某个地方,小编的做法是在这个文件夹里再建了一个名为apk的文件夹,把apk文件扔到了apk文件夹里:

  打开命令提示符,cd进你刚刚新建的存放着那三个工具的目录,以小编的电脑为例,则是输入命令:

  这时,你来到你那三个工具所在的文件夹,你会看到里面新增了一个文件夹,名为MMTS,打开它,你就会看到你想要的东西:

  我们来到存放那三个工具的文件夹,打开里面的dex2jar-2.0文件夹,把apk包中的classes.dex扔进去。

  这时,我们回到dex2jar-2.0文件夹,可以看到一个新生成的名为classes-dex2jar.jar的文件,这就是我们需要的文件。

  需要注意的是,有些应用,它的class是被混淆过的(比如Microsoft To-Do,如下图):

  这样做为了防止反编译,不过就算这样,我们通过反编译得到的源代码也不是不能看。

  好的,今天我们分析了安卓应用程序安装包的结构和里面的文件和文件夹的作用,甚至还通过反编译看到了源代码,如果你是安卓应用开发的初学者,想拆开一个apk安装包来研究和参考,那么希望这篇文章可以对你有所帮助。