Gradle for Android系列之二 build.gradle檔案
上一篇結合Android 專案大致的介紹了一下Gradle在Android中的應用。其中也多次提到了build.gradle。但是沒有詳細的介紹其的基本結構和其作用。那麼本文就將圍繞這些展開。在這之前先看看Android中的Gradle指令碼也哪些
Android專案中的Gradle指令碼
一般情況下,使用Android Studio建立的Android專案會預設產生3個Gradle指令碼:
1.root目錄下build.gradle
2.root目錄下setting.gradle
3.app目錄下build.gradle
如下圖
BaseProject
├── build.gradle
├── settings.gradle
└── app
└── build.gradle
root目錄下的build.gradle檔案,主要是定義整個專案的所有模組的公共屬性,主要內容如下:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
這就是Android專案實際構建就是從這裡開始的,我們使用了JCenter作為我們的倉庫,JCenter類似maven庫,不需要任何額外的配置,grade還支援其他幾個倉庫,不論是遠端還是本地倉庫。倉庫包含了一系列的依賴,配置了某個倉庫,那麼我們就可以使用這個倉庫包含的依賴了。allprojects方法給我們提供了一種可以用來定義各個模組的預設屬性的途徑,這樣我們可以自己在allprojects中定義一些tasks,在所有的模組中都能使用。最後一個task clean(也可以定義為別的名字),任務型別是Delete(也可以是Copy),就是每當修改settings.gradle檔案後點選同步,就會刪除rootProject.buildDir下的檔案。
setting.gradle檔案在專案只有一個模組的時候是這個樣子:
include ':app'
如果是多模組的話,會相應的include對應的模組,改檔案定義了哪一個模組將會被構建(setting.gradle是針對多模組操作的,所以單獨的模組工程完全可以刪除掉該檔案)。在這之後,Gradle會為我們建立一個Setting物件,併為其包含必要的方法,我們不必知道Settings類的詳細細節,但是最好能夠知道這個概念。
app目錄下的build.gradle檔案,只對app模組起作用,而且其可以重寫任何在root檔案目錄build.gradle檔案中定義的引數。該檔案類似於:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.chuck.moblie.baseproject"
minSdkVersion 10
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
可以看到該檔案的結構很清晰:
1.apply plugin: ‘com.android.application’該語句中的apply是一個方法,給它傳遞了一個引數plugin,plugin 的值是’com.android.application’。如果有多個引數,則以逗號隔開。
2.android:主要配置Android相關的引數屬性
3.dependencies:可以新增需要的依賴包。
下面來詳細的分析一下android這個方法中的內容:
compileSdkVersion
buildToolsVersion
defaultConfig
buildTypes
compileSdkVersion和buildToolsVersion 是必須的,前者指定編譯專案的sdk後者指定構建工具(build tools)的版本。這裡的build tools(在sdk/build-tools/目錄下)包含了我們在構建專案時的很多實用工具,像aapt,dx等。
defaultConfig指定的是Android應用的核心屬性,在defaultConfig指定之後,會覆蓋在AndroidManifest.xml指定的相對應的屬性。
defaultConfig {
applicationId "com.chuck.moblie.baseproject"
minSdkVersion 10
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
applicationId: 指定專案的包名,該屬性會覆蓋AndroidManifest.xml指定的package name屬性,但是它又package name不完全一樣,applicationId可以被用作app在各應用商店或者裝置上的唯一標示,package name可以用作資原始碼和R檔案的包名。
minSdkVersion:應用最低支援的Android版本。這裡我指定是API10應用的Android系統版本就是Gingerbread(Android2.3)了。
targetSdkVersion:指定最高能支援的Android系統版本。API23對應的是Android M(Android6.0)
versionCode :改app的版本一般在升級系統時需要用到
versionName :改app版本名稱。
有了這些屬性,並且會覆蓋AndroidManifest.xml的相應屬性,所以可以不用在AndroidManifest.xml檔案中定義。
dependencies是Gradle的預設屬性,所以不用定義在android方法中,它主要指定對應的模組所需要的依賴。只需要通過compile一句話就可以搞定:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
下面介紹一下常用的依賴引用方式:
1.compile fileTree(dir, ‘libs’ ,include : ‘*.jar’) 依賴本地libs目錄下的所有jar檔案
2.compile file(‘libs/xxx’) 依賴當個libs目錄(可以自己指定路徑,不一定要是libs)下的單個jar檔案。
3. compile project(:xx:xx) 依賴某個工程。
4. compile ‘group:name:version’ 依賴倉庫中的庫,當然這裡的倉庫根據前文介紹是在root目錄下的build.gradle中指定的,可以是JCenter也可以是本地的倉庫。
build.gradle的配置基本內容,基本介紹完了,接下來就是根據自己的專案定義一些task來處理。下一篇文章將繼續介紹task。
相關文章
- Android學習筆記之build.gradle檔案Android筆記UIGradle
- Gradle for Android 系列:初識 Gradle 檔案GradleAndroid
- Android開發:build.gradle 配置指南AndroidUIGradle
- Gradle for Android 第二篇( Build.gradle入門 )GradleAndroidUI
- gradle的build.gradle詳解GradleUI
- Android Studio 編輯Build.gradle時很卡AndroidUIGradle
- ffmpeg分析系列之二(檔案協議)協議
- Android Gradle 技巧之二: 最愛命令列AndroidGradle命令列
- Gradle系列之Android Gradle基礎配置GradleAndroid
- Gradle for Android系列之一 Gradle基礎GradleAndroid
- build.gradle中正確地匯入RecyclerView依賴UIGradleView
- Gradle for Android系列之三 tasksGradleAndroid
- AndroidStudio之app/build.gradle問題集錦AndroidAPPUIGradle
- 如何在Android Gradle中新增原生so檔案依賴AndroidGradle
- build.gradle裡repositories的mavenCentral實現原理解析UIGradleMaven
- Gradle for Android系列之五 多渠道打包GradleAndroid
- Gradle 簽名的配置檔案 gradle.propertiesGradle
- Android中gradle檔案中implementation和compile的異同AndroidGradleCompile
- Gradle for Android系列之四 依賴包管理GradleAndroid
- 檔案管理基礎命令之二
- Gradle系列之Gradle外掛Gradle
- Gradle系列(四) Gradle外掛Gradle
- Gradle學習系列—-多專案構建Gradle
- Gradle學習系列----多專案構建Gradle
- Android擴充系列(12)--使用Gradle釋出aar專案到JCenter倉庫AndroidGradle
- 使用android studio開發gradle外掛(三)-讀取配置檔案AndroidGradle
- [Gradle中文教程系列]-跟我學Gradle-8.2-多模組專案- 專案結構Gradle
- 為什麼說 Gradle 是 Android 進階繞不去的坎 —— Gradle 系列(1)GradleAndroid
- Android專案中如何運用好Gradle?AndroidGradle
- gdb除錯core dump檔案之二除錯
- 寫給 Android 開發者的 Gradle 系列(一)基本姿勢AndroidGradle
- 寫給 Android 開發者的 Gradle 系列(三)撰寫 pluginAndroidGradlePlugin
- 寫給 Android 開發者的 Gradle 系列(二)撰寫 taskAndroidGradle
- Android studio gradle升級到4.10.3,以後找不到R檔案AndroidGradle
- gradle 打包aar去除引用的jar檔案GradleJAR
- gradle 推送jar檔案到本地倉庫GradleJAR
- Gradle系列之認識Gradle任務Gradle
- Binder面試系列之二面試