用两个例子来说明资源索引的过程和原理,下面 resources.arsc 统称 arsc 文件,classes.dex 统称 dex 文件。
应用名称
APK介绍中提到应用名称定义在 AndroidManifest.xml 文件中,其具体是在 application 标签的 label 属性中,但一般它的值只是一个资源 ID,而具体的值在 arsc 文件中。为什么这样设计呢?主要是为了多国语言支持。然后我们可以根据这个 ID 去 arsc 文件中查找它的具体值。
例如下图所示
在上图中,应用名称指定为 @7f0e0032,若在中文简体的系统,应用名称是 MT管理器,若在其它语言系统,应用名称是 MT Manager。
布局文件
在 dex 文件中,我们查看某个 Activity 的代码,一般它是通过 setContentView(ID) 来加载布局文件,我们同样可以用上面的办法通过这个 ID 拿到具体的值,不过我们通过这个 ID 在 arsc 文件中找到的值应该是像 res/layout/activity_main.xml 这样的路径,可以看出布局资源在 arsc 存储的只是文件路径,具体的内容我们还需要去 APK 中找到这个文件并打开。
除了布局文件,图片文件、菜单文件等也是同样的情况,均在 arsc 文件中存储资源文件路径。