AndroidStudio中builde.gradle文件詳解

Android Studio是采用Gradle來構建項目的,一個Android項目中包含兩個build.gradle文件,如下圖:

(1)最外層目錄下build.gradle文件
  最外層目錄下的build.gradle文件代碼如下:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'

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

allprojects {
    repositories {
        jcenter()
    }
}

忽略不明白的語法,從字面上我們可以看出,關鍵有兩部分的代碼,repositories閉包和dependencies閉包。
1、repositories閉包
  該閉包中聲明了jcenter()的配置,其中jcenter是一個代碼托管倉庫,上面托管了很多Android開源項目,在這里配置了jcenter后我們可以在項目中方便引用jcenter上的開源項目。
2、dependencies閉包
  該閉包使用classpath聲明了一個Gradle插件,由于Gradle并不只是用來構建Android項目,因此此處引入相關插件來構建Android項目,其中'2.2.2'為該插件的版本號,可以根據最新的版本號來調整。
(2)模塊目錄下build.gradle文件
項目中app模塊下的build.gradle文件中的內容如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.wkui.douban.easysearch"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.2.0'
    testCompile 'junit:junit:4.12'
}

從文件內容可以看出,主要分為三大部分:
1、apply plugin
  文件中第一行使用apply plugin表示應用了一個插件,該插件一般有兩種值可選:
一種為'com.android.application',表示該模塊為應用程序模塊,可以直接運行;另一種為'com.android.library',表示該模塊為庫模塊,只能作為代碼庫依附于別的應用程序模塊來運行。
2、android閉包
  這個閉包主要為了配置項目構建的各種屬性,compileSdkVersion用于指定項目的編譯版本,25表示使用Android 7.1系統的SDK編譯。buildToolsVersion用于指定項目構建工具的版本。android閉包中嵌套了defaultConfig閉包和buildTypes閉包:
1) defaultConfig閉包
  對項目的更多細節進行配置,其中applicationId指定了項目的包名,我們可以通過修改這個值來修改項目的包名。
  minSdkVersion指定項目最低兼容的版本,這里指定為15,表示最低兼容到Android 4.0系統。
  targetSdkVersion指定的值表示在該目標版本上已經做過充分測試,系統會為該應用啟動一些對應該目標系統的最新功能特性,Android系統平臺的行為變更,只有targetSdkVersion的屬性值被設置為大于或等于該系統平臺的API版本時,才會生效。例如,若指定targetSdkVersion值為22,則表示該程序最高只在Android5.1版本上做過充分測試,在Android6.0系統上(對應targetSdkVersion為23)擁有的新特性如系統運行時權限等功能就不會被啟用。
2) buildTypes閉包
  這個閉包主要指定生成安裝文件的主要配置,一般包含兩個子閉包,一個是debug閉包,用于指定生成測試版安裝文件的配置,可以忽略不寫;另一個是release閉包,用于指定生成正式版安裝文件的配置。
  上面的代碼中省去了debug閉包的內容,只寫了release閉包。其中minifyEnabled表明是否對代碼進行混淆,true表示對代碼進行混淆。proguardFiles指定混淆的規則文件,這里指定了proguard-android.txt文件和proguard-rules.pro文件兩個文件,proguard-android.txt文件為默認的混淆文件,里面定義了一些通用的混淆規則。proguard-rules.pro文件位于當前項目的根目錄下,可以在該文件中定義一些項目特有的混淆規則。
3、dependencies閉包
  該閉包定義了項目的依賴關系,一般項目都有三種依賴方式:本地依賴、庫依賴和遠程依賴。本地依賴可以對本地的jar包或目錄添加依賴關系,庫依賴可以對項目中的庫模塊添加依賴關系,遠程依賴可以對jcener庫上的開源項目添加依賴關系。
  下面對該閉包中定義的語句進行解釋。
  第一行的compile fileTree是一個本地依賴聲明,表示將libs目錄下所有.jar后綴的文件都添加到項目的構建路徑當中。
  第二行的compile語句為 遠程依賴聲明,'com.android.support:appcompat-v7:25.2.0'為一個標準的遠程依賴庫格式,其中com.android.support為域名部分,用于區分不同公司的庫;appcompat-v7為組件名稱,用于區分同一個公司的不同庫;25.2.0為版本號,用于區分同一個庫的不同版本。加上這句聲明后,Gradle在構建項目時會先檢查一下本地是否已經緩存過該庫,若沒有緩存則自動聯網下載,下載后自動添加到項目的構建路徑中去。
  testCompile語句為聲明測試用例庫的,暫時沒有用到。這里沒有用到庫依賴聲明,若有一個庫模塊名為helper,那么添加這個庫依賴關系需要加入compile project(':helper')這句聲明。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,558評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,992評論 19 139
  • 這一章主要針對項目中可以用到的一些實用功能來介紹Android Gradle,比如如何隱藏我們的證書文件,降低風險...
    acc8226閱讀 7,695評論 3 25
  • 雪珩: 展信佳。 光陰似箭,今天是我們分開的第33天,看你發朋友圈,我知道你過得很好。我也過得還好,有很多朋友陪著...
    俗人雜文閱讀 985評論 7 7
  • 0 陳海陽和劉毅是同年同月同日生的好友,大學室友,是上下鋪的兄弟,兩人都是S省會人,只不過陳是下面的縣的,劉是城里...
    冀泰來閱讀 1,048評論 11 6