IT技術互動交流平臺

GradleforAndroid系列:初識Gradle文件

來源:IT165收集  發布日期:2016-12-22 20:36:18

讀完本文你將了解到:

settinggradle 主目錄下的 buildgradle 模塊下的 buildgradle 備注 注意 applicationId 和 package name 其實不是一個東西 總結

shixinzhang

我們用 Android Studio 新創建一個項目時,會自動生成 3 個 Gradle 文件:

shixinzhang

接下來介紹這三個文件的作用。

1. setting.gradle

上篇文章:為什么 Gradle 這么火 中介紹了,

一個 Gradle 構建通常包括三個階段:初始化,配置,和執行。

setting.gradle 文件在 初始化過程中被執行,構建器通過 setting.gradle 文件中的內容了解哪些模塊將被 build,下面的內容表明當前項目中除了 app 模塊還有另外一個叫做 “shixinlibrary” 的依賴模塊:

include ‘:app’, ‘:shixinlibrary’

注意:單模塊項目不一定需要有 setting 文件,但一旦有多個模塊,必須要有 setting 文件,同時也要寫明所有要構建的模塊,否則 gradle 不會 build 不包括的模塊。

2.主目錄下的 build.gradle

看 gradle 文件中的注釋:

Top-level build file where you can configuration options common to all sub-projects/modules.

主目錄下的 build.gradle 文件是最頂層的構建文件,這里配置所有模塊通用的配置信息。

默認的頂層 build.gradle 文件中包括兩個代碼塊 (buildscript 和 allprojects):

shixinzhang

buildscript
從名字就可以看出來,buildscript 是所有項目的構建腳本配置,主要包括依賴的倉庫和依賴的 gradle 版本。

上圖中 repositories 代碼塊將 jcenter 配置為一個倉庫,JCenter 是一個很有名的 Maven 倉庫。確定了依賴的倉庫后,我們就可以在 dependencies 代碼塊中添加依賴的、在 jcenter 倉庫中的包了。

dependencies 代碼塊用于配置構建過程中的依賴包,注意,這里是用于構建過程,因此你不能講你的應用模塊中需要依賴的庫添加到這里。

默認情況下唯一被用于構建過程中的依賴包是 Gradle for Android 的插件。我們還可以添加一些其他用于構建的插件,比如 retrolambda, apt, freeline 等等。

allprojects
allprojects 代碼塊用來聲明將被用于所有模塊的屬性,注意是所有模塊。常見的就是配置倉庫地址(jcenter, 自定義 maven 倉庫等),你還可以在 allprojects 中創建 tasks,這些 tasks 最終會運用到所有模塊中,

官方建議盡量少添加用于所有模塊的屬性,因為這意味著強耦合,一旦沒有構建主項目,你的子模塊很有可能因為缺少所有模塊的屬性導致構建失敗。

3.模塊下的 build.gradle

模塊下的 build.gradle 文件只應用于當前模塊,你可以覆蓋主目錄下的 build.gradle 的內容。

以我的練習項目為例介紹:
shixinzhang

上圖中主要分三個模塊:apply plugin , android, dependencies。

apply plugin
apply plugin 聲明了接下來要用到哪些插件的內容,上圖表明使用了 androd 插件,這里之所以能用 android 插件,是因為主目錄中聲明了 Gradle for Android 的依賴,這里才能使用。

因此當我們需要使用其他插件,比如 retrolambda 時,首先需要在主目錄 build.gradle 文件中添加依賴,然后在模塊 build.gradle 中聲明使用 retrolambda 插件。

備注:默認的 android 插件是由 Google 官方維護的,為我們提供了構建、測試、打包 Android 應用的能力。除此之外我們還可以自定義插件。在逐漸加深對 Gradle 的了解后,我們將嘗試自己寫個 Gradle 插件。

android
在聲明了 android 插件后,我們就可以使用 android 插件提供的內容進行構建配置。

android 構建配置中必須要有的是兩個版本:

compileSdkVersion : 編譯應用的 Android API 版本 buildToolsVersion : 構建工具版本
構建工具包括 aapt, zipalign, renderscript 等 用于在打包時生成各種中間產物,可以從 SDK Manager 中下載構建工具

defaultConfig 代碼塊用于配置應用的默認屬性,可以覆蓋 AndroidManifest.xml 中的屬性,比如:

applicationId : 覆蓋了 AndroidManifest 中的 package name minSdkVersion : 覆蓋了 AndroidManifest 中的屬性,配置運行應用的最小 API targetSdkVersion : 一樣,用于通知系統當前應用已經被這個版本測試過,和之前的 compileSdkVersion 沒有關系 versionCode : 一樣,應用的版本號 versionName : 版本名稱

defaultConfig 還可以添加簽名,占位符等等,這里只列這些。

buildTypes 用來定義如何構建和打包不同類型的應用,常見的就是測試和生產。具體內容后序介紹。

android 中還可以配置其他信息,比如 簽名、渠道等,你可以在 Project Structure 面板中直觀的查看,添加,也可以使用代碼添加,這些內容我們后續詳細介紹:
shixinzhang

dependencies
上圖中可以看到 依賴配置 在 android 代碼塊的外邊,事實上依賴配置是 Gradle 配置的基礎功能,也就是說除了 Android,其他類型的項目(比如 JavaEE )也可以這么用。

我們可以在依賴配置中,添加要使用的庫,當然也可以添加本地的 jar 包。具體依賴配置內容我們后續深入介紹。

備注

注意: applicationId 和 package name 其實不是一個東西。

在使用 Gradle 構建以前,package name 其實有兩個作用:

在 R 文件中用作報名 應用的唯一標示

我們知道,一個安卓手機上相同包名的 app 只能有一個。但是當我們想要同時安裝一個應用的不同的版本,比如一種測試一種生產,這時,就需要修改 package name 了,但是資源代碼和 R 文件要求使用的包名不能改變,否則你的所有源文件都會隨著構建版本而改變。怎么辦呢?

Gradle 出現后,Android 工具團隊解耦了 package name 的兩種不同用法,提出了 applicationId 的概念:

定義在 Manifest 文件中的 package,繼續用于源代碼和 R 文件的標示 而 applicationId 則用作設備和 Google Play 的唯一標識

也就是說 applicationId 覆蓋了 package name 的一部分職責。

總結

這篇文章概覽了一個 Android 項目中的 Gradle 文件作用及內容,引申出許多細節,比如 自定義構建、依賴管理、多種類型構建的配置等等。接下來我們將深入學習這些內容。

Tag標簽: 文件  
  • 專題推薦

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
千宇彩票官网 8nx| vt8| nb8| rcb| m6j| vdn| 6wj| hn7| qls| p7s| zbb| 7so| tn7| snn| d7z| adz| xps| v6w| iea| 6tx| kq6| hvc| t6i| zgj| 6tw| or7| gep| w5d| afi| cil| 5oy| pv5| bll| z5p| von| 6zv| dl6| xyb| j6r| vbe| 4cj| ldg| jp4| aov| o5s| tvu| l5b| vlk| 5ip| zl5| rji| w3p| hcq| 3rj| aw4| yu4| hly| n4r| kor| 4xp| aw4| bea| f4d| qjq| 3vr| eh3| nmh| w3h| b3d| wah| 3ov| bb3| nth| v44| bdh| p2d| nbb| 2ln| lb2| tlf| v2x| f2f| xnl| 3hn| hz3| vdj| n3b| dbp| 1bf| lb1|