Android之应用资源的调用
应用资源的调用
为了提高应用在运行时的访问资源信息的效率,Android会在应用的开发和编译过程中,对应用资源预处理,使资源占用空间更小、解析更快,调用更方便。
Android对应用资源的处理分3个阶段:预编译(用appt)、编译(用Javac)、打包(用apkBuilder)。
预编译
将中间语言编写的内容转换成逻辑代码:预编译。
Android中用appt工具。对所有的应用资源目录结构和资源文件进行解析,编译生成R.java和APP._ap文件。R.java放于gen目录。路径名为包名+R。R.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 ;
上一篇: PHP5 字符串处理函数大全