关于android studio 中android library module的两个问题

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

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

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

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

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

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

关于android studio 中android library module的两个问题_第1张图片

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,会有提示,然后还是没有用。

关于android studio 中android library module的两个问题_第2张图片

接下去我们要做的,将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')

这样就可以一一对应上了






 
  

你可能感兴趣的:(关于android studio 中android library module的两个问题)