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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。