配置特定的gradle风味组合

pqv*_*vst 6 android gradle android-studio android-gradle-plugin

我想知道是否可以为特定的风味组组合提供文件或配置设置.例如,我有2个风味组,每组有2种不同的风味:

风味组:版本

  • V2
  • V3

风味组:类型

  • 自由
  • 充分

订购"类型","版本"时,我可以构建我的应用程序的4种不同风格:

  • FreeV2
  • FreeV3
  • FullV2
  • FullV3

我的源代码树看起来像这样:

/src
    /free
        /res
    /full
        /res
    /v2
        /java
        /res
        AndroidManifest.xml (features and permissions for v2 flavors)
    /v3
        /java
        /res
        AndroidManifest.xml (features and permissions for v3 flavors)
Run Code Online (Sandbox Code Playgroud)

这正是我想要的,对我的项目非常有效.但是,我希望我能为特定的风味组合组合提供文件.例如,我想为FullV3和FullV2提供不同的AndroidManifests.我不认为这是可能的,或者?例如:

/src
    /free
        /res
    /full
        /res
    /v2
        /java
        /res
        AndroidManifest.xml (features and permissions for v2 flavors)
    /v3
        /java
        /res
        AndroidManifest.xml (features and permissions for v3 flavors)
    /fullv3
        AndroidManifest.xml (features and permissions for full v3 only!)
    /fullv2
        AndroidManifest.xml (features and permissions for full v2 only!)
Run Code Online (Sandbox Code Playgroud)

我也很高兴能够在gradle构建文件中执行此操作:

productFlavors {
    free {
        packageName ...
        flavorGroup "type"
    }
    full {
        packageName ...
        flavorGroup "type"
    }
    v2 {
        packageName ...
        flavorGroup "version"
    }
    v3 {
        packageName ...
        flavorGroup "version"
    }
    fullv2 {
        ...  <-- specifically for the full-v2 combination
    }
    fullv3 {
        ...  <-- specifically for the full-v3 combination
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:一种解决方案是只有1个flavor组并明确定义4种flavor:

  • freeV2
  • freeV3
  • fullV2
  • fullV3

但是,这对我来说不是一个可行的解决方案,因为我必须复制每个版本的免费和完整版本的所有版本特定代码.

abe*_*est 9

此功能是在GradleAndroid插件版本0.7.0中添加的

http://tools.android.com/tech-docs/new-build-system < - 截至2014年1月6日,此链接有效

如果您有味道,现在可以拥有变体特定的源文件夹.

  • 仅适用于app(不是库或测试).名字是src/flavorDebug/...src/flavor1Flavor2Debug/
    • 请注意camelcase命名,首字母为小写.
  • 它的组件(res,manifest等)比构建类型或flavor的组件具有更高的优先级.
  • 当使用多个风味维度时,还有一个"风味组合"源文件夹可用.例如src/flavor1Flavor2/
    • 请注意,这适用于所有维度的所有组合.
    • 它的优先级高于单味源集,但低于构建类型.

2014年1月30日更新

IntelliJ IDEA v13.0.2(Build 133.696)现在支持在0.7.0中进行的Android Gradle Plugin更改

  • 根据问题的后半部分,您是否知道在构建文件中执行特定风味组合的语法? (3认同)
  • "请注意,这适用于所有尺寸的所有组合." 是否有可能使它不是所有维度的组合而只是其中一些维度的组合? (2认同)

Mar*_*art 0

当口味融合在一起时,文件将被合并。full因此,如果您有 in和 in清单,它们将在生成v3时合并。fullV3这样你就可以得到生成的组合。