欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android之应用资源的调用

程序员文章站 2022-05-09 08:49:39
...

应用资源的调用

为了提高应用在运行时的访问资源信息的效率,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