以下文章说明中,_android
、_test
、_google
代表的是Flavors,debug
和release
代表的是buildTypes
,提前说明,根据你自己的项目需要,也许有所不同。
在多模块下,子模块的Flavors该如何设置呢?其实不用什么特别的设置,只需要子模块保持和主模块一样的Flavors就行,然后按照以下来引用就好了。需要注意的是,两者要保持一致,只许子模块比主模块的Flavors多,但不能少,或者完全没有Flavors。
implementation project(path: ':lib')
尤其需要特别说明的一点是,之前搜到了一些国内的文章,得到是一个错误的结果:
_testReleaseImplementation project(path: ':lib', configuration:'_testRelease')
_testDebugImplementation project(path: ':lib', configuration:'_testRelease')
_androidReleaseImplementation project(path: ':lib', configuration:'_androidRelease')
_androidDebugImplementation project(path: ':lib', configuration:'_androidRelease')
但是该方法在gradle3.0以上的版本中已经移除了,虽然gradle的语法依然支持这种形式,但是该功能已经不再支持了。官网说明
同时,如果主模块和另一个子模块同时引用了一个带有Flavors的子模块的话,依然需要在该子模块中添加相对应的Flavors,如果实在不需要添加的话,需要添加的是,参见说明:
android {
...
defaultConfig {
...
//"mode"来源于相关引用的flavorDimensions和Flavors
missingDimensionStrategy "mode",'_android'
}
}
如果需要添加在只有在某个Flavors下导入的包的话,可以这样做:
//以下代表只在_test时导入picasso包,
//但是为了避免平时开发时出现的导包错误,添加一个compileOnly只在编译时有该包
_testRuntimeOnly 'com.squareup.picasso:picasso:2.71828'
compileOnly 'com.squareup.picasso:picasso:2.71828'
如果需要添加在不同Flavors下导入的包的话,可以这样做:
_androidImplementation('com.getui:sdk:2.14.0.0')
_testImplementation('com.getui:sdk:2.14.0.0')
_googleImplementation('com.getui:sdk-for-google-play:4.3.8.0')
以上有一点需要说明的_testReleaseImplementation
和_testDebugImplementation
这种方式虽然语法上支持,但不再提供默认支持了,如果你需要的话,需要添加以下代码,请根据你自己的需要来,不要直接照抄,说明:
configurations {
_testReleaseImplementation
_testDebugImplementation
_androidReleaseImplementation
_androidReleaseImplementation
}
附上一个哥们关于flavorDimensions的介绍说明
又及,以上所有信息以官网信息为准。
网友评论