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

Posted

技术标签:

【中文标题】如何使用 Android Studio 在模块中添加风味?【英文标题】:How can I add flavors in a module with Android Studio? 【发布时间】:2014-08-10 01:12:27 【问题描述】:

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

project/
  - app/
    - build.gradle
  - libraries/
    - module/
      - build.gradle
  - build.gradle
  - settings.gradle

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

include ':app', ':libraries:module'

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

productFlavors 
    alpha
    production

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

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

在内置app/src/main/androidManifest.xml。由于某种原因,模块没有被构建,所以自定义主题不起作用。我做错了什么?

【问题讨论】:

据我了解,即使应用程序是与您的“模块”相同的模块,并且在任何模块中添加口味都可以。编译代码时遇到什么错误。 @pyus13 进一步看,错误似乎是找不到给定风味的资源的问题。我在应用的清单中设置了自定义主题,但我得到了No resource found that matches the given name (at 'theme' with value '@style/MyCustomTheme') 是你的模块是一个库项目。意味着它有“android-library”或“android”作为插件? @pyus13 它使用 android-library 插件。 正如 Android Studio 团队负责人所说,库不支持风味。 ***.com/questions/17107908/… 【参考方案1】:

在库模块的 build.gradle 中,您需要几行额外的行来告诉它导出风味以及在从另一个模块包含时如果未指定默认使用哪个构建变体:

android 
    defaultPublishConfig "productionRelease"
    publishNonDefault true

    productFlavors 
        alpha 
        
        production 
        
    

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

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

dependencies 
    compile project(':module')

默认情况下它将取决于productionRelease 变体。如果您想依赖非默认变体:

dependencies 
    compile project(path: ':module', configuration:'alphaDebug')

【讨论】:

是否可以仅依赖于风格而不依赖于构建类型? 我猜你的意思是compile project( 这篇文章帮助很大。到目前为止,我已经为此花费了大量时间。我现在注意到的一件事是 defaultPublishConfig 中指定的构建模式是现在唯一可以从 android studio 构建的东西。有没有其他人遇到过这种情况? 刚刚得到我想要的 :) 谢谢 :)

以上是关于如何使用 Android Studio 在模块中添加风味?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Studio 4.2 上导入 .AAR 模块

如何在 Android Studio 中导入模块而不创建副本

Android Studio - 如何在子目录中制作模块?

如何在库模块Android Studio中调用主应用程序模块功能

如何在 Android Studio 中从 SVN 导入模块

如何从android studio中的另一个模块导入类?