android - 基于 Android Gradle 中多 flavor 库的多 flavor 应用

标签 android gradle android-gradle-plugin

我的应用针对多个市场的应用内计费系统具有多种风格。

我有一个共享我所有项目的基本代码的库。所以我决定将这些支付系统作为产品 flavor 添加到这个库中。

问题是android库可以有产品 flavor 吗?

如果是这样,我如何在应用的各个 flavor 中包含不同的 flavor ?

我搜索了很多,但我找不到关于这个场景的任何信息。我发现的唯一接近的东西是 http://tools.android.com/tech-docs/new-build-system/user-guide :

dependencies {
    flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
    flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
}

我将配置更改为不同的东西,但它不起作用!

我正在使用 android studio 0.8.2。

最佳答案

我终于找到了如何做到这一点,我会在这里为其他面临同样问题的人解释一下:

如果 App 和 Library 具有相同的 Flavor 名称

自 Gradle 插件 3.0.0(及更高版本)以来,可以执行以下操作:

库 build.gradle:

apply plugin: 'com.android.library'

// Change below's relative-path
// (as the `../` part is based on my project structure,
// and may not work for your project).
apply from: '../my-flavors.gradle'

dependencies {
    // ...
}

android {
    // ...
}

项目 build.gradle:

buildscript {
    // ...
}

apply plugin: 'com.android.application'
// Note that below can be put after `dependencies`
// (I just like to have all apply beside each other).
apply from: './my-flavors.gradle'

dependencies {
    api project(':lib')
}

android {
    productFlavors {
        // Optionally, configure each flavor.
        market1 {
            applicationIdSuffix '.my-market1-id'
        }
        market2 {
            applicationIdSuffix '.my-market2-id'
        }
    }
}

我的口味 .gradle:

android {
    flavorDimensions 'my-dimension'
    productFlavors {
        market1 {
            dimension 'my-dimension'
        }
        market2 {
            dimension 'my-dimension'
        }
    }
}

如果 App 或 Library 有不同的 Flavor-name (旧答案)

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

Update 2022; publishNonDefault is now by default true, and setting it to false is ignored, since said option is deprecated.

整个项目会是这样的:

库 build.gradle:

apply plugin: 'com.android.library'

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

项目 build.gradle:

apply plugin: 'com.android.application'

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

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

    // Or with debug-build type support.
    android.buildTypes.each { type ->
        market3Compile project(path: ':lib', configuration: "market3${type.name}")
    }

}

现在您可以选择应用风格和构建变体面板,库将被相应地选择,所有构建和运行都将基于所选风格完成。

如果你有多个基于库 Android Studio 的应用模块会提示 Variant selection 冲突,没关系,忽略它。

enter image description here

关于android - 基于 Android Gradle 中多 flavor 库的多 flavor 应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860659/

相关文章:

java - Quarkus ClassNotFoundException 本地依赖

android - 当使用中没有 gradle 编译时,如何在我的项目中使用此 ArcMenu 库?

java - 如何知道应用程序已更新

java - 使用许多点在图像上构建区域

java - 如何在Canvas中绘制图标或类似内容?

android - build.gradle 的结构

android - Android Gradle系统内不同测试任务运行不同类型的testInstrumentationRunner

android - 如何降级Android ADT?

java - 是否可以在 Gradle 中创建原型(prototype)?

java - 如何使用 intellij IDEA 创建带有 gradle 项目的 java servlet