我的应用针对多个市场的应用内计费系统具有多种风格。
我有一个共享我所有项目的基本代码的库。所以我决定将这些支付系统作为产品 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 defaulttrue
, and setting it tofalse
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 冲突,没关系,忽略它。
关于android - 基于 Android Gradle 中多 flavor 库的多 flavor 应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860659/