Gradle工程可以统一管理且有代码提示的依赖和配置管理方案

804 阅读3分钟

# 为什么要用buildSrc: 统一管理+代码提示

我们大部分的安卓工程都包含了很多个模块,每个模块都要配置Android的版本,工程的依赖等等, 而且很多时候这些版本和依赖都是重置的. 这样管理起来就很不方便. 官方推荐的解决方式是ext,但是这种方式有一个问题就是没有代码提示,这样,你每次调用的时候还得去打开ext文件拷贝一下才行,如果能加上自动代码提示就完美了啊.

# buildSrc原理

gradle有一个默认的机制,如果当前工程下有一个buildSrc目录, 那么这个目录下的内容就会被编译成为一个jar包,而且gradle也会自动把这个jar包添加到classpath下面去,这里就是使用这个机制.

# 实现步骤

Java版

1). 在根工程创建一个buildSrc文件夹,然后在buildSrc目录下创建src,在src下创建main,在main下面创建java,然后在java目录下创建Config.java文件,我们所有的配置都会写在这个类里面,如下图(大家可以发现这个目录其实是默认的源码目录):

2). 然后在这个目录下写:

class Deps {
    public static final String support_appcompat = "com.android.support:appcompat-v7:27.1.1";
}

3). 然后点击AS工具栏上的Sync Project with Gradle File按钮.
4). 这时候你就可以在任何其他的gradle配置文件里面去调用这个常量了,如我在app模块下的调用:

dependencies {
    implementation Deps.support_appcompat
}

重点是有代码提示的,看下图:

截图中包含了我声明了其他的一些依赖.
5) 这样,我们就可以把所有的依赖全部写到这个Config.java类中,不止依赖,还可以把Android编译相关的配置如compileSdkVersion,targetSdkVersion,minSdkVersion都写到这个Config.java中;还有我们buildscript的依赖也可以,如下图:

这样,所有的环境和依赖都在一个地址集中管理了,而且因为有代码提示,可以很方便的在其他工程的配置脚本中调用.

注意: 这个buildSrc模块不能在settings.gradle中配置.

kotlin版

kotlin的版本的思路大致和上面java版的相同,不过kotlin版的得配置一下kotlin编译环境,如下(其实就是配置一个kotlin工程的步骤):
buildSrc目录下面创建一个build.gradle文件,内容如下:

buildscript {
    ext.kotlin_version = '1.2.31'
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
apply plugin: 'kotlin'

然后创建kotlin的源码目录(和普通的Kotlin工程一样的地址):

因为Kotlin工程中可以有java代码,所以我上面也有java目录.
Dependencies.kt文件中内容如下:

object Depedencies {
    val appcompat = "com.android.support:appcompat-v7:27.1.1"
}

然后同样点击按钮,然后就可以在其他模块中调用了.

dependencies {
    implementation Depedencies.appcompat
}

同样完美支持代码提示.
Kotlin版的优势在于写的是Kotlin语言,比Java版的要简洁一些.

网上的kotlin版本方案我这里一直是失败的,我这里就以普通kotlin工程的方向去配置的,就是可以的.

# 总结

其实buildSrc就是一个普通的java工程,这里面可以写任何内容.唯一和普通java工程不同的地方就在于Gradle会自动编译他并且把他的产出(jar包) 自动加入到 编译的classpath下面去,这样,我们的脚本自然能找到这个工程的所有类并使用他了.

# 参考

Using buildSrc for custom logic in Gradle builds 这篇参考文章中的方案我并没有配置成功,不过思路是正确的.