目前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其实在各个阶段我们都可以添加一些我们需要的东东。 这既是关键了,嘻嘻… 下面是解决方法:
这个文件是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中版本等抽取出来,形成键值对。
我们新建一个目录叫selfgradle 如下图(注意结构)
然后新建一个init.gradle 文件,
//定义一个方法 def initProjectEnvironment() { //打印 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() println "initialize Gradle Environment completes..." } //调用 initProjectEnvironment()在哪里调用呢? 肯定是在构建项目的 初始化阶段也就是gradle的初始化阶段。 也就是settings.gradle文件 修改如下:
//和你的selfgradle文件结构放在哪里有关 apply from: './selfgradle/init.gradle' include ':app', ':librarya'在你的主工程或者各个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,哈哈,是不是呢,妈妈再也不用担心我了…
。。。