# 为什么要用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 这篇参考文章中的方案我并没有配置成功,不过思路是正确的.