android多Modle統一配置Gradle
目前as使用gradle來配置項目工程,一般的項目為了模塊化或者結構的清晰。
都會或多或少的使用多library(model)的方式。
so,問題來了。。。
我想升級下項目的支持的最小版本,編譯版本等(下面的代碼),要改很多處,怎么辦呢?
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
解決問題之前我們先說一下Gradle工作流程
- 首先是初始化階段。對multi-project build而言,就是執行settings.gradle文件
- 配置階段,在這個階段就是解析每個model中的build.gradle文件
- 在這里我叫它配置依賴關系階段,在這里會更具項目的依賴關系,建立一定的順序。
- 執行任務階段(即各種task)你也可以自己寫task
其實在各個階段我們都可以添加一些我們需要的東東。
這既是關鍵了,嘻嘻...
下面是解決方法:
1.修改local.properties文件
這個文件是properties文件,就是配置一下信息。
這樣的話,等下次再修改的時候就只修改改文件就行了。
這里我簡單的寫一下,可以根據你的項目來添加或者刪除。
ndk.dir=/Users/guxiuzhong/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/guxiuzhong/Library/Android/sdk
minSdkVersion=15
targetSdkVersion=23
compileSdkVersion=23
buildToolsVersion=23.0.2
versionName=1.0
versionCode=1
其實就是把原來gradle中版本等抽取出來,形成鍵值對。
2.讀取local.properties文件
我們新建一個目錄叫selfgradle
如下圖(注意結構)
結構 icon
然后新建一個init.gradle 文件,
//定義一個方法
def initProjectEnvironment() {
//打印log
println "initialize Gradle Environment ....."
Properties properties = new Properties()
File propertyFile = new File(rootDir.getAbsolutePath() + "/local.properties")
properties.load(propertyFile.newDataInputStream())
//config
gradle.ext.minSdkVersion = properties.getProperty('minSdkVersion').toInteger().intValue()
gradle.ext.targetSdkVersion = properties.getProperty('targetSdkVersion').toInteger().intValue()
gradle.ext.compileSdkVersion = properties.getProperty('compileSdkVersion').toInteger().intValue()
gradle.ext.buildToolsVersion = properties.getProperty('buildToolsVersion')
gradle.ext.versionName = properties.getProperty('versionName')
gradle.ext.versionCode = properties.getProperty('versionCode').toInteger().intValue()
//打印log
println "initialize Gradle Environment completes..."
}
//調用
initProjectEnvironment()
3.調用該文件
在哪里調用呢?
肯定是在構建項目的 初始化階段也就是gradle的初始化階段。
也就是settings.gradle文件
修改如下:
//和你的selfgradle文件結構放在哪里有關
apply from: './selfgradle/init.gradle'
include ':app', ':librarya'
4.使用配置的信息
在你的主工程或者各個Modle下使用即可。
compileSdkVersion gradle.ext.compileSdkVersion
buildToolsVersion gradle.ext.buildToolsVersion
defaultConfig {
applicationId "com.gxz.gradledemo2"
minSdkVersion gradle.ext.minSdkVersion
targetSdkVersion gradle.ext.targetSdkVersion
versionCode gradle.ext.versionCode
versionName gradle.ext.versionName
}
最后我們再次編譯:
我們看到首先輸出了我們打印的log,哈哈,是不是呢,媽媽再也不用擔心我了...
編譯-1 icon
編譯-1 icon