Android 詳解 build.gradle 文件

       不同於 Eclispse,Android Studio 是採用 Gradle 來構建項目的,Gradle 是一個非常先進強大的項目構建工具,它使用了一種基於 Groovy 領域的特定語言(DSL)來聲明項目設置,摒棄了基於 XML(如 Ant 和 Maven)的各種繁瑣的配置,今天我們就來一起探討 Android Studio 中強大的項目構建工具 Gradle


一、簡介


       一般來說一個新創建的項目中,有兩個 build.gradle 文件,一個是工程目錄下的,一個是 app 目錄下的,這兩個 build.gradle 文件對 Android Studio 項目的作用是非常重要的,接下來我們就新建一個項目來進行詳細的分析,這裏大家可以隨便自己新建一個項目




1)工程目錄下的 build.gradle 文件


buildscript {
    repositories {
        //代碼託管倉庫
        jcenter()
    }
    dependencies {
        //Gradle 插件及使用版本
        classpath 'com.android.tools.build:gradle:2.3.0'
        // 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)
task clean(type: Delete) {
    delete rootProject.buildDir
}

       這些代碼都是自動生成的,這裏我們先忽略語法層面的東西,只看關鍵的部分,首先兩處 repositories 的閉包中都生明瞭 jcenter() 這個配置,其實它是一個代碼託管倉庫,很多開源的 Android 項目都會選擇將代碼託管到到 jcenter() 上,聲明瞭這個配置,我們就可以輕鬆的引用 jcenter() 上任何的開源項目了,接下來,dependencies 閉包中使用 classpath 聲明瞭一個 Gradle 插件,這是因爲 Gradle 並不是專門爲構建 Android 項目而開發的,Java、C++ 等很多項目都可以使用 Gradle 來構建,因此我們如果想要使用它來構建 Android 項目必須聲明 com.anddroid.tools.build:gradle:2.3.0 這個插件,其中最後的數字部分是 Gradle 插件的版本號,到這裏我們工程目錄下的 build.gradle 就分析完了,通常情況下,這個文件中的內容不需要修改,但是當我們模塊化開發的時候,也可以在這裏配置全局項目的構建相關的配置


2)app 目錄下的 build.gradle 文件


//表明是應用程序的插件
apply plugin: 'com.android.application'

//Android 閉包
android {
    //指定項目的編譯版本
    compileSdkVersion 25
    //指定項目的構建工具版本
    buildToolsVersion "25.0.3"
    defaultConfig {
        //指定項目的包名
        applicationId "com.example.qiudengjiao.contentprovider"
        //指定項目最低兼容的 Android 版本
        minSdkVersion 15
        //指定項目的最高兼容 Android 版本
        targetSdkVersion 25
        //指定項目的版本號
        versionCode 1
        //指定項目的版本名
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            //指定是否對項目的代碼進行混淆(true:混淆 false:不混淆)
            minifyEnabled false
            //proguardFiles用於指定混淆時使用的規則文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

       app 目錄下的 build.gradle 文件中的內容相對工程目錄下的 build.gradle 文件複雜了很多,不過不要緊,我們一起來看一下,首先第一行應用了一個插件,這裏一般有兩種值可選

  • com.android.application: 表示是一個應用程序模塊
  • com.android.library: 表示是一個庫模塊
應用程序模塊和庫模塊最大的區別在於一個是可以直接運行的,一個只能作爲代碼庫依附於別的應用程序模塊來運行

       接下來是一個 android 閉包,在這個閉包中我們就可以配置項目構建的各種屬性了,其中 compileSdkVersion 用於指定項目的編譯版本,buildToolsVersion 用於指定項目構建工具的版本,目前最新的版本就是 25.0.3,如果有更新的,Android Studio 會提醒

       然後接下來我們看到在 android 閉包中有嵌套了一個 defaultConfig 閉包,defaultConfig 閉包中可以對項目的更多細節進行配置,其中,applicationId 用於指定項目的包名,其實我們在項目創建的時候已經進行過指定,如果想後來進行修改,就可以在這裏進行修改,minSdkVersion 用於指定項目的最低兼容 Android 系統版本,這裏指定的是 15 表示最低兼容到 Android 4.0 系統,targetSdkVersion 指定的值表示你在該目標版本上已經做過充分的測試,系統將會爲你的應用程序啓用最新的功能和特性,例如 android 6.0 系統中引入了運行時權限這個功能,如果你將 targetSdkVersion 指定成 23 或更高,那麼系統就會爲你的程序啓用運行時權限功能,而如果你將 targetSdkVersion 指定成 22,那麼就說明你的程序最高只能在 Android 5.1 系統上做過充分的測試,Android 6.0 系統中引入的新功能自然就不會啓用了,剩下的兩個屬性 versionCode 用於指定項目的版本號,versionName 用於指定項目的版本名這兩個屬性在生成安裝文件的時候特別重要

       分析完 defaultConfig 閉包,我們接着來分析 buildTypes 閉包,buildTypes 閉包中用於指定生成安裝文件的相關配置,通常會有兩個子閉包,一個是 debug,一個是 release,debug 閉包用於指定生成測試版安裝文件的配置,release 閉包用於指定生成正式版安裝文件的配置,另外 debug 閉包是可以忽略不寫的,因此我們看到上面的代碼中就只有一個 release 閉包,下面我們來看一下 release 閉包中的內容,minifyEnabled 用於指定是否對項目的代碼進行混淆,true 表示混淆,false 表示不混淆,proguardFiles 用於指定混淆時使用的規則文件,這裏可以指定兩個文件,第一個 proguard-android.txt 是在 Android SDK 目錄下的,裏面是所有項目通用的混淆規則,第二個 proguard-rules.pro 是當前項目的根目錄下的,裏面可以編寫當前項目特有的混淆規則,需要注意的是,通過 Android Studio 直接運行的項目生成的都是測試版安裝文件,正式版的我們也會在後面的文章中進行學習

       這樣整個 android 閉包中的內容我們就分析完了,接下來還有一個 dependencies 閉包,這個閉包的功能非常強大,它主要是用來指定當前項目所有的依賴關係,通常 Android Studio 項目一共有 3 種依賴方式,本地依賴,庫依賴和遠程依賴,本地依賴可以對本地的 Jar 包或目錄添加依賴關係,庫依賴可以對項目中的庫模塊添加依賴關係,遠程依賴則可以對 jcenter 庫上的開源項目添加依賴關係,compile fileTree 就是一個本地依賴聲明,它表示將 libs 目錄下所有 .jar 後綴的文件都添加項目的構建路徑中,而 com.android.support:appcompat-v7:25.3.1 就是一個標準的遠程依賴庫格式,其中 com.android.support 是域名部分,用於和其他公司的庫做區分,appcompat-v7 是組名稱,用於和同一個公司中不同的庫做區分,25.3.1 是版本號,用於和同一個庫的不同版本做區分,加上這句聲明後,Gradle 在構建項目時會首先檢查一下本地是否已經有這個庫的緩存,如果沒有的話則會去自動聯網下載,然後再添加到項目的構建路徑中,至於庫依賴聲明,它的基本格式是 compile project 後面加上要依賴的庫名稱,比如一個模塊的名字叫 helper,那麼添加這個庫依賴就是 compile proiect(':helper'),這樣聲明即可,另外的 testCompile 是用於聲明測試用例庫的

今天就分享到這裏,今天分享的內容非常短,但卻是非常重要的,希望大家可以好好掌握,明天就是週末了,大家週末愉快



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