将 buildType 从 android app/library 模块传递给 java only gradle 模块

dim*_*suz 10 android gradle

GradleModule 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")
}

Run Code Online (Sandbox Code Playgroud)

GradleModule B是一个只有 kotlin/java 的模块:

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

dependencies {
}
Run Code Online (Sandbox Code Playgroud)

模块 A 依赖于模块 B:

// Module A build.gradle
dependencies {
  implementation project(":module-b")
}
Run Code Online (Sandbox Code Playgroud)

Module B来源中,我需要知道它究竟是如何被消耗的Module A,电流buildType是多少Module A:这是“调试”,“内”,“外”或“释放”?

理想情况下,我希望BuildConfig.java使用Module B类似于 Android Gradle 插件提供的插件,但如果这是不可能的,我希望至少有某种方法来确定非 android 模块中的构建类型。

编辑另一个例子来说明这一点:假设有一个“应用程序”模块和 10 个纯 Java 模块。当我执行 'app:assembleExternal' 任务时,在所有 10 个仅限 Java 的模块中,我想知道它是正在构建的“外部”构建类型。

aha*_*ini 1

一种方法是实现使用gradle.taskGrpah.whenReady内部检查 Gradle taskGraphModule B并检查是否:module-a:assembleDebug是其中的一部分,然后设置一个参数值,DEBUG然后 Gradle 插件可以获取该参数值com.github.gmazzo.buildconfig,然后创建一个BuildConfig.java被编译的文件进入Module B输出工件。

不使用 android-library 插件也可以做到这一点,老实说我觉得实现起来很烦人。令人烦恼的部分是,该变体是在某个地方决定或解决的,在我看来,这是不容易通过代码访问的。