ProductFlavors不同依赖配置打包

在开发过程中,有时会遇到同一个APP要依赖不同的类库打不同的apk或者是同一个App打包的时候依赖不同的module。这个要怎么实现呢。其实很简单,就是使用我们的ProductFlavors。这里就不多说,直接看代码

productFlavors {
        apkBaidu {}
        apk360{}
    }

我们先声明两个Flavor,假设我们这里有moduleA,moduleB,baiduApk只依赖moduleA,360Apk依赖moduleA、moduleB,这里我们gradle要怎么配置呢,看代码:

    apkBaiduCompile project(path: ':moduleA', configuration: 'release')
    apk360Compile project(path: ':moduleA', configuration: 'release')
    apk360Compile project(path: ':moduleB', configuration: 'release')

像以前正常依赖一个module是这样依赖的,

compile project(':moduleA')

这里我们通过FlavorNane+Compile 代替常规的compile指令,来区分这个依赖是哪一种Flavor编译需要的依赖。
这里补充下跟本文无关的知识点,我们怎么选择具体是哪一种Flavor编译呢,可以在as的左边底部面板Build Variants中选择具体的编译方式,比如我们上面有两个Flavor,那体现在Build Variants中就会出现四个变体,

apkBaiduDebug、apkBaiduRelease、apk360Debug,apk360Release。

我们选择具体的一个,直接按run编译我们的App,就会生成对应的包。下面介绍下高级用法,我们也可以在右边Gradle面板中找到我们的项目,在项目下tasks–>build—>找到assembleApkBaidu,或者assembleApk360进行编译,会同时生成Debug跟Release包,具体使用方法这里就不多说了。
细心的读者可能会发现,我们上面依赖module是这样配置的

apk360Compile project(path: ':moduleA', configuration: 'debug')

后面多出来这个configuration是什么呢?
这里其实是我们通过配置决定了moduleA这个库的编译方式为debug,as在正常情况下,我们app依赖的module编译方式是Release,这样导致我们在debug下,无法对这个module进行调试。所以我们在这里依赖的时候指定了module的编译方式为debug,这里如果单是这样配置,其实是无法实现module的debug编译的,需要在module中的gradle下的android节点下增加一下配置

android {
    publishNonDefault true
}

将module的配置公开给外部设置。
讲到这里,本文内容也差不多结束了?不不不!这里还有个知识点还没讲到,
有的同学可能以前已经使用过下面的配置方式

debugCompile project(path: ':moduleA', configuration: 'debug')

releaseCompile project(path: ':moduleA', configuration: 'release')

使用上面的配置方式顶替

compile project(':moduleA')

来选择debug跟release模式下的module编译模式。
通过上文提到的FlavorName+Compile这样组合的指令,同学们可能会有这样的需求

FlavorName+Debug+Compile or FlavorName+Release+Compile

可实际上呢,当我们这样配置指令后

apkBaiduReleaseCompile project(path: ':moduleA', configuration: 'release')

apkBaiduDebugCompile project(path: ':moduleA', configuration: 'debug')

点击Sync Now的时候,会发现,As提示apkBaiduReleaseCompile 跟命令不存在。这下就尴尬了吧。可是我们就是有这样的需要啊。这怎么办。
接着看代码:

configurations {
    apkBaiduDebugCompile
    apkBaiduReleaseCompile
    apk360DebugCompile
    apk360ReleaseCompile
}

我们在gradle的android节点下先声明这些指令,然后dependencies中就可以使用了。现在我们点击Sync Now试试看,是不是编译通过了。

你可能感兴趣的:(android)