用两个例子来说明资源索引的过程和原理,下面 resources.arsc 统称 arsc 文件,classes.dex 统称 dex 文件。

应用名称

APK介绍中提到应用名称定义在 AndroidManifest.xml 文件中,其具体是在 application 标签的 label 属性中,但一般它的值只是一个资源 ID,而具体的值在 arsc 文件中。为什么这样设计呢?主要是为了多国语言支持。然后我们可以根据这个 ID 去 arsc 文件中查找它的具体值。

例如下图所示

资源索引 - 图1

在上图中,应用名称指定为 @7f0e0032,若在中文简体的系统,应用名称是 MT管理器,若在其它语言系统,应用名称是 MT Manager。

布局文件

在 dex 文件中,我们查看某个 Activity 的代码,一般它是通过 setContentView(ID) 来加载布局文件,我们同样可以用上面的办法通过这个 ID 拿到具体的值,不过我们通过这个 ID 在 arsc 文件中找到的值应该是像 res/layout/activity_main.xml 这样的路径,可以看出布局资源在 arsc 存储的只是文件路径,具体的内容我们还需要去 APK 中找到这个文件并打开。

资源索引 - 图2

除了布局文件,图片文件、菜单文件等也是同样的情况,均在 arsc 文件中存储资源文件路径。