AndroidGradle最實用的指南

AndroidStudio目前已經成爲Android開發人員的主流工具,而Gradle的原理,配置,使用仍然是不少android開發人員感到困惑的地方。網上雖然有不少相關文檔,可是要麼是隻會用可是不知道gradle的原理,要麼就是過於深究Gradle和Groovy,沒能和具體的android使用場景結合,致使不少人看完雲裏霧裏。本文只針對android開發人員,結合具體使用,捎帶介紹一下Gradle和Groovy的本質,但願可讓更多的android開發人員不只能知其然,更能知其因此然。html

參考書籍:linux

實戰Gradleandroid

Android Gradle 權威指南git

巧用Gradle構建Android應用windows

1.  Gradle簡介

2013 年,Google 發佈了全新的 Android 開發 IDE————Android Studio,核心是 Google 新推出的 Gradle 編譯環境。首先,咱們要明白,Android Studio 使用 Gradle 構建工具,Eclipse 的 ADT 插件使用的是 Ant 構建工具。其次,要搞明白Android Studio 爲何使用 Gradle 構建工具。Gradle有什麼特色呢?app

  • 採用了 Domain Specific Language(DSL 語言) 來描述和控制構建邏輯。
  • 構建文件基於 Groovy,而且容許經過混合聲明 DSL 元素和使用代碼來控制 DSL 元素以控制自定義的構建邏輯。
  • 支持 Maven 或者 Ivy 的依賴管理。
  • 很是靈活。容許使用最好的實現,可是不會強制實現的方式。
  • 插件能夠提供本身的 DSL 和 API 以供構建文件使用。
  • 良好的 API 工具供 IDE 集成。

由此可知,Gradle 之因此強大是由於繼承了強大、靈活的 Ant 和 Maven 豐富的依賴管理,配置管理簡單,腳本編寫方便靈活,插件模塊化。jvm

 

2.  AS中的Gradle文件

Gradle的優越性讓它在不少地方都有應用,本文從Android的角度來分析和使用。ide

Android中的一個項目結構一般以下:模塊化

相關文件信息以下:函數

目錄文件 定義
.gradle gradle項目產生文件(自動編譯工具產生的文件)
.idea IDEA項目文件(開發工具產生的文件)
app 其中一個 module,複用父項目的設置,可與父項目擁有相同的配置文件
build 自動構建時生成文件的地方
gradle 自動完成 gradle 環境支持文件夾
.gitignore git源碼管理文件
build.gradle gradle 項目自動編譯的配置文件
gradle.properties gradle 運行環境配置文件
gradlew 自動完成 gradle 環境的 linux mac 腳本,配合 gradle 文件夾使用
gradlew.bat 自動完成 gradle 環境的 windows 腳本,配合 gradle 文件夾使用
local.properties Android SDK NDK 環境路徑配置
*.iml IDEA 項目文件
setting.gradle gradle 項目的子項目包含文件

2.1  settings.gradle

爲何我沒有從build.gradle開始介紹,而是從settings.gradle這個文件開始呢?是由於這個問價是Gradle的設置文件,用於初始化以及工程樹的配置,位置放在根工程目錄下。設置文件大多數的做用是爲了配置子工程。在Gradle中多工程是經過工程樹表示的,就至關於As中看到的Project和Moudle的概念同樣。根工程至關於AS中的Project,一個根工程能夠有不少子工程,也就是不少Moudle。

一個子工程只有在settings文件裏配置了Gradle纔會識別,纔會在構建的時候被包含進去。具體使用以下:

//定義一個名爲initMinshengGradleEnvironment的函數。該函數內部完成一些初始化操做
//好比建立特定的目錄,設置特定的參數等
def initTKGradleEnvironment(){  
    println"initialize TK Gradle Environment ....."  
    ......//幹一些special的私活....  
    println"initialize TK Gradle Environment completes..."  
}  
//settings.gradle加載的時候,會執行initTKGradleEnvironment
initTKGradleEnvironment()
include ':voice'
include ':imagepicker' project(':imagepicker').projectDir = new File(rootDir, 'tk/imagepicker')

首先,這個文件中能夠本身設置一些函數,如initTKGradleEnvironment(),這些函數會在gradle構建整個工程任務的時候執行,因此,能夠在settings作一些初始化的工做。

其次,能夠經過include函數,將子Project的名字(其文件夾名)包含進來 。這裏要注意的是,若是像imagepicker'子工程指定了文件夾的目錄,它的工程目錄就是rootDir/tk/imagepicker;而像voice子工程這樣沒有指定相應的文件夾目錄,默認目錄會是其同級的目錄,即Gradle會把當前與settings.gradle文件同級的voice目錄做爲voice子工程的工程目錄。若是沒有的話,會報錯。

2.2  build.gradle

每一個project都會有build文件,該文件是該project構建的入口,能夠在這裏針對該project進行設置,好比配置版本,須要哪些插件,依賴哪些庫等。AS項目結構中有兩個build文件。咱們分別對其進行介紹。

2.2.1  app Moudle的build文件

Android Studio 自動建立的 module 默認生成的 build.gradle 文件,這個文件是開發中打交道最多的一個文件。

這個文件中包括apply plugin,android,greendao,repositories,dependencies等多個代碼塊。

android {
    compileSdkVersion project.ANDROID_BUILD_SDK_VERSION as int
    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
 
    defaultConfig {
        applicationId project.APPLICATION_ID
        versionCode project.VERSION_CODE as int
        versionName project.VERSION_NAME
        minSdkVersion project.ANDROID_BUILD_MIN_SDK_VERSION as int
        targetSdkVersion project.ANDROID_BUILD_TARGET_SDK_VERSION as int
    }
}
 
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //這裏注意是雙引號
    compile "com.android.support:appcompat-v7:${SUPPORT_LIBRARY}"
    compile "com.android.support:design:${SUPPORT_LIBRARY}"
    compile "com.android.support:recyclerview-v7:${SUPPORT_LIBRARY}"
    compile "com.android.support:support-annotations:${SUPPORT_LIBRARY}"
    compile "com.android.support:cardview-v7:${SUPPORT_LIBRARY}"
    compile "com.android.support:support-v4:${SUPPORT_LIBRARY}"
}

  

2.2.2  root Project的build文件

2.3   gradle.properties

配置全局的管理文件。用來配置 gradle 運行環境的文件,好比配置 gradle 運行模式,運行時 jvm 虛擬機的大小。

## Project-wide Gradle settings.
#
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Wed Mar 21 09:55:30 CST 2018
org.gradle.jvmargs=-Xmx1536m -Xmx4048m

properties實際上是Java項目中的配置文件,不是Gradle首創的。又由於Gradle語法能夠和Java進行混合使用,因此在Java項目上面使用properties文件的方式,在Gradle上面也可使用。Gradle借用了這一點,因此內置了對gradle.properties的使用方式.

properties裏面的數據格式採用鍵值對的方式,大概有如下幾種寫法: 
1. key=value 
2. key:value 
3. key :value 
4. # 做爲註釋 
在Android Studio 中最好使用第一種寫法,要不會有警告。

在實際開發中,通常大型的項目都是拆分進行模塊化開發的,每一個模塊在合併的時候容易有衝突(好比版本衝突),或者須要改版本的時候比較麻煩,須要一個一個地方去改,這時候配置全局的 gradle.properties 文件就頗有必要了。具體參考以下設置:

## Project-wide Gradle settings.
#
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Wed Mar 21 09:55:30 CST 2018
org.gradle.jvmargs=-Xmx1536m -Xmx4048m
#添加ndk支持(按需添加)
android.useDeprecatedNdk=true
# 應用版本名稱
VERSION_NAME=1.0.0
# 應用版本號
VERSION_CODE=100
# 支持庫版本
SUPPORT_LIBRARY=24.2.1
# MIN_SDK_VERSION
ANDROID_BUILD_MIN_SDK_VERSION=14
# TARGET_SDK_VERSION
ANDROID_BUILD_TARGET_SDK_VERSION=24
# BUILD_SDK_VERSION
ANDROID_BUILD_SDK_VERSION=24
# BUILD_TOOLS_VERSION
ANDROID_BUILD_TOOLS_VERSION=24.0.3

  

 

2.4  local.properties

Android Studio 自動建立的工程中,IDE 自動配備了本地配置文件,而且設置了 sdk.dir 屬性。也就是配置了 Android_Home 環境變量,因此 IDE 可以自動生成這個配置文件。通常狀況都不用修改這個配置文件,除非你必定要從新制定一個 SDK 路徑。

相關文章
相關標籤/搜索