Gradle常見配置總結

1、理解根目錄下的build.gradle

在使用Android Studio創建工程時,會在根目錄創建類似如下的build.gradle。本文將從初學者的角度來解釋每一行的意思,具體的細節還需查看gradle的API文檔。

如果要學習gradle,推薦一篇寫得很好的blog深入理解Android之Gradle。個人認爲最重要的一點是不要把build.gradle簡單地看作配置文件,而是要把它看作一種編程框架,使用其API或者Groovy編程語言來完成編譯、打包、測試等工作。

以下的註釋爲每一行代碼的意思,希望對理解build.gradle有所幫助。

// Top-level build file where you can add configuration options common to all sub-projects/modules.
// Gradle中可以使用“//”或“/**/”來添加註釋,與Java類似。
// 根目錄下的build.gradle用於添加子工程或模塊共用的配置項。

// "buildscript"的類型爲script block,而且是最上層的script block,用於配置Gradle的Project實例。其API文檔爲https://docs.gradle.org/current/dsl/org.gradle.api.Project.html#org.gradle.api.Project:buildscript(groovy.lang.Closure)
// 其餘的根script block有"allprojects", "dependencies", "configurations"等,更多的可見https://docs.gradle.org/current/dsl/的“Build script structure”一節。
// Script Block是一種method的調用,傳入的參數爲configuration closure。執行後會對Project的屬性進行配置。
// 此處的"buildscript"用於配置Project的build script的classpath。
buildscript {
    // 如果需要的話,從https://jcenter.bintray.com/下載code reposities。
    repositories {
        jcenter()
    }
    // 定義classpath,gradle會從“repositories”中下載對應版本的Gradle。如果使用gradle wrapper的話,感覺這個配置會被忽略。Wrapper會自己去下載所使用的gradle版本。
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

// 該配置會被應用到所有的子工程。
allprojects {
    repositories {
        jcenter()
    }
}

// 運行gradle clean時,執行此處定義的task。
// 該任務繼承自Delete,刪除根目錄中的build目錄。
// 相當於執行Delete.delete(rootProject.buildDir)。
// gradle使用groovy語言,調用method時可以不用加()。
task clean(type: Delete) {
    delete rootProject.buildDir
}

2、Android Studio gradle 文件中 ${supportLibVersion} 用法

一般我們在項目中的gradle會添加如下庫文件:

dependencies {  
    compile 'com.android.support:appcompat-v7:23.1.0'  
    compile 'com.android.support:design:23.1.0'  
    compile 'com.android.support:pallete-v7:23.1.0'  
    compile 'com.android.support:cardview-v7:23.1.0'  
    compile 'com.android.support:recyclerview-v7:23.1.0'  
}

所以每次升級的時候都要修改後面的23.1.0版本號,Android開發小組的Chris Banes想出了這樣的一個方法,不用每次修改每個版本,而只需要修改一次就行了,如下:

ext {  
    supportLibVersion = "23.1.1"  
}  

dependencies {  
    compile "com.android.support:appcompat-v7:${supportLibVersion}"  
    compile "com.android.support:design:${supportLibVersion}"  
    compile "com.android.support:recyclerview-v7:${supportLibVersion}"  
    compile "com.android.support:cardview-v7:${supportLibVersion}"  
}

錯誤的寫法:

compile 'com.android.support:appcompat-v7:${supportLibVersion}'

正確的寫法:

compile "com.android.support:appcompat-v7:${supportLibVersion}"

3、依賴包衝突解決辦法

項目中使用的library版本是23,但是項目引用的包引用的library版本是24,這樣就會出現衝突,報錯如下:

這裏寫圖片描述

解決辦法,使用exclude,排除衝突的依賴包:

 compile ('com.bat:apploginsdk:1.0.1') {
        // exclude module : 'okhttp'
        // exclude module : 'com.android.support'
        exclude group: 'com.android.support', module: 'recyclerview-v7'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'design'
        exclude group: 'com.android.support', module: 'appcompat-v7'
    }

參考致謝:
(1)、理解根目錄下的build.gradle
(2)、gradle 基本配置介紹
(3)、Gradle配置
(4)、Gradle常見配置結點
(5)、理解與配置Android studio中的gradle

發佈了102 篇原創文章 · 獲贊 76 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章