APK 文件分析

栏目: IOS · Android · 发布时间: 5年前

内容简介:我们通过 Android studio APK Analyze 可以展开一个APK文件META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。里面包含了三个文件,MANIFEST.MF、CERT.SF、CERT.RSA。apk中的这个MANIFEST.MF,列出了apk的所有文件,以及这些文件内容所对应的base64-encoded SHA1 哈希值,

我们通过 Android studio APK Analyze 可以展开一个APK文件

APK 文件分析
  • META-INF
  • res
    • anim
    • color
    • drawable
    • drawable-hdpi
    • drawable-land
    • drawable-land-hdpi
    • drawable-mdpi
    • drawable-port
    • drawable-port-hdpi
    • layout
    • layout-land
    • layout-port
    • xml
  • AndroidManifest.xml
  • classes.dex
  • resources.arsc

META-INF

META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。里面包含了三个文件,MANIFEST.MF、CERT.SF、CERT.RSA。

  • MANIFEST.MF

apk中的这个MANIFEST.MF,列出了apk的所有文件,以及这些文件内容所对应的base64-encoded SHA1 哈希值,

Name: classes.dex
SHA1-Digest: l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=
复制代码

上述表示classes.dex这个文件的SHA1的哈希值为l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=

  • CERT.SF

CERT.SF和MANIFEST.MF很相似,但是它描述的不是文件内容的hash值,而是列出了MANIFEST.MF这个文件中每条信息的hash值,举例会明白些:

Name: classes.dex
SHA1-Digest: ubmMiUS24rU/6K5JloMVG4vHKIU=
复制代码

上面这条hash值 ubmMiUS24rU/6K5JloMVG4vHKIU= 对应的是MANIFEST.MF中下面这几行字符串的hash值

Name: classes.dex
SHA1-Digest: l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=
复制代码

注:计算SHA1-Digest-Manifest时,输入的字符串是三行,还要包括一行空白行,即’\r\n’。!

  • CERT.RSA

包含了公钥和私钥签名后的一些信息 它的基本格式是这样的:

APK 文件分析

res目录

res目录存放资源文件

目录 资源类型
animator/ 用于定义属性动画的 XML 文件。
anim/ 定义渐变动画的 XML 文件。(属性动画也可以保存在此目录中,但是为了区分这两种类型,属性动画首选 animator/ 目录。)
color/ 用于定义颜色状态列表的 XML 文件。请参阅颜色状态列表资源
drawable/ 位图文件( .png.9.png.jpg.gif )或编译为以下可绘制对象资源子类型的 XML 文件:位图文件九宫格(可调整大小的位图)状态列表形状动画可绘制对象其他可绘制对象请参阅可绘制对象资源。
mipmap/ 适用于不同启动器图标密度的可绘制对象文件。如需了解有关使用 mipmap/ 文件夹管理启动器图标的详细信息,请参阅管理项目概览。
layout/ 用于定义用户界面布局的 XML 文件。 请参阅布局资源。
menu/ 用于定义应用菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件。请参阅菜单资源。
raw/ 要以原始形式保存的任意文件。要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.*filename* )调用 Resources.openRawResource() 。但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/ 目录下(而不是 res/raw/ )。 assets/ 中的文件没有资源 ID,因此您只能使用 AssetManager 读取这些文件。
values/ 包含字符串、整型数和颜色等简单值的 XML 文件。其他 res/ 子目录中的 XML 资源文件是根据 XML 文件名定义单个资源,而 values/ 目录中的文件可描述多个资源。对于此目录中的文件, <resources> 元素的每个子元素均定义一个资源。例如, <string> 元素创建 R.string 资源, <color> 元素创建 R.color 资源。由于每个资源均用其自己的 XML 元素定义,因此您可以根据自己的需要命名文件,并将不同的资源类型放在一个文件中。但是,为了清晰起见,您可能需要将独特的资源类型放在不同的文件中。 例如,对于可在此目录中创建的资源,下面给出了相应的文件名约定:arrays.xml,用于资源数组(类型化数组)。colors.xml:颜色值。dimens.xml:尺寸值。strings.xml:字符串值。styles.xml:样式。请参阅字符串资源、 样式资源更多资源类型
xml/ 可以在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。

resources.arsc

编译后的二进制资源文件,主要作用是App的资源索引表,可以从二进制的文件中查找到资源的相关信息,或者根据资源的id可以定位到二进制文件中的位置

classes.dex文件

简单来说就是android系统的可执行文件,类似于window系统的xx.exe,它包含应用程序的全部操作指令以及运行时数据

题外:ART 和 Dalvik

我们知道 Java 程序都是通过Java虚拟机执行的,Android应用是采用Java开发的,基于移动设备的特点,如内存以及电量等诸多方面跟一般的 PC 设备都有本质的区别,所以需要开发更符合移动设备的用于执行 Java 代码的虚拟机,也就是Dalvik和 ART。 Dalvik和 ART 并不是完全按照JVM的规范开发的,一般JVM虚拟机运行的是 .class 文件,而 Dalvik和 ART 运行的是DEX文件。

Java 虚拟机执行 .class 格式的字节码。每一个 Java 文件对应一个 .class 的字节码文件,JVM 在运行时为每一个执行到的类装载字节码。而 Android 设备上为了提高执行效率,在编译 Android 项目时,Android 通过 SDK 提供的工具 dex.jar 会把所有的 .class 文件最终打包成一个或者多个 .dex 文件

ART 和 Dalvik 区别

Dalvik 是 ART 的前身 ,从 Android L 开始,Android 开始启用了新设计的虚拟机 ART 。 ART 比起 Dalvik 有以下优势:

  • 预先 (AOT) 编译

ART 引入了预先编译机制,可提高应用的性能。在安装时,ART 使用设备自带的 dex2oat 工具来编译应用,并为目标设备生成经过编译的应用可执行文件

  • 垃圾回收方面的优化

我们知道 执行GC操作的时候,任何线程的任何操作都会需要暂停,等待GC操作完成之后,其他操作才能够继续运行 ,所以GC在 Dalvik 时代也是经常被人诟病的,它会导致界面卡顿。而ART 在GC导致显示不稳定、界面响应速度缓慢以及其他问题都做了优化


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C语言程序设计

C语言程序设计

K. N. King / 吕秀锋、黄倩 / 人民邮电出版社 / 2010-4 / 79.00元

时至今日, C语言仍然是计算机领域的通用语言之一,但今天的 C语言已经和最初的时候大不相同了。本书最主要的一个目的就是通过一种“现代方法”来介绍 C语言,书中强调标准 C,强调软件工程,不再强调“手工优化”。这一版中紧密结合了 C99标准,并与 C89标准进行对照,补充了 C99中的最新特性。本书分为 C语言的基础特性、 C语言的高级特性、 C语言标准库和参考资料 4个部分。每章末尾都有一个“问与......一起来看看 《C语言程序设计》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码