场景:
随着业务的增长,app程序越来越庞大,引用的library也越来越多。但是有些共同引用的库在每个module版本的设置不同,每个module设置的minSdkVersion、targetSdkVersion等也不尽相同。假如你使用butterknife或dagger2,需要在每个module配置annotationProcessor,如annotationProcessor‘com.google.dagger:dagger-compiler:2.10‘跟annotationProcessor‘com.jakewharton:butterknife-compiler:8.6.0‘。如果发现该库有更新,则需遍历每个module一个个修改,这样的工作明显是浪费时间的。但是如何解决这个问题呢?也许有人说只要设置版本为+自动更新,其实这是不可取的。万一更新的库不兼容旧版本,你还不是得花费大力气去查找问题,再去改回来。接下来我将介绍一个简便的方法来统一各个库版本问题。
首先,在工程根目录下创建config.gradle文件,目录如图:
内容如下:
是不是很熟悉?是不是已经知道接下来我们要干什么了?
在使用该配置前,还需要配置一定的信息。在根目录的build.gradle设置apply from:"config.gradle",意思是所有的子项目或者所有的modules都可以从这个配置文件中读取内容。结果如图:
如何引用config.gradle呢?很简单,第一步:在module的build.gradle定义路径:def config=rootProject.ext 意思是定义config的路径为rootProject.ext,即config.gradle文件下的ext。如图:
引用内容时直接可以使用config.**,如上图,compileSdkVersion等都是使用该方法。当然,如果不用def config = rootProject.ext的话也是可以的。路径将变成rootProject.ext.** ;
library的使用也是大同小异,如图:
笔者使用的是Android studio 3.0,所以没有使用compile,api、implementation、compile的差别可以自行查找。注意,使用&{config.**}用的是双引号,不是单引号