APK打包過程

1。 解析AndroidManifest。xml,建立ResourceTable物件

APK打包過程

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。