Android基礎編譯流程

前言:該文章爲學習筆記,記錄Android知識點,大家一起學習。

Android工程的構建打包是一個非常複雜的流程,涉及工程源代碼、資源文件、AIDL文件,以及工程所依賴的庫文件的編譯轉換。編譯流程非常靈活,因此瞭解它的一些底層工作原理會很有幫助。

從谷歌官網上找到一張典型的構建流程圖:
在這裏插入圖片描述

https://developer.android.com/studio/build/index.html?hl=zh-cn

介紹一下編譯構建的四個步驟:
代碼編譯 --> 代碼合成 --> 資源打包 --> 簽名和對齊
(1)Java編譯器對工程對代碼資源進行編譯,代碼資源包括App的源代碼、apt編譯生成的R文件和AIDL文件生成的Java接口文件。通過Java編譯器生成xxx.class文件。
(2)通過dex工具,將xxx.class文件和工程依賴的第三方庫文件生成虛擬機可執行的dex文件,如果使用了MultiDex,會產生多個dex文件,包含編譯後的所有class文件,也包括自身的.class文件和依賴庫的.class文件。
(3)apkbuilder工具將.dex文件、apt編譯後的資源文件、依賴中的第三方庫內的資源文件打包生成簽名對齊的apk文件。
(4)使用Jarsigner和Zipalign對文件進行簽名和對齊操作,最終生成apk文件。

通過Gradle工具可以看到每個運行的Task的情況,還可以看到Gradle編譯的流程,詳細的顯示出每個任務的Task耗時。

  • Run init scripts:初始化描述
  • Configure settings:檢查settings.gradle的模塊配置
  • Configure build:檢查build.gradle中引入的classpath
  • Calculate task graph:計算出每個模塊的依賴
  • Run tasks:開始構建任務

如果想要查看Task的依賴樹,這裏推薦使用一個Gradle框架gradle-task-tree,需要配置根目錄的build.gradle:
在這裏插入圖片描述
配置完成後,在Terminal中使用Gradle命令:

gradlew assembledebug taskTree --no-repeat

這個命令在Terminal中打印出Task的依賴樹:
在這裏插入圖片描述
可以很清晰的看出來咱們的編譯流程是怎麼樣的。

需要注意以下幾點:
(1)一定要使用–no-repeat,不然會一直重複打印
(2)Gradle配置需要使用3.3版本以上
(3)工程中全部引用的module都需要配置apply plugin:"com.dorongold.task-tree“。

這裏提供另外一個可視化工具gradle-visteg,在根目錄的build.gradle中配置如下代碼:
在這裏插入圖片描述
同步Gradle後,運行gradle build命令,等待片刻後,編譯完成後會產生visteg.dot文件:
在這裏插入圖片描述
dot是一種描述文件,可以通過WPS等工具瀏覽,下面是示例:
在這裏插入圖片描述
可以逐行的看出編譯流程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章