Android:仅添加具有特定风味的库模块

时间:2019-11-20 04:19:20

标签: android android-gradle-plugin build.gradle android-library android-flavors

在我的android应用程序中,我有2个库模块,需要根据风味有条件地包括在内。以下是应用程序结构
    :app
:library1
:library2
并且该应用具有2种口味,因此它将生成2个apk,一个是免费版本,另一个是付费版本。因此,相应地配置应用程序build.gradle如下:

android {
    flavorDimensions("billing_type")
    productFlavors {
        free {
            dimension "billing_type"
        }

        paid {
            dimension "billing_type"
        }
    }
}
dependencies {
    implementation project(path: 'flavor1')
    implementation project(path: 'flavor2')
}

我们可以看到,两个库模块都将包含在两种版本中(免费和付费)。但是我只想包含付费风格的 library2 。因此,如何才能有条件地仅以付费口味添加 library2 ?我遵循了link

中提到的一些方法

并进行了以下更改:

android {
    flavorDimensions("billing_type")
    productFlavors {
        free {
            dimension "billing_type"
        }

        paid {
            dimension "billing_type"
        }
    }
}
configurations {
    freeImplementation
    paidImplementation
}
dependencies {
    freeImplementation implementation project(path: 'flavor1')
    paidImplementation implementation project(path: 'flavor2')
}

所有在线参考均适用于较早的grdale版本,这些版本使用 compile 添加库模块,  但是从gradle插件3.0.0开始不推荐使用。因此,谁能帮助我找出如何仅在最新版本中有条件地添加特定风味的库模块

2 个答案:

答案 0 :(得分:0)

选项1:

最后我找到了解决方法,在这里我将向其他面临相同问题的人进行解释:

关键部分是在库build.gradle中将publishNonDefault设置为true,然后必须按照用户指南的建议定义依赖项。

整个项目如下:

  

库build.gradle:

apply plugin: 'com.android.library'

android {        
    ....
    publishNonDefault true
    productFlavors {
        market1 {}
        market2 {}
    }
}
  

项目build.gradle:

apply plugin: 'com.android.application'

android {
    ....
    productFlavors {
        market1 {}
        market2 {}
    }
}

dependencies {
    ....
    market1Compile project(path: ':lib', configuration: 'market1Release')
    market2Compile project(path: ':lib', configuration: 'market2Release')
}

现在,您可以选择应用程序样式和“构建变体”面板,并且将相应地选择库,并且所有构建和运行都将基于选定的样式进行。

如果您有基于库的多个应用程序模块,Android Studio将抱怨Variant选择冲突,可以,只需忽略它即可。

enter image description here

选项2:

示例解决方案:

  

库build.gradle

android {

    publishNonDefault true

    buildTypes {
        release {
        }
        debug {
        }
    }
    productFlavors {
        free {
        }
        paid {
        }
    }
}
  

App build.gradle

android {

    buildTypes {
        debug {
        }
        release {
        }
    }
    productFlavors {
        free {
        }
        paid {
        }
    }
}

configurations {
    freeDebugCompile
    paidDebugCompile
    freeReleaseCompile
    paidReleaseCompile
}

dependencies {

    freeDebugCompile project(path: ':lib', configuration: 'freeDebug')
    paidDebugCompile project(path: ':lib', configuration: 'paidDebug')
    freeReleaseCompile project(path: ':lib', configuration: 'freeRelease')
    paidReleaseCompile project(path: ':lib', configuration: 'paidRelease')

}

答案 1 :(得分:0)

对于 Gradle 3.0 及更高版本

当您的主项目使用具有风味维度的模块或库模块 (AAR) 时,您的应用不知道该使用哪一个。您应该在应用的 build.gradle 文件的 defaultConfig 块中使用 missingDimensionStrategy 来指定默认风格。例如:

missingDimensionStrategy 'dimension', 'flavor1', 'flavor2'

请查看 this 链接了解更多详情。