深刻淺出Gradle

原文:https://code.tutsplus.com/zh-...
原做:Jessica Thornsby
翻譯:Stypstivehtml


做爲第一個專爲Android打造的IDE(集成開發環境),由Google支持的Android Studio是最值得Android開發人員期待的。 但這同時意味着必須掌握一些新技術,特別事Gradle構建系統。android

本文將讓您掌握Android的新構建系統,從基礎的知識,如什麼是Gradle和它能作什麼,到深刻研究一些重要的Gradle文件,以及學習如何執行和監控Gradle任務。web

你將進一步瞭解 Android Studio 中各類不一樣的 Gradle 工具窗口,並學習如何項目中添加依賴,這些都不須要 Gradle 相關經驗。服務器

掌握 Android 新構建系統的第一步是正確理解 Gradle 是什麼,以及爲何在 Android Studio 中引入 Gradle 對 Android 開發人員來講是一個好消息。網絡

什麼是 Gradle?

Gradle 是一套自動構建工具包,它能夠經過插件集成到不少不一樣的環境中。 在 Android Studio 中,Gradle 的集成是經過恰當命名的 Android Gradle 插件來實現的。app

當你考慮遷移到 Android Studio 時,若是以前從未使用過 Gradle,它多是一個使人沮喪的入門壁壘。 可是,Gradle 可以給 Android 開發人員提供不少幫助,因此很是值得投入一些時間來學習 Gradle 的前因後果。 這裏是幾個你可使用 Gradle 作的事情。ide

減小新項目所需的配置
Gradle 有一套默認配置,它會自動應用於您在 Android Studio 中建立的每一個項目。 若是您開發的項目不能遵照這些默認配置規則,Gradle 也很容易自定義。工具

聲明項目依賴關係
依賴關係能夠是模塊、 JAR 文件或者庫,而且它們既能夠位於本地文件系統也能夠位於遠程服務器上。學習

測試您的項目
Gradle 自動生成一個測試目錄,並從您項目的測試源文件生成一個測試 APK,還能夠在構建過程當中運行測試。測試

生成簽名 APK
若是你將全部必要的信息,如 keyPasswordkeyAlias,添加到您的 Gradle 文件中,您可使用 Gradle 來生成簽名的 APK。

從單個模塊生成多個 APK
Gradle 可使用不一樣的包和配置從單個模塊生成多個 APK 。 這個特性對安卓開發人員來講特別方便,有如下幾個緣由:

1) 支持各類設備

Android 平臺開發中很大一部分是用來儘量支持更多不一樣的 Android 設備和不一樣版本的 Android 操做系統。 谷歌市場甚至有多 APK 支持,所以您能夠爲您的 app 建立多個版本,在每一個版本針對不一樣的設備配置,在市場中提供單獨的清單列表。

這就是爲何引進 Gradle 的緣由。 您可使用 Android 的新構建系統從同一個模塊生成多個 APK 的不一樣版本。 只須要給這些不一樣版本提供相同的包名,您就能夠將它們上傳到相同的谷歌市場清單列表。

2) 提供一個 app 的不一樣版本

有時,您會想要在谷歌市場中列出您的 app 的多個版本,例如,您想要提供您的 app 的免費和"Pro"版本。 一樣,您可使用 Gradle 從同一個模塊中生成多個 APK,並給每一個 APK 一個不一樣的包名。 以後你就能夠分別上傳每一個 APK 到谷歌市場中。

探索 Gradle 文件

每當在 Android Studio 中建立項目時,構建系統會自動生成全部必需的 Gradle 文件。

由於每次你建立一個 Android Studio 項目,你都會遇到相同的 Gradle 文件。咱們將建立一個基本示例項目,而後仔細看看這些自動生成的文件。

第一步,建立示例項目:

  1. 啓動 Android Studio。

  2. 單擊 Start a new Android Studio project。

  3. 給您的項目一個名字,輸入域名,而後選擇用於存儲您的示例項目的位置。 單擊 Next。

  4. 確保只有 Phone and tablet 被選中,並接受默認最低 SDK 設置。 單擊 Next。

  5. 選擇 Blank Activity 而後單擊 Next。

  6. 保持默認設置,而後單擊 Finish。

Gradle 文件

Gradle 文件使用特定領域語言或 DSL 定義自定義構建邏輯,並與 Gradle 插件的安卓專有元素進行交互。

Android Studio 項目由一個或多個模塊組成,這些模塊是您能夠單獨構建、 測試和調試的組件。 每一個模塊都有本身的構建文件,所以,每一個 Android Studio 項目包含兩種 Gradle 構建文件:

  • 頂級構建文件: 你將在這裏找到項目全部模塊的通用配置選項。

  • 模塊級構建文件: 每一個模塊都有本身的的 Gradle 構建文件,包含了模塊特定的設置。 絕大多數時間,您都在編輯模塊級構建文件而不是項目的頂級構建文件。

要查看這些 build.gradle 文件,請打開 Android Studio Project 面板 (經過選擇 Project 選項卡) 並展開 Gradle Scripts 文件夾。 在咱們的示例項目中,列表中的前兩項是您項目的頂級和模塊級構建文件。

圖片描述

咱們的示例項目只有單個模塊級別的構建文件,但下面的截圖給你一個提示,在多模塊項目中 Gradle Scripts 文件夾可能的樣子。

圖片描述

頂級 Gradle 構建文件

每一個 Android Studio 項目包含一個惟一的頂級 Gradle 構建文件。 這個 build.gradle 文件是出如今 Gradle Scripts 文件夾中的第一項,並清楚地標記爲 Project。

大多數狀況下,您不須要對此文件進行任何更改,但瞭解它的內容和它在您的項目鎖扮演的角色仍然頗有用。 如下即是一個典型的頂級構建文件的註釋版。

buildscript {
 
//Project-level Gradle build files use buildscript to define dependencies.//
 
    repositories {
 
        jcenter()
    }
 
//This file relies on the jJCenter repository.//
 
    dependencies {
 
   classpath 'com.android.tools.build:gradle:1.0.0'
 
//Project is dependent on version 1.0.0 of the Android plugin for Gradle.// 
 
    }
}
 
allprojects {
 
//Defines the dependencies required by your application.//
 
    repositories {
        jcenter()
    }
}
 
//Application depends on the jCenter repository.//

模塊級 Gradle 構建文件

除了項目級 Gradle 構建文件,每一個模塊有一個本身的 Gradle 構建文件。 如下即是一個基本的模塊級 Gradle 構建文件的註釋版。

apply plugin: 'com.android.application'
 
//Since this project is an Android app, the build.gradle file utilises the Android plugin.//
 
android {
 
//The following section configures all your project’s Android-specific parameters, and tells Gradle which version of Android it should build your project with. If you’ve developed Android applications before, the following should all be familiar.//
 
    compileSdkVersion 21
 
//The API your project is targeting.// 
 
    buildToolsVersion "21.1.1"
 
////The version of the build tools you want to use.//
 
    defaultConfig {
 
        applicationId "com.example.jessica.myapplication"
 
//Defines your application’s ID. Note, earlier versions of the Android plugin used ‘packageName’ instead of ‘applicationID.’//
 
        minSdkVersion 16
 
//The minimum API required by your project.//
 
        targetSdkVersion 21
 
//The version of Android you’re developing your application for.//
         
versionCode 1
 
        versionName "1.0"
    }
 
    buildTypes {
        release {
 
//‘BuildTypes’ controls how your app is built and packaged. If you want to create your own build variants, you’ll need to add them to this section.//
 
            minifyEnabled true
 
//Gradle runs ProGuard during the build process.//
 
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
 
//Applies the default ProGuard settings from the Android SDK.// 
 
        }
    }
}
 
dependencies {
 
//Declares the dependencies for the current module.//
 
   compile fileTree(dir: 'libs', include: ['*.jar'])
 
//Although you can add JAR files by compiling them individually, this can be time-consuming if you have lots of JARs. In this example, we’re telling Gradle to add all the JAR files in the app/libs folder.// 
 
  compile 'com.android.support:appcompat-v7:21.0.3'
 
//To create more dependencies, add them to the depencies closure.//
 
}

其餘 Gradle 文件

除了 Build.gradle 文件,您 Gradle Scripts 文件夾中包含一些其餘 Gradle 文件。 很少數狀況下,你沒必要手動編輯這些文件,當您更改項目的任何有關配置,它們會自動更新。 然而,理解這些文件在您的項目內扮演的角色是一個不錯的主意。

gradle-wrapper.properties (Gradle Version)

此文件用來容許其餘人生成代碼,即便在他們的機器上沒有安裝 Gradle。 此文件檢查是否安裝了正確版本的 Gradle,若有必要下載必要的版本。 在咱們的示例 app 中,gradle wrapper.properties 包含如下內容:

distributionBase=GRADLE_USER_HOME
 
//Determines whether the unpacked wrapper distribution should be stored in the project, or in the Gradle user home directory.//
 
distributionPath=wrapper/dists
 
//The path where the Gradle distributions required by the wrapper are unzipped.//
 
zipStoreBase=GRADLE_USER_HOME
 
zipStorePath=wrapper/dists
 
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
 
//The URL where the correct version of Gradle should be downloaded from.//

settings.gradle

此文件將引用組成您項目的全部模塊。 由於咱們的示例項目只有一個模塊,此文件很是直白,正如你在下面看到的那樣。

include ':app'

gradle.properties (Project Properties)

此文件包含您整個項目的配置信息。 它默認是空的,但您能夠經過在此文件中添加內容以使您的項目應用大範圍的特性。

local.properties (SDK Location)

該文件用來告訴 Gradle 插件,它在哪裏能夠找到你的 Android SDK 安裝位置 。 例如:

sdk.dir=/Users/jessica/Library/Android/sdk

請注意,local.properties 包含的信息是指定安裝在 本地 的 Android SDK 的路徑。 這意味着你不該該將這個文件放在代碼版本控制中。

Android Studio 用戶界面

如今,您已經熟悉全部自動生成的 Gradle 文件,是時候轉向與 Gradle 構建系統交互了。 好消息是,你能夠經過 Android Studio 的用戶界面與 Gradle 直接進行交互。

