Android子模块下productFlavors的配置

以下文章说明中,_android_test_google代表的是Flavors,debugrelease代表的是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的介绍说明

又及,以上所有信息以官网信息为准。

猜你喜欢

转载自blog.csdn.net/Ser_Bad/article/details/105636460