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
如下图(注意结构)
然后新建一个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,哈哈,是不是呢,妈妈再也不用担心我了...