在 Andorid Studio 的豎直與水平邊緣,有一些用於打開的各類工具窗口的選項卡。 在接下來的幾節中,我會向您介紹一些 Android Studio 中的 Gradle 工具窗口,並展現如何經過這些窗口與 Gradle 構建系統進行交互。

Gradle 任務窗口

您可使用 Gradle 任務窗口瀏覽和執行不一樣的任務,這些任務是將您的項目編譯成可執行應用程序中執行所涉及的各項任務。

若要打開 Gradle 任務窗口,請單擊 Android Studio 右側的 Gradle 選項卡。 若是您自定義了您的 Android Studio 用戶界面,致使找不到 Gradle 選項卡,那麼您能夠依次選擇 View > Tool Windows > Gradle。

在 Gradle 任務選項卡中,雙擊您的項目和您的模塊。 你會看到有關此模塊的全部 Gradle 任務的列表。

圖片描述

當您在 Gradle 任務窗口中的雙擊一個任務時,它開始執行並在另外一個 Gradle 窗口中輸出顯示,這個窗口是 Gradle Console。

Gradle Console

Gradle 控制檯顯示 Gradle 任務執行的輸出,包括任何錯誤消息或警告。

若要打開 Gradle 控制檯,請選擇您 IDE 右下角的 Gradle Console 選項卡。 若是您自定義了 Android Studio 的用戶界面,並找不到此選項卡,您老是能夠經過選擇 View > Tool Windows > Gradle Console 來代替。

讓咱們去 Gradle 控制檯兜一圈。 在 Gradle 任務窗口中,找到 assemble 任務,而後雙擊它,這個任務用於生成即將發佈您的應用程序的發佈版本。 當 assemble 任務執行時,任務的輸出顯示在 Gradle 控制檯中。

Gradle 控制檯而後將要麼通知您,您的項目已成功構建,要麼它將顯示"構建失敗"的消息,同時還有您構建失敗緣由的有關信息。

圖片描述

Terminal

您還能夠從 Android Studio 集成的 Terminal 運行 Gradle 任務。 若是您知道到底什麼 Gradle 任務要執行,比起在 Gradle Console 中瀏覽任務列表,終端一般更快,更方便。

要打開終端,單擊位於 Android Studio 左下角的 Terminal 選項卡或選擇 View > Tool Windows > Gradle Console。 而後終端被打開,而且已經選定當前目錄。 而後,您就能夠經過鍵入任務到終端,並按鍵盤上的 Return 或Enter 鍵執行 Gradle 任務。

添加依賴

在本節中,咱們將探討如何使用 Gradle 來管理您的項目模塊依賴關係、 本地二進制文件依賴關係和遠程二進制文件依賴關係。

當向項目中添加依賴關係時,Gradle 提供了幾個選項。

選項 1:拖拽文件到項目的 libs/ 目錄
相關 build.gradle 文件將自動更新。

選項 2:手動修改 build.gradle 文件
打開您的 build.gradle 文件並在依賴項節添加新的構建規則。 例如,若是您想要添加谷歌服務,您的項目依賴項節將會看起來是這樣:

dependencies {
 
       compile fileTree(dir: 'libs', include: ['*.jar'])
 
     compile 'com.google.android.gms:play-services:6.5.+'
 
   }

選項 3:使用 Android Studio 的用戶界面
在 Project 面板中,Control+Click 您要添加依賴的模塊,而後選擇 Open Module Settings。

圖片描述

選擇 Dependencies 選項卡,緊接着選擇左下角的 + 按鈕。 你能夠選擇如下列表中的選項:

  • Library Dependency

  • File Dependency

  • Module Dependency

而後,您能夠輸入要添加到您的項目中的依賴的詳細信息。 例如,若是你選擇 Library Dependency,Android Studio 顯示一個庫列表供您選擇。

一旦您添加了您的依賴,請檢查您的模塊級 build.gradle 文件。 它應該會自動更新以包含新的依賴關係。

總結

這篇文章已經向你介紹了在一個典型的 Android Studio 項目中全部你能找到的自動生成的 Gradle 構建文件,尤爲是頂級和模塊級 Gradle 構建文件。 您還學習瞭如何經過 Android Studio 的用戶界面直接與 Gradle 構建系統進行交互。

若是你有興趣學習更多 Gradle 相關知識,你將會在 Android developer websiteGradle website 上發現不少補充信息。

關於Envato藝雲臺

圖片描述

Envato藝雲臺是數據資產和創造性人才匯聚的全球領先市場平臺。全球數百萬人都選擇經過咱們的市場平臺、工做室和課程來購買文件、選聘自由職業者,或者學習建立網站、製做視頻、應用、製圖等所需的技能。咱們的子網站包括Envato藝雲臺Tuts+ 網絡,全球最大的H五、PS、插圖、代碼和攝影教程資源庫,以及Envato藝雲臺市場,其中的900多萬類數字資產均經過如下七大平臺進行銷售 - CodeCanyon、ThemeForest、GraphicRiver、VideoHive、PhotoDune、AudioJungle和3DOcean。

相關文章
相關標籤/搜索