Android App文件结构分析

Android的APP是一个以*.apk结尾的压缩文件,将其后缀修改为.zip可以看到apk包的完整结构如下图:
Android App文件结构分析_第1张图片
主要包括Java 代码文件:classes*.dex,Native 代码文件:lib目录下面的 .so 文件,资源文件:包括 assets 目录、res 目录以及 resources.arsc 索引表文件。
我们从上到下依次的详细说明:
(1)AndroidManifest.xml:Android项目的系统清单文件,Android应用的四大组件(Activity、Service、BroadcastReceiver 和 ContentProvider )均在此配置和声明,具体介绍请参考本博客相关文章。
(2)assets:用来存放需要打包到 Android 应用程序的静态资源文件,例如图片资源文件、JSON 配置文件、渠道配置文件、二进制数据文件、HTML5离线资源文件等。与res/raw 目录不同的是,assets 目录支持任意深度的子目录,同时该目录下面的文件不会生成资源ID。下图所示是某个 APP 的 assets 目录的内容,例如,countryCode用来初始化App国家数据。
Android App文件结构分析_第2张图片
(3)classes.dex:应用程序的可执行文件。可以看到此APP有多个dex,是因为当前的方法数超过65535,进行了分包处理。如果未超过,则只有一个dex。Android的所有代码都集中在此。可以通过反编译工具dex2jar转化成jar包,再通过jd-gui查看其代码。
(4)com:com中存放的是一些证书。
(5)lib:该目录存放的是应用程序依赖的不同 ABI 类型的 .so 文件,如图所示。这里给大家一个疑问,知道为什么当前目录只有一个armeabi而没有例如支持x86平台等的.so呢?(提示一下,可以在App瘦身中寻找答案)
Android App文件结构分析_第3张图片
(6)META-INF:该目录存放的是签名相关的信息,用于验证 APK 包的完整性以及保证系统的安全。主要包含三个文件:
① MANIFEST.MF:主要存放 APK 包中每个文件的名字及每个文件的 SHA1 哈希值。
② CERT.SF:通常每个 APP 会有一个特定的名字,例如 BDMOBILE.SF、NETDISK_.SF等, 它保存的是 MANIFEST.MF 的哈希值以及 MANIFEST.MF 文件中每一个哈希项的哈希值。
③ CERT.RSA:这个文件保存了 APK 包的签名和证书的公钥信息。
Android App文件结构分析_第4张图片
Tips:此目录的特殊作用请参考本博客的多渠道打包文章
(7)res:该目录存放应用的资源文件,包括图片资源、字符串资源、颜色资源、尺寸资源等,这个目录下面的资源都会出现在资源清单文件 R.java 的索引中。
Android App文件结构分析_第5张图片
(8)resources.arsc:资源索引表,用来描述具有ID值的资源的配置信息。

你可能感兴趣的:(Android架构构建)