Gradle基礎--認識Gradle

有人用android studio開發android項目,發現經常接觸到Gradle,但是對它又不會有很大的關注,而當你的Gradle報錯,或者從github,csdn上下載開源項目的時候,一旦出現gradle的錯誤,你就棘手了,所有我們還是很有必要去了解一下Gradle的世界。

什麼是Gradle?

Gradle是一種依賴管理工具,基於Groovy語言,面向Java應用爲主,它拋棄了基於XML的各種繁瑣配置,取而代之的是一種基於Groovy的內部領域特定(DSL)語言。

Gradle的基本概念

下面就以我最近做的一個代表性的項目來詳細講解下和Gradle相關的知識, 和Gradle相關的幾個文件一般有如下幾個:
images
其中紅色標記是我們今天要關注的內容。
首先簡單的解釋一下爲什麼會出現3個build.gradle。
在android studio裏,每一個Project都會對應着一個build.gradle,他相當於eclipse裏的workspace。
每一個Module都會自己對應一個build.gradle來分開管理,其中Module相當於eclipse對應的工程。明白了這個我們就逐個往下分析。

一、SnailBulb_Basic_Android/app/build.gradle

這個文件是app文件夾下這個Module的gradle配置文件,也可以算是整個項目最主要的gradle配置文件,我們來看下這個文件的內容:

//聲明是android程序,這裏是新版本的寫法,老版本apply plugin:'androd'是同樣的意思
apply plugin: 'com.android.application'

android {
    //當前編譯版本
    compileSdkVersion 21
    //buildTools的版本號
    buildToolsVersion '21.1.2'

    defaultConfig {
        //程序的包名。以前eclipse是以AndroidManifest裏爲主,這裏以gradle配置的爲主,AndroidManifest裏的無效
        applicationId "com.snaillove.app.snailbulb.general"
        minSdkVersion 9
        targetSdkVersion 21
        versionCode 121
        versionName "1.21"
    }
    buildTypes {
        release {
            //是否允許debug調試
            debuggable true
            // 是否進行混淆 minifyEnabled也是最新的語法,很早之前是runProguard,這個也需要更新下。在github上拉去項目經常會報這個地方的錯誤。一定要記得改過來
            minifyEnabled false
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
        }
    }
}

//本地依賴 下一篇會具體介紹
dependencies {

    // 編譯libs目錄下的所有jar包
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:22.2.0'
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.google.code.gson:gson:2.3.1'
    compile 'com.wunderlist:sliding-layer:1.2.5'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    // 編譯bDIntegrationSDK_LibProject模塊
    compile project(':bDIntegrationSDK_LibProject')
}

這裏需要說明幾點:

1、文件開頭apply plugin是最新gradle版本的寫法,以前的寫法是apply plugin: ‘android’, 這裏大家注意一下。
2、buildToolsVersion這個需要你本地安裝該版本纔行,很多人導入新的第三方庫,失敗的原因之一是build version的版本不對,這個可以手動更改成你本地已有的版本或者打開 SDK Manager 去下載對應版本。
3、applicationId代表應用的包名,也是最新的寫法,這裏就不在多說了。
4、android 5.0開始默認安裝jdk1.7才能編譯,但是由於mac系統自帶jdk的版本是1.6,所以需要手動下載jdk1.7並配置下,具體可以見我這篇博客Mac下安裝和管理Java
5、minifyEnabled也是最新的語法,很早之前是runProguard,這個也需要更新下。
6、proguardFiles這部分有兩段,前一部分代表系統默認的android程序的混淆文件,該文件已經包含了基本的混淆聲明,免去了我們很多事,這個文件的目錄在 sdk目錄/tools/proguard/proguard-android.txt , 後一部分是我們項目裏的自定義的混淆文件,目錄就在 app/proguard-rules.txt , 如果你用Studio 1.0創建的新項目默認生成的文件名是 proguard-rules.pro , 這個名字沒關係,在這個文件裏你可以聲明一些第三方依賴的一些混淆規則,由於是開源項目,SnailBulb_Basic_Android裏並未進行混淆,具體混淆的語法也不是本篇博客討論的範圍。最終混淆的結果是這兩部分文件共同作用的。
7、以上文件裏的內容只是基本配置,其實還有很多自定義部分,如自動打包debug,release,beta等環境,簽名,多渠道打包等,後續會單獨拿出來講解

二、SnailBulb_Basic_Android/bDIntegrationSDK_LibProject/build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    //compile 'com.android.support:support-v4:19.+'
    //單文件依賴
    compile files('libs/android_api_3.7.1.3.jar')
    compile files('libs/BDAutoUpdateSDK_20150605_V1.2.0.jar')
    compile files('libs/need_lib.jar')
    compile files('libs/patchupdate.jar')

    compile 'com.android.support:support-v4:22.2.0'
}

看了上面的講解在看這個估計已經無壓力了
每一個Module都需要有一個gradle配置文件,語法都是一樣,唯一不同的是開頭聲明的是
applyplugin: 'com.android.library'

三、 SnailBulb_Basic_Android/gradle

這個目錄下有個 wrapper 文件夾,裏面可以看到有兩個文件,我們主要看下 gradle-wrapper.properties 這個文件的內容:

Mon Aug 24 13:25:25 CST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.4-all.zip

可以看到裏面聲明瞭gradle的目錄與下載路徑以及當前項目使用的gradle版本,這些默認的路徑我們一般不會更改的,這個文件裏指明的gradle版本不對也是很多導包不成功的原因之一。
當你的gradle依賴更換的時候,這個路徑是很容易報錯的,需要你手動換過來。

四、 SnailBulb_Basic_Android/build.gradle

這個文件是整個項目的gradle基礎配置文件,我們來看看這裏面的內容

//對於buildscript{} 在android gradle是用來預置插件環境,一般不建議把依賴寫着裏面
//buildscript設置腳步的運行環境
buildscript {
    //repositories支持java 依賴庫管理(maven/ivy),用於項目的依賴
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'

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

allprojects {
    repositories {
        jcenter()
    }
}

內容主要包含了兩個方面:一個是聲明倉庫的源,這裏可以看到是指明的jcenter(), 之前版本則是mavenCentral(), jcenter可以理解成是一個新的中央遠程倉庫,兼容maven中心倉庫,而且性能更優。另一個是聲明瞭android gradle plugin的版本,android studio 1.2正式版必須要求支持gradle plugin 1.2的版本。

五、 SnailBulb_Basic_Android/settings.gradle

這個文件是全局的項目配置文件,裏面主要聲明一些需要加入gradle的module,我們來看看SnailBulb_Basic_Android該文件的內容:

include ‘:app’, ‘bDIntegrationSDK_LibProject’
文件中的 app, bDIntegrationSDK_LibProject 都是module,如果還有其他module都需要按照如上格式加進去。

六、總結

看到這裏你應該對Gradle有了一個基本的認識,希望以後你在報錯的時候,或者從其他地方下載項目的時候,知道去哪裏更改gradle配置啦。

個人博客

http://www.jackwaiting.com
https://github.com/Jackwaiting
http://www.zhihu.com/people/jackwaiting

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章