APK打包过程

2017-09-01  本文已影响34人  第八区

Android

官方配置构建介绍
aapt命令介绍
参考老罗的文章

build-process_2x.png

再来一张详细的图

build.png

aapt打包过程

aapt.jpg

1. 解析AndroidManifest.xml,创建ResourceTable对象

uml.png

2. 添加被引用资源包

Android系统定义了一套通用资源,这些资源可以被应用程序引用。例如,我们在XML布局文件中指定一个LinearLayout的android:orientation属性的值为“vertical”时,这个“vertical”实际上就是在系统资源包里面定义的一个值。

3. 收集资源文件

在编译应用程序资源之前,Android资源打包工具aapt会创建一个AaptAssets对象,用来收集当前需要编译的资源文件。这些需要编译的资源文件就保存在AaptAssets类的成员变量mRes中

4. 将收集到的资源增加到资源表

前面收集到的资源只是保存在一个AaptAssets对象中,这一步需要将这些资源同时增加到一个资源表中去,即增加到前面所创建的一个ResourceTable对象中去,因为最后我们需要根据这个ResourceTable来生成资源索引表,即生成resources.arsc文件

5. 编译values类资源

6. 给Bag资源分配ID

类型为values的资源除了是string之外,还有其它很多类型的资源,其中有一些比较特殊,如bag、style、plurals和array类的资源。这些资源会给自己定义一些专用的值,这些带有专用值的资源就统称为Bag资源。例如,Android系统提供的android:orientation属性的取值范围为{“vertical”、“horizontal”},就相当于是定义了vertical和horizontal两个Bag。

7.编译Xml资源文件

xml.jpg
7.1 解析Xml文件
7.2 赋予属性名称资源ID
7.3 解析属性值
7.4 压平Xml文件
压平.jpg

8. 生成资源符号

9. 生成资源索引表

9.1 收集类型字符串
9.2 收集资源项名称字符串
9.3 收集资源项值字符串
9.4 生成Package数据块
resources.jpg

10. 编译AndroidManifest.xml文件

经过前面的九个步骤之后,应用程序的所有资源项就编译完成了,这时候就开始将应用程序的配置文件AndroidManifest.xml也编译成二进制格式的Xml文件。之所以要在应用程序的所有资源项都编译完成之后,再编译应用程序的配置文件,是因为后者可能会引用到前者。

11. 生成R.java文件

12. 打包APK文件

上一篇 下一篇

猜你喜欢

热点阅读