android多Modle统一配置Gradle

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
如下图(注意结构)


android多Modle统一配置Gradle_第1张图片
结构 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,哈哈,是不是呢,妈妈再也不用担心我了...


android多Modle统一配置Gradle_第2张图片
编译-1 icon
android多Modle统一配置Gradle_第3张图片
编译-1 icon

你可能感兴趣的:(android多Modle统一配置Gradle)