实际开发中遇到过这样的问题:

1、android library module的Build Variants怎么切换,都是编译的release版本。

2、android library module中无法添加productFlavors,现象是添加后主module就会提示找不到类

在没有找到解决方法时,问题1就只能手动改build.gradle文件,再来编译。问题2就直接使用buildTypes来代替了,模糊了界线。。

其实这两个问题都是用同一个方法解决的。

先带大家看一段源码,进入defaultConfig中,是的,就是build.gradle,android下的defaultConfig,可以看到两个参数

071af4ce52713bd6938a624523f9ee26.png

defaultPublishConfig,意思是library module只能以release方式编译,无论我们怎么切换,而publicshNonDefault是一个开关,true表示关闭defaultPublishConfig默认值,反之,打开。所以要想解决问题1,我们至少要先将这个开关设置成true。

首先,在library module 的build.gradle上添加的android中添加

android {

compileSdkVersion 25

buildToolsVersion "25.0.2"

publishNonDefault true

defaultConfig {

minSdkVersion 16

targetSdkVersion 25

}

}但即使这样,我们去切换

Build Variants,会有提示,然后还是没有用。

397c0ab3674871d34144e00e964e5a3f.png

接下去我们要做的,将library module的productFlavors的编译选择“搬到”主module中去,直白来说就是在主module中创建一一对应的productFlavors。看操作

在library module中创建,我们所需的productFlavors

productFlavors {

xiaomi {

}

huawei {

}

}

接着,你就可以在主module中指定编译的版本了

导入library module时,原本是

compile project(':lib_module')

改成

debugCompile project(path :':lib_module', configuration: 'xiaomiRelease')

releaseCompile project(path: ':lib_module', configuration: 'huaweiRelease')

我们将xiaomiRelease包指定为debug版本了,可以发现第一个debugCompile 是指主module的buildType(也可以productFlavors),后面的configuration是library module的productFlavors+buildType

这样切换主module的Build Variants,library moudle也会跟着改变,运行后也是预想中的版本了。

但是上面的例子有点奇怪,debug对应是xiaomi,我们可以再进行修改

例如直接在主moudle中添加一样的,buildTypes或productFlavors都可以

buildTypes(productFlavors) {

xiaomi {

}

huawei {

}

}

然后导入library就可以改成

xiaomiCompile project(path :':lib_module', configuration: 'xiaomiRelease')

huaweiCompile project(path: ':lib_module', configuration: 'huaweiRelease')

这样编译下,buildTypes都是非debug版本,即需要签名后才方便安装。

可能大家会有些乱,实际操作后就会好理解多了

最后还有一个问题,我们都知道N个buildTypes和M个productFlavors可以产生N*M个编译结果,所以,其实基本上例子,在方module中我们得创建2*2个buildTypes来对应lib

buildTypes {

xiaomiDebug.initWith(buildTypes.debug)//声明此类型也是debug

xiaomiDebug{

}

xiaomiRelease{

}

huaweiDebug.initWith(buildTypes.debug)

huaweiDebug {

}

huaweiRelease{

}

}

//导入lib

xiaomiDebugCompile project(path :':lib_module', configuration: 'xiaomiDebug')

xiaomiReleaseCompile project(path :':lib_module', configuration: 'xiaomiRelease')

huaweiDebugCompile project(path: ':lib_module', configuration: 'huaweiDebug')

huaweiReleaseCompile project(path: ':lib_module', configuration: 'huaweiRelease')

这样就可以一一对应上了

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