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')這句聲明。



作者:sunnygarden
鏈接:https://www.jianshu.com/p/9c27dd7938b7
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM