Android之应用资源的调用

阅读更多

应用资源的调用

为了提高应用在运行时的访问资源信息的效率,Android会在应用的开发和编译过程中,对应用资源预处理,使资源占用空间更小、解析更快,调用更方便。

    Android对应用资源的处理分3个阶段:预编译(用appt)、编译(用Javac)、打包(用apkBuilder)。

预编译

将中间语言编写的内容转换成逻辑代码:预编译。

 

Android中用appt工具。对所有的应用资源目录结构和资源文件进行解析,编译生成R.javaAPP._ap文件。R.java放于gen目录。路径名为包名+RR.java类结构简单,由一组静态内嵌类,及其中的静态证书变量组成。

R.java类相当于一张索引表,每个整形变量对应着存储在APP._ap文件中的一个资源项。

 

APP._ap文件是根据资源内容编译成的二进制文件,收录了应用的所有的资源信息。

编译

R.java类利用SDK提供的dx工具,将所有的.class文件汇集成为一个Android定义的dex格式。

打包

通过apkbuilder生成APK文件。APP._ap会进一步压缩,生成更小的resources.arsc文件。

 

应用资源的管理

Android按层次结构来管理应用资源的内容。每个应用资源会统一放在一张资源表Resource Table,该表内包含多个资源包,Resource Package Group 每个资源包中存放着不同资源类型Resource type 的数据, 每种资源类型的数据会按照给定的资源配置,存放资源项。

 

R类每个变量都是32位整型数,高8位表示资源包信息,次高8位表示资源类型;最低的16位表示资源项的索引信息;因此每个应用最多包含256个资源包。每个资源包最多有256种资源类型,资源类型最多有65536个资源项。

    通过R类定位资源时,先根据高8位来定位资源包,再用次高8位定位资源类别,最后用16位涨到何时的资源项。(C++实现)

 

应用资源的使用

通过R类和Resources类,可以使用所有的应用资源。如R.String.XX

 

Resources.getColor Resources.getLayout

你可能感兴趣的:(Android,应用资源,调用)