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


结构 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值