您好,登錄后才能下訂單哦!
這篇文章主要為大家分析了Gradle為什么這么流行的相關知識點,內容詳細易懂,操作細節合理,具有一定參考價值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學習“Gradle為什么這么流行”的知識吧。
Android Studio 占領市場后,構建工具 Gradle 的地位無人能比,我們有必要學習、使用它來為我們創造價值。
在深入學習 Gradle 之前,我們有必要了解下它為什么這么流行。
Android 應用的構建過程
Android 應用程序的構建過程非常復雜,如圖所示:
主要有以下幾步:
主要的資源文件(layout, values 等)都被 aapt 編譯,并且在一個 R 文件中引用
Java 代碼被 Java 編譯器編譯成 JVM 字節碼(.class 文件)
JVM 字節碼再被 dex 工具轉換成 dalvik 字節碼(.dex 文件)
然后這些 .dex 文件、編譯過的資源文件和其他資源文件(比如圖片)會被打包成一個 apk
apk 文件在安裝前會被 debug/release 的 key 文件簽名
安裝到設備
幾個注意點
上面的步驟中***步注意是主要的資源文件,有些特別的資源文件就不會被編譯,比如 assets 目錄下的文件,raw 目錄下的文件還有圖片,都不會被編譯。只不過 raw 下的文件會在 R 文件里生成 id
如果對 apk 正式簽名,還需要使用 zipalign 工具對 apk 進行對齊操作,這樣做的好處是當應用運行時會減少內存的開銷
通過上面的介紹可以看到,這么復雜的構建過程如果需要人手動去完成未免太過殘忍,于是有了各種的構建工具。
Android 構建的舊愛:Ant, Maven
在 Gradle 之前被廣泛使用的是 Apache Ant 和 Maven。
Ant
Ant 2000 年發布,很快成為 Java 項目***的構建工具。
Ant 的優點就是:
簡單、易學,不需要什么特殊準備就能上手
基于過程式編程思想使得構建非常靈活
后來還能支持插件。
不足之處就是使用 XML 作為腳本配置格式,除非是很小的項目,否則它的 XML 文件很快就大得無法管理。
Maven
Maven 發布于 2004 年。目的是解決使用 Ant 所帶來的一些問題。
Maven 也是使用 XML 作為構建配置的文件格式,不過文件結構卻有了巨大的變化:
Ant 需要開發者將執行 task 所需的全部命令都列出來
而 Maven 依靠約定并提供現成的可調用的目標
不僅如此,Maven 更重要的一個進步是具備從網絡上自動下載依賴的能力(當然 Ant 后來通過 Ivy 也具備了這個功能),這革命性地改變了我們開發軟件的方式。
Maven 的缺點是:
依賴管理不能很好地處理相同庫文件不同版本之間的沖突(Ivy在這方面更好一些)
XML 作為配置文件的格式有嚴格的結構層次和標準,定制化目標很困難
Maven 主要解決了依賴管理的問題,然而使用 XML 的錯誤使它重蹈覆轍,實際上用 Maven 很難寫出復雜、定制化的構建腳本,在大型項目中,它經常什么“特別的”事還沒干就有幾百行代碼,甚至不如 Ant。
前輩們在反省前兩種構建工具的錯誤之后,提出了 DSL (Domain Special Language, 領域專用語言)的概念,目標是設計一套能夠解決特定領域問題的語言。在構建這方面,DSL 的一個成功案例就是 Gradle。
Android 構建的新歡:Gradle
2012 年發布的 Gradle 深刻吸取前面幾位前輩的經驗和教訓,集大家之所成,做了很多改進。
Gradle 有約定優于配置的原則,即為設置和屬性提供默認值,這使得它比 Ant 或者 Maven 更容易上手。
Gradle 構建腳本不再使用 xml ,而是使用基于 Groovy 的 DSL 進行書寫(Groovy 是一種基于 Java 虛擬機的動態語言,因此 Android 開發者看著會很熟悉),從而使得構建腳本比用 Ant 和 Maven 寫的更清晰、簡潔,下面是實現同樣目標的 Maven 代碼和 Gradle 代碼對比:
Gradle 既有 Ant 的強大和靈活,又有 Maven 的依賴管理,支持插件且易于使用。因此一推出就獲得廣泛關注,2013 年被 Google 選為 Android Studio 的默認構建工具。
Gradle 設計的方式使得它可以很容易地擴展構建和插入到現有的構建過程中,Google 推廣 Gradle 和 Android Studio 時,目標是讓代碼復用、構建 variant、配置和定制構建過程變得更加簡單。
有人可能擔心是否需要專門去學習新語言 Groovy,《Gradle for Android》書中專門提到:
Groovy 代碼非常易讀,如果你學習過 Java,那么學習 Groovy 的曲線不會陡峭。 如果你想構建自己的任務和插件,那么對 Groovy 有更深層次的理解尤為重要。 不過因為 Groovy 是基于 Java 虛擬機的,所以你完全可以用 Java 或者其他基于 Java 虛擬機的語言來編寫你的自定義插件。
Gradle 的關鍵概念及構建生命周期
Gradle 中兩個關鍵的概念:項目和任務。
每個 build.gradle 構建腳本文件代表一個項目 project:
任務 task 定義在構建腳本里:
每次構建至少包括一個項目,每個項目里又至少包括一個任務。
構建生命周期
一個 Gradle 構建通常包括下面三個階段:
1.初始化
項目實例會在這時被創建,如果這個項目里有多個 module,或者依賴多個 library,并且它們都有對應的 build.gradle 文件,就會創建多個項目實例
2.配置
在這個階段構建腳本被執行,并且為每個項目實例創建和配置任務
3.執行
在這個階段 Gradle 將根據構建腳本的配置決定哪些任務會被執行
不同任務之間可能有 相互依賴,因此在配置階段 Gradle 會生產依賴關系圖,沒有依賴的任務通常會被優先執行,然后一個接一個執行其他任務。一旦一個任務被執行過,就不會被再次執行。
Gradle Wrapper
Gradle 在不斷的發展,有可能存在新版本不兼容舊版本的情況,于是官方為我們提供了 Gradle Wrapper,就是為了兼容和適配不同版本,確保構建是可重復的。
普通的 Gradle 腳本命令是:
gradle ...
而 Gradle Wrapper 命令只是在 gradle 后加了個 w:
gradlew ...
在 Mac 下略微有些不同:
./gradlew ...
開發者或者自動構建系統可以通過使用 wrapper 來運行 gradle 命令,由它來搞定兼容等問題。因此我們甚至都不需要安裝 gradle,直接使用 gradle wrapper 即可,就像 Android Studio 里推薦的一樣:
上圖我并沒有使用 wrapper,是因為當你運行 gradlew 命令時,gradle wrapper 會自動下載需要但是你沒有的 gradle 版本并使用。 這在多人協作時,很可能因為別人修改了 gradle 版本、上傳到 git,然后導致你運行命令時需要下載半天。
不過官方還是推薦使用 wrapper,畢竟這樣更穩定。
關于“Gradle為什么這么流行”就介紹到這了,更多相關內容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網站!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。