APK 文件结构

Android 应用由 Java 编写,利用 Android SDK 编译。Android 应用的 APK(Android Package)安装文件是一个包含所有代码和资源文件的压缩包。解压这个包,我们可以看到以下结构:

  • 列表内容 asserts 目录:静态文件
  • lib 目录:应用依赖的 native 库
  • res 目录:资源文件
  • META-INF 目录:签名文件
  • AndroidManifest.xml:配置文件
  • classes.dex:Dalvik 字节码
  • Resources.arsc:资源配置文件

(1)asserts 目录:存放需要打包到 APK 中的静态文件,不同于 res 目录,asserts 支持任意深度的子目录,用户可以任意部署文件夹的架构。注意,asserts 目录中的文件不会在 .R 文件中自动生成资源id,需要通过 AssertManager 类进行访问。

(2)lib目录:存放应用依赖的 native 库文件,一般用 C/C++ 编写。lib 目录根据 CPU 型号的不同,可能包含四种文件夹:ARM,ARM-v7a,MIPS,X86,分别对应 ARM 架构,ARM-v7a 架构,MIPS 架构和 X86 架构,其目录结构如下:

APK 文件结构_第1张图片

其中,不同的目录对应不同的 CPU 架构,每个目录可以存放对应版本的 so 库文件。目前市面上的移动终端大多是基于 ARM 或 ARM-v7a 架构的,因此一般的 APK 文件只包含 ARM 和 ARM-v7a 架构的 so 库文件。

(3)res 目录:存放资源文件,res 目录中的文件会在 .R 文件中自动生成资源 id,访问时直接使用 R.id.filename 即可访问。

(4)META-INF 目录:存放签名文件,用于检查 APK 文件的完整性。META-INF 目录包含 CERT.RSA,CERT.DSA,CERT.SF 和 MANIFEST.MF,其中 CERT.RSA 是开发者利用私钥对 APK 进行签名的文件,CERT.SF,MANIFEST.MF 记录了文件的 SHA-1 哈希值。

(5)AndroidManifest.xml:Android 应用的配置文件,用于描述 Android 应用的整体情况。每个 Android 应用必须包含一个 AndroidManifest.xml 文件。AndroidManifest.xml 包含了 Android 四大组件的注册信息,权限声明以及 Android SDK 版本信息等。

(6)classes.dex:Java 虚拟机会把 Java 文件编译成 class 文件,而 Android 的 Dalvik 虚拟机会把多个 class 文件进行合并、重组和优化,生成 Dalvik 字节码(Dalvik Executable,即 DEX)文件,可以达到减小体积,加快运行速度的目的。

(7)resources.arsc:记录资源 id 和资源文件之间的映射关系,用于根据资源 id 寻找资源文件。

你可能感兴趣的:(Android)