3

在我的 android 应用程序中,我有 2 个库模块需要根据风格有条件地包含在内。以下是应用程序结构
:app
:library1
:library2
并且应用程序有 2 种风格,因此它将生成 2 个 apk,一个免费版本和一个付费版本。因此相应地配置了 app 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呢?我遵循了链接中提到的一些方法

并进行了以下更改:

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')
}

网上的所有参考资料都是针对使用compile添加库模块的旧 grdale 版本,但自 gradle plugin 3.0.0 以来已被弃用。所以任何人都可以帮我弄清楚如何有条件地添加库模块,仅在最新版本中

4

2 回答 2

0

对于 Gradle 3.0 及更高版本

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

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

请检查链接以获取更多详细信息。

于 2021-05-26T08:03:13.600 回答
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 selection conflict ,没关系,忽略它。

在此处输入图像描述

选项 2:

示例解决方案:

库构建.gradle

android {

    publishNonDefault true

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

应用程序构建.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')

}
于 2019-11-20T08:44:09.663 回答