前言
在前一篇文章中,介绍了productFlavors的基本应用。
在这篇文章中,介绍如何在Lib(也就是Android studio的Module)中使用productFlavors。
添加productFlavors选项
在lib目录的build.gradle文件中添加productFlavors选项,如下图所示:
在图片中,我们在productFlavors中添加了lib_demo1和lib_demo2两个选项,并在lib项目中新建了lib_demo1和lib_demo2文件夹,添加了相应的资源文件。
在Lib中使用productFlavors选项,publishNonDefault true这一句配置,是一定要加的。
这句配置的作用是,Lib编译时,不使用默认的选项。也就是可以指定productFlavors中的选项来编译。
添加好了productFlavors选项,我们把lib依赖到项目中,编译。
但是编译并没有成功,为什么呢?
处理问题
编译失败的原因,是我们依赖lib的方式不对。
compile project(':lib_demo') // 这是我们原来的依赖方式
我们应该换成这种依赖方式
compile project(path: ":lib_demo", configuration: 'lib_demo1Debug')
compile project(path: ":lib_demo", configuration: 'lib_demo2Debug')
如下图所示
为什么要换成这种依赖方式呢?
因为添加productFlavors之前,lib就只有默认的编译方式,而我们添加了productFlavors选项之后,lib就没有了默认的编译方式了,只有我们通过productFlavors指定的编译方式。
所以compile project(path: “:lib_demo”, configuration: ‘lib_demo1Debug’)这种依赖方式,就是显示的指定lib的版本。
既然是显示的指定lib依赖版本,你也可以不用lib的debug版本,而用release版本,如下图所示:
好了,我再次编译,但还是编译失败,提示
Error:Execution failed for task ‘:app:processDemo2DebugResources’. Error: more than one library with package name ‘com.zcw.lib_demo’ |
继续解决问题
为什么会报more than one library with package name ‘com.zcw.lib_demo’这个错误呢?
这是因为我们用以下命令依赖lib时,相当于依赖了2次lib,所以包名重复,冲突了。
compile project(path: ":lib_demo", configuration: 'lib_demo1Debug')
compile project(path: ":lib_demo", configuration: 'lib_demo2Debug')
怎么解决呢?
用productFlavors相关内容解决。
因为我们在主项目(app)中也添加了productFlavors选项,选项中有demo1和demo2,所以我们分别为这两个选项指定不同的lib依赖。
我们可以看到,在dependencies中的androidTestCompile、testCompile命令,也是同理。
具体操作:
首先,在主项目(app)的build.gradle文件最外层添加以下配置:
configurations {
demo1Compile
demo2Compile
}
然后把依赖语句换成以下语句:
demo1Compile project(path: ":lib_demo", configuration: 'lib_demo1Debug')
demo2Compile project(path: ":lib_demo", configuration: 'lib_demo2Debug')
如下图所示:
然后编译,OK。
总结
到这里,productFlavors在Lib(Module)中的使用就介绍完了,productFlavors更丰富的配置,请自行查询资料。