当前位置: 首页 > 知识库问答 >
问题:

将buildType从android应用程序/库模块传递到仅java的gradle模块

尉迟明辉
2023-03-14

Gradle模块A是一个android模块,定义了几种自定义构建类型

android {
  buildTypes {
    debug {
      buildConfigField 'boolean', 'DEV', 'true'
    }
    internal {
      buildConfigField 'boolean', 'INTERNAL', 'true'
    }
    external {
      buildConfigField 'boolean', 'EXTERNAL', 'true'
    }
    release {
      buildConfigField 'boolean', 'RELEASE', 'true'
    }
  }
}

dependencies {
  implementation project(":module-b")
}

Gradle模块B是一个仅限于kotlin/java的模块:

apply plugin: 'kotlin'
apply plugin: 'com.android.lint'

dependencies {
}

模块A取决于模块B:

// Module A build.gradle
dependencies {
  implementation project(":module-b")
}

模块B源代码中,我需要知道模块A使用它的确切方式,模块A的当前构建类型是什么:是“调试”、“内部”、“外部”还是“发布”?

理想情况下,我想要BuildConfig。模块B中的java与Android Gradle插件提供的类似,但如果这不可能,我希望至少有一些方法来确定非Android模块中的构建类型。

编辑另一个例子:假设有一个“应用”模块和10个纯java模块。当我执行“应用:程序集外部”任务时,那么在所有10个纯java模块中,我想知道它是正在构建的“外部”构建类型。


共有2个答案

娄利
2023-03-14

我认为这会奏效:

api project(":module-b")
燕刚毅
2023-03-14

这样做的一种方法是通过实现检查Gradle任务图的东西,使用gradle.taskGrpah.when就绪模块B中,并检查:模块-a: assembleDebug是否是其中的一部分,然后设置一个带有值DEBUG的参数,然后可以被Gradle插件(如com.github.gmazzo.buildconfig)拾取,然后创建BuildConfig.java,编译到ModuleB输出工件中。

不使用android library插件也可以做到这一点,我真的觉得实现起来很烦人。令人恼火的是,在我看来,变体是在代码不容易访问的地方决定或解决的。

 类似资料:
  • 你好,我有一个问题,我的模块化Java FX应用程序。 首先,我使用Intellij向导创建了一个JavaFX项目。 我添加了Java FX库: 并且JavaFX模块会被识别。我的模块-info.java:

  • 我想使用firebase数据库,但当我点击“连接到firebase”按钮时,我遇到了这个问题....有人能帮我吗???

  • 我有1个应用程序和2个模块 框架结构 但我不能在MyApp中使用MyModule的文件。IDE显示我“无法访问”错误,我想扩展一个MyModule类的类。而且它不是从MyModule创建类的,有人对此有想法吗?怎么了?

  • 如何使用新的 在使用dagger的旧版本之前,我们可以在构造函数中传递活动,并在提供者方法中返回该活动。但我不知道如何用dagger android做到这一点 我有以下模块。然而,dagger现在不关心。 是由实现的接口。我希望能够将此注入到我的中,即。 在预测活动 我的ActivityBuilder如下: 我的组成部分是: 我的申请是: 因此,问题是当使用dagger-android时,我如何将

  • 问题内容: 我有一个运行自定义gradle任务的Java应用程序,该应用程序在被调用时需要一些参数。这些是: Gradle任务如下所示: 我已尝试运行,但无法正常工作。 问题答案: 从Gradle 4.9开始,可以使用–args传递命令行参数。例如,如果要使用命令行参数启动应用程序,则可以使用 gradle run –args =’foo –bar’ 另请参阅Gradle应用程序插件 如何升级Gr

  • 我有一个Gradle多模块项目,有一个用于调用第三方服务的公共模块。在公共模块中使用Webclient,因此webflux中包含starter。 实施组织。springframework。启动:Spring启动启动webflux' 因为我已经包括了SpringBootStarterWebFlux,所以它正试图构建为一个bootJar,并期待主应用程序。如果我使用一个主应用程序,它构建的很好。但是,