如何在Android Studio模块中添加风味?

Phi*_*hil 27 android gradle android-studio build.gradle android-gradle-plugin

我有一套使用相同模块的项目,其中包含几乎所有实际代码.该项目设置如下:

project/
  - app/
    - build.gradle
  - libraries/
    - module/
      - build.gradle
  - build.gradle
  - settings.gradle
Run Code Online (Sandbox Code Playgroud)

依赖关系都设置正确,我可以构建和运行应用程序很好,但我只能添加项目的风味,这不是理想的解决方案.settings.gradle包含以下内容:

include ':app', ':libraries:module'
Run Code Online (Sandbox Code Playgroud)

在app目录的build.gradle文件中,我添加了以下块:

productFlavors {
    alpha
    production
}
Run Code Online (Sandbox Code Playgroud)

使用gradle 0.11,这会同步并创建assembleAlphaDebug,assembleAlphaRelease,assembleProductionDebug,assembleProductionRelease任务.当我尝试在模块中执行此操作时,我收到错误:

找不到与给定名称匹配的资源(在'theme'处,值为'@ style/MyCustomTheme')

在建成app/src/main/AndroidManifest.xml.由于某种原因,该模块尚未构建,因此自定义主题无效.我究竟做错了什么?

Sco*_*rta 67

在库模块的build.gradle中,如果在另一个模块中包含时没有指定,则需要一些额外的行来告诉它导出flavor和默认使用的构建变量:

android {
    defaultPublishConfig "productionRelease"
    publishNonDefault true

    productFlavors {
        alpha {
        }
        production {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

publishNonDefault只有当有人想要依赖productionRelease变体以外的东西时才需要这一点.如果您首先在库中设置多种口味,可能就是这种情况.

现在,如果您通过build.gradle中的另一个模块添加依赖项:

dependencies {
    compile project(':module')
}
Run Code Online (Sandbox Code Playgroud)

productionRelease默认取决于变体.如果您想依赖非默认变体:

dependencies {
    compile project(path: ':module', configuration:'alphaDebug')
}
Run Code Online (Sandbox Code Playgroud)

  • 是否可以仅依赖于风味而不依赖于构建类型? (2认同)