(周期计划-6)从公司项目配置看Gradle(2.0)

简介: 2018年技术周期计划:周期计划-6(2018/2/5-2018/2/11)写在前面https://www.jianshu.com/p/8242dcc90f91之前写过一篇博客,博客内容是关于项目中对Gradle的配置升级。

2018年技术周期计划:周期计划-6(2018/2/5-2018/2/11)

写在前面

https://www.jianshu.com/p/8242dcc90f91
之前写过一篇博客,博客内容是关于项目中对Gradle的配置升级。主要好处是更方便的管理依赖库的版本问题,和更方便的进行App的版本信息的升级。

感兴趣的看官,可以看看我的其他文章:
1、常用集合的源码分析:HashMap
2、Java反射实践:从反射中理解class
3、从公司项目配置看Gradle

那么这次的博客内容,是基于上一篇博客内容的一次升级。其内容不光是用于进一步方便去管理依赖库,也增加了一些gradle上使用的小技巧。

开始

1.0时代的gradle配置,我们是在dependencies.gradle中这么配置版本信息,也就是说版版本号直接写在了dependencies.gradle中。

ext {
    compileSdkVersion = 26
    buildToolsVersion = "26.0.2"
    targetSdkVersion = 22
    minSdkVersion = 19
    supportLibraryVersion = '25.3.1'
    //省略部分内容
}

而2.0的gradle配置,把版本号又进行了一次抽取,把版本号信息,全部写在了gradle.properties文件之中。让我们来看一下代码:

gradle.properties内容

COMPILE_SDK_VERSION=26
BUILD_TOOLS_VERSION=26.0.2
TARGET_SDK_VERSION=22
MIN_SDK_VERSION=19
ANDROID_SUPPORT_VERSION='25.3.1'

dependencies.gradle改进后内容

ext {
    //这种写法是没有必要的了,只为了循序渐进的展示过程
    compileSdkVersion = COMPILE_SDK_VERSION
    buildToolsVersion = BUILD_TOOLS_VERSION
    targetSdkVersion = TARGET_SDK_VERSION
    minSdkVersion = MIN_SDK_VERSION
    supportLibraryVersion = ANDROID_SUPPORT_VERSION
    //省略部分内容
}

这里涉及到一个知识点,那就是我们为什么能够在 dependencies.gradle中直接使用我们在gradle.properties中声明的变量,那是因为gradle.properties文件会被gradle所加载,而其中我们声明的变量可以当做一个全局的变量去使用。因此,我们就没有必要在ext中再多此一举的那么赋值了。我们直接在build.gradle中使用即可:

android {
    buildToolsVersion BUILD_TOOLS_VERSION as String
    compileSdkVersion COMPILE_SDK_VERSION as int
    defaultConfig {
        applicationId "包名"
        minSdkVersion MIN_SDK_VERSION as int
        targetSdkVersion TARGET_SDK_VERSION as int
    }
    //省略部分内容
}

子模块

到这里,主module的配置可以说一帆风顺,并没有什么问题。但是子模块就不适用这种方式了,因为我们的子module一般来说是一个相对独立的项目。我们有时可能不需要主module的配置信息,因此我们需要自己覆盖或者自定义。
因此我们的子module在使用这种方式去配置gradle时需要一个加载自定义properties文件的过程。
首先还是让我们先看一看子module的properties文件。这里我新建了一个叫做config.properties的文件。

config.properties内容

COMPILE_SDK_VERSION=26
BUILD_TOOLS_VERSION=26.0.2
TARGET_SDK_VERSION=22
MIN_SDK_VERSION=16

因为这里我们使用了一个自定义的properties,因此我们需要自己去加载这个文件,去拿文件对应的值。
我们可以写一个方法,用于完成这项工作:

def getConfigProperty(String configName) {
    def versionPropsFile = file('config.properties')
    def versionProps = new Properties()
    versionProps.load(versionPropsFile.newReader())
    return versionProps.getProperty(configName)
}

我们如何使用呢?很简单,COMPILE_SDK_VERSION就是从config.properties文件中读取的值。

def COMPILE_SDK_VERSION = hasProperty('COMPILE_SDK_VERSION') ? property('COMPILE_SDK_VERSION') : getConfigProperty('COMPILE_SDK_VERSION')

因此我们在子module的gradle文件中可以很方便的这样去获取我们自定义的文件:

def COMPILE_SDK_VERSION = getConfigProperty('COMPILE_SDK_VERSION')
def BUILD_TOOLS_VERSION = getConfigProperty('BUILD_TOOLS_VERSION')

android {
    compileSdkVersion COMPILE_SDK_VERSION as int
    buildToolsVersion BUILD_TOOLS_VERSION as String
    //省略部分内容
}

当然到这里,可能很多朋友会觉得这样搞太麻烦了。其实这就是仁者见仁智者见智吧,如果觉得麻烦,通过这里的思路其实也可以转换成去gradle脚本的学习,也不失为一种收获吧。

小用法

上述内容都是我们在gradle文件中搞事情,那如果我们想在java文件中使用gradle.properties的内容怎么办?当然很好办。

buildTypes {
        debug {
            buildConfigField "String" "COMPILE_SDK_VERSION" "\"${COMPILE_SDK_VERSION}\""
        }
        //省略部分内容
}

这样声明完之后,我们可以直接在java文件中这样使用BuildConfig.COMPILE_SDK_VERSION
我们还可以定义成xml中使用的变量。

buildTypes {
        debug {
                resValue "string", "compile_sdk_version", "\"${COMPILE_SDK_VERSION}\""
        }
        //省略部分内容
}

这样声明过后,我们可以直接在xml中这么调用@string/compile_sdk_version

尾声

Gradle的小小用法先暂时记录到这,以后会保持对Gradle的学习与记录。

本菜开源的一个自己写的Demo,希望能给Androider们有所帮助,水平有限,见谅见谅…
https://github.com/zhiaixinyang/PersonalCollect

2018年7月2号,我正式开始了自己的Android工作,为了能够让自己能够好好完成工作,并且能够快速得到技术提升。所以打算以公众号的方式去敦促自己学习,我会把自己日常的学习笔记发布到公众号上,如果可以,共同进步!~


img_89788b3a8f3f86257453cbc8264959f6.png
个人公众号
目录
相关文章
|
4月前
|
Java Linux iOS开发
Linux下安装并配置Gradle
Linux下安装并配置Gradle
247 0
|
4月前
|
缓存 Java 开发工具
【开发工具】Gradle的安装 与 配置环境变量
【开发工具】Gradle的安装 与 配置环境变量
172 0
|
3月前
Gradle安装与配置(8.2)
Gradle安装与配置(8.2)
226 1
|
3月前
|
Java 数据库连接 数据库
在Maven或者Gradle构建配置中添加了必要的依赖
在Maven或者Gradle构建配置中添加了必要的依赖
47 1
|
4月前
|
Java Spring Maven
gradle 配置指南
在`build.gradle`中配置Gradle仓库,首先添加阿里云公共仓库
|
4月前
|
XML Java Android开发
gradle配置
gradle配置
51 0
|
4月前
|
IDE Java Maven
Maven或Gradle:构建工具的使用和配置等知识讲解梳理
Maven或Gradle:构建工具的使用和配置等知识讲解梳理
181 1
|
4月前
|
开发工具 Android开发 开发者
Android 项目编译 Gradle 配置说明
Android 项目编译 Gradle 配置说明
250 0
|
10月前
|
Java Maven Android开发
android之gradle配置仓库与引入依赖
android之gradle配置仓库与引入依赖
510 0
|
10月前
|
Java Apache Maven
Gradle安装和配置
Gradle安装和配置
424 0