1.1Android资源打包、加载及缓存

本篇文章,我们将介绍apk生成的大致流程,并通过大量的案例来展示各种资源的加载过程。


首先说一下资源是怎么生成的。资源生成的工具叫做 AAPT , AAPT 是一个可执行的工具,主要负责资源的编译和打包。

1.1Android资源打包、加载及缓存_第1张图片
资源的打包


  • XML 文件通过 AAPT 编译会生成一个编译过的 XML 文件
  • Values 编译过后没有一个对等的文件,编译过后的 dimens 、 colors 文件数值会存储在 Android 的一个资源包里 resource.arsc , resource.arsc 是一个资源的索引。
  • Image 通过 AAPT 会 Crunch , Crunch 会将 png 进行压缩形成 Android 系统的 Image 文件;值得一提的是,我们在制作** 点9图 **时会有一些伸缩的信息,而 Crunch 不会将这些信息存储起来,而是将数据保存在 resource.arsc 文件里面。
  • Raw文件就相对简单,直接Copy进APK包里的Raw文件中

Resource ID(资源ID)

我们在编写代码的时候会对 XML、Values 等资源进行引用,这时候我们会通过 R.Java 文件去引用。实际上 AAPT 在将资源文件编译成 R 文件之前 会先将资源文件转化成一个 R.text 然后再将 R.text 转化成 R.java,而在 R.java 文件里面,引用的资源是用 Resource ID 来标识的。所以在这里我们有必要介绍一下 Resource ID。

Resource ID 是由一个4个字节的 int 组成的,而 Resource ID 又可以拆分成三个部分:

1.1Android资源打包、加载及缓存_第2张图片
Resource ID的逻辑结构
  • 第一个字节表示这个资源是属于哪一个包的
  • 第二个字节表示这个资源是什么类型的
  • 第三、四个字节就是表示这个资源所唯一的标识符

getString( )



getString()引用String资源的流程:

1. getString();409Context(android.context),Context.java
2. getString();400,Resources(android.context.res),Resources.java
3. getText();308,Resources(android.context.res),Resources.java
5. getResourcesText();105,AssetManager(android.context.res),AssetManager.java
1.1Android资源打包、加载及缓存_第3张图片
getString( ) 逻辑结构图

getLayout( )


getLayout()引用Layout资源的流程:

1. getLayout();1165,Resources(android.content.res),Resources.java
2. loadXmlResourceParser();2776,Resources(android.content.res),Resources.java
3. loadXmlResourceParser();2803,Resources(android.content.res),Resources.java
4. openXmlBlockAsset();485,AssetManasger(android.content.res),AssetManager.java
1.1Android资源打包、加载及缓存_第4张图片
Xml Block逻辑图
1.1Android资源打包、加载及缓存_第5张图片
getLayout( )逻辑结构

getDimention( )


getDimention( )流程图:

1. getDimention();620,Resources(android.content.res),Resources.java
2. getValue();1347,Resources(android.content.res),Resources.java
3. getResourcesValue();196,AssetManager(android.content.res),AssetManager.java
1.1Android资源打包、加载及缓存_第6张图片
getDimention( ) 逻辑结构

getDrawable( )

1.1Android资源打包、加载及缓存_第7张图片
getDrawable( )结构流程图

完结

你可能感兴趣的:(1.1Android资源打包、加载及缓存)