Android 開發你需要了解的 Gradle 配置

這兩天很忙,在解決項目中遇到的一些疑難雜症,今天抽空看了後台,然後又一堆人留言說「張哥拖更啦,每天刷好幾遍只為看張哥文章」,好吧,今天無論如何得忙中偷閑來給你們更新一篇。

之前發過這篇文章「給 Android 初學者的 Gradle 知識普及」,很多人表示終於了解了 Gradle 咋回事了,但是工作的項目中一些 Gradle 配置仍然不知道啥意思,查資料也一頭霧水,那麼今天我就來給你們說下工作中常用的一些 Gradle 配置。

1. Gradle 相關的文件

我們在 Android Stduio 上新建一個全新的 Android 項目,姑且取個名字叫 demo ,一般就包含了三個相關的 gradle 配置文件,分別是根目錄下的 build.gradle、settings.gradle 和 app 目錄下的 build.gradle 文件,前兩個文件配置比較簡單,上篇文章也已經有所介紹,今天來主要介紹下 app/build.gradle 文件的詳細配置。

2. app/build.gradle 配置文件

一般來說,新建的一個項目,在 app 目錄會生成一個 build.gradle 文件,app 目錄基本是項目的一個主要目錄了,所有的功能開發都是在這個目錄下,自然該目錄下的 build.gradle 也是整個項目最重要的配置文件,這個文件對全新的項目來說會包含三部分

  • 最頂部的 apply plugin 聲明

  • android {} 節點

  • dependencies {} 節點

apply plugin 聲明

最頂部有一行代碼是這樣的:

apply plugin: "com.android.application"

代表該項目是一個 Android 項目,而且一個 Android 項目只有一句這個聲明,別問為什麼這樣寫,這是規範。

如果你的項目有引用一些 module ,你可以理解成通過源碼的方式引用一些 android library ,那麼你的 module 開頭需要聲明是一個 android library ,那需要這樣寫:

apply plugin: "com.android.library"

是不是很容易理解?

dependencies 節點

我們先來看下 dependencies 節點,dependencies 是 denpendency 的複數,意為依賴的意思,所以這裡就是用來管理依賴的地方。這裡以我的開源項目 9GAG 為例,依賴一般有三種:

我們知道我們可以在 AS 中直接依賴 jar 文件,靠的就是這行代碼 compile fileTree(dir: "libs", include: ["*.jar"]) ,意思是編譯 libs 目錄下的所有 jar 包,當然你可以更改這個目錄。

第二種就比較常見了,現在大家都已經很熟悉了,就是直接依賴遠程項目名字 + 版本號,至於該項目是放在哪裡的呢?一般是放在 jcenter 和 maven 倉庫的,這個可以在項目根目錄下的 build.gradle 指定遠程倉庫地址,甚至可以在本地搭建一個私有倉庫,然後指定本地倉庫地址。

第三種就是類似原始的引用 android library 的方式,一般是你們公司內部的項目,或者改第三方庫的源碼,同時本地又沒有搭建私有倉庫,才會選擇這種方式。這種方式目前很不推薦了,大部分情況第二種方式完全足夠了,但是大家知道這也是一種依賴方式。

android 節點

以上兩個節點都相對簡單點,這個節點是跟項目配置緊密相關的,簡單有簡單的配置方法,複雜也有複雜的配置方法,這裡我先列舉一些項目常用的配置,並且加上了注釋方便大家理解:

這部分應該比較簡單,沒有不理解的吧?就不過多解釋了。

buildTypes 意為編譯類型,這裡聲明了 debug 和 release 兩種類型,當然你也可以聲明其他類型,名字隨意取,可以看到 debug 和 release 兩種類型簽名所用的配置不一樣,這個配置具體詳細也就是在上部分 signingConfigs 節點指定的,那裡面的一些密碼信息是在你生成 keystore 文件時設置的。

這裡配置完成之後就可以通過上篇文章提到的的命令 gradlew assembleDebug 或者 gradlew assembleRelease 進行打包了,這裡估計有同學會問這個命令跟 buildTypes 有沒有什麼關係呢?聰明,是有關係的,這裡用到的其實就是 assemble 命令,而 assemble + buildTypes 會生成一個 task ,所以 gradlew assembleDebug 和 gradlew assembleRelease 都是屬於拼接的一個 task ,如果你 buildTypes 定義了一個 abc 的類型,那你就會有一個 gradlew assembleAbc 的 task 可以執行。

但是關於 task 遠不止與此,這裡先提一下,後面再給大家單獨介紹。

3. 從 Eclipse 遷移到 AS

上面的一些命令差多介紹完了一些項目的基本配置,大家基本也都明白各個配置的意思了,相信大家大部分也都在用 AS 了,但是不排除仍有部分讀者還在用著 Eclipse ,或者正準備從 Eclipse 遷移到 AS 上,從 Eclipse 遷移到 AS 上應該會遇到不少問題,但是我認為一個最大的問題就是 gradle 腳本的生成,Eclipse 支持直接導出 AS 項目,就給我們生成了 gradle 腳本,當然如果你對 gradle 熟悉的話完全可以自己新建 gradle 文件,然後自己把一些 gradle 配置手動寫上去。

還有一個最大的問題是目錄結構,我們知道 Eclipse 上的目錄結構是:

demo

|-- app

|--libs

|--src

|--res

而 AS 上的項目結構是:

demo

|--libs

|--src

|--main

|--java

|--res

所以如果不想對目錄結構進行更改的話,直接用上面 gradle 腳本進行構建會失敗,而這時候你需要添加如下配置:

上面也沒啥解釋的,就是手動指定編譯對應的目錄,相信大家看得懂。

4. 總結

當然 Gradle 的配置不止以上介紹的,還有其他配置,如忽略 Lint 的檢查報錯,打包的時候忽略一些文件、指定 Java 版本等:

這些問題不必太在意,一般你在編譯或者打包出錯的時候 gradle 會提示你什麼錯誤的,按照提示進行修改就行了。

最後,實際項目中 Gradle 的配置與使用遠不止如此,這篇文章先教給大家一些項目中最通用的一些配置,讓大家對基本的配置理解了,後續再介紹一些其他有用的配置以及一些進階的用法!

本文原創發佈於微信公眾號 AndroidDeveloper「googdev」,不僅是Android原創乾貨分享,也許是最有人情味的技術公眾號,轉載請務必註明出處!

推薦閱讀:

開源推薦:Android圖片壓縮開源庫
如何評價一千萬台安卓手機受到廣告病毒感染?
WP 不如 Android 和 iOS 成熟,在三者高端機型都買得起的情況下你為什麼選擇 WP?
如何看待文章:讓我們準備祭奠小米帝國?

TAG:Android | Android开发 |