-
- 為什麼要對 Gradle 統一管理
- 使用腳本 config.gradle
- 使用
- 不足之處
為什麼要對 Gradle 統一管理
在實際項目中,經常會出現一個 Project 中有多個 Module 的情況,如果每個 Module 又同時擁有相同的依賴,比如 v4 包,那麼,每次 v4 包更新的時候修改多個 Module 中的 build.gradle 檔案,更新其版本都是一件麻煩的事情,而且很有可能忘記某個 Module。
其次如果不同的module引入了不同版本的依賴,在合并的時候也可能導緻一定的隐患
最後在元件化開發中,我們需要保證各個元件的編譯環境應該是一緻的,其中包括compileSdkVersion、buildToolsVersion等等
是以,将依賴進行統一管理,對于一個 Project 下擁有多個 Module 的情況來說是非常必要的。
使用腳本 config.gradle
假設項目結構如下:
root
--app
--build.gradle
--module1
--build.gradle
...
--build.gradle
在root目錄下建立 conf.gradle檔案,在 config.gradle 中添加如下代碼:
ext {
android = [
compileSdkVersion: ,// 用于編譯的SDK版本
buildToolsVersion: "21.1.1",// 用于Gradle編譯項目的工具版本
applicationId : "com.sangfor.pocket",//包名
minSdkVersion : ,// 最低支援Android版本
targetSdkVersion : ,// 目标版本
versionCode : ,
versionName : "9.9.99",
// Version of "com.android.support:appcompat-v7", refer it as folow:
// compile "com.android.support:appcompat-v7:${APPCOMPAT_VERSION}"
VSupportSdk : '21.0.2'
]
dependencies = [
"multidex" : "com.android.support:multidex:1.0.0",
"appcompat-v7" : "com.android.support:appcompat-v7:${android["VSupportSdk"]}",
"annotations" : "com.android.support:support-annotations:23.1.1",
//...
]
files = [
"AMap_Services" : files('app/libs/AMap_Services_V2.3.1.jar'),
"AMap_Location" : files('app/libs/AMap_Location_V3.3.0_20170118.jar'),
"Android_Map3D_SDK" : files('app/libs/Android_Map3D_SDK_V4.1.2_20161104.jar'),
"TencentLocationSDK": files('app/libs/TencentLocationSDK_v5.0.1_r251203_170116_1729.jar'),
"mta-sdk" : files('app/libs/mta-sdk-1.0.0.jar'),
"open_sdk" : files('app/libs/open_sdk.jar'),
//...
]
projects = [
"common" : project(':common'),
//"jni" : project(':jni'),
//"ormlite" : project(':ormlite5.0'),
//"customswipelistview" : project(':customswipelistview'),
//...
]
}
其中:
- 針對第三方庫可以知己使用 “”映射
- 針對本地jar檔案,要files(‘相對于root的路徑’)
- 針對本地工程,使用project(‘:工程名’)
使用
在 root 目錄下的build.gradle 中加上apply from: “config.gradle”
接下來就剩下最後一步了,在需要添加依賴的 Module 中使用
- android 節點的使用
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
applicationId rootProject.ext.android.applicationId
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
}
}
- dependencies 節點的使用
dependencies {
compile rootProject.ext.files["AMap_Services"]
compile rootProject.ext.files["AMap_Location"]
compile rootProject.ext.files["Android_Map3D_SDK"]
compile rootProject.ext.files["TencentLocationSDK"]
compile rootProject.ext.files["mta-sdk"]
compile rootProject.ext.files["open_sdk"]
}
不足之處
在項目中有使用aar方式的引入,譬如compile(name: ‘jni’, ext:’aar’),目前還未找到對應的集中配置管理方式