<p>本篇文章,我们将介绍apk生成的大致流程,并通过大量的案例来展示各种资源的加载过程。</p>
<p>首先说一下资源是怎么生成的。资源生成的工具叫做 AAPT , AAPT 是一个可执行的工具,主要负责资源的编译和打包。</p>
- 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。
<p> Resource ID 是由一个4个字节的 int 组成的,而 Resource ID 又可以拆分成三个部分:</p>
- 第一个字节表示这个资源是属于哪一个包的
- 第二个字节表示这个资源是什么类型的
- 第三、四个字节就是表示这个资源所唯一的标识符
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
getLayout( )
<p>
getLayout()引用Layout资源的流程:</p>
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
getDimention( )
<p>
getDimention( )流程图:
</p>
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
getDrawable( )
完结