在 Apollo v3 中为不同的构建类型设置不同的架构 Android

Set different schema for different build types in Apollo v3 Android

我有 2 个 GraphQl 模式用于我的应用程序的调试和生产版本。我还有 2 种构建类型:调试和发布。显然,我想使用调试构建类型的调试模式,以及发布版本的生产模式。

According to this issueApollo v2 允许使用 onCompilationUnit 设置这样的配置,也许我可以这样写:

apollo {
    onCompilationUnit {
        graphqlSourceDirectorySet.srcDirs += "src/main/graphql"
        def buildTypeName =(androidVariant as BaseVariant).buildType.name
        if (buildTypeName.contains('debug')) {
            graphqlSourceDirectorySet.srcDirs += "src/debug/graphql"
        } else if (buildTypeName.contains('release')) {
            graphqlSourceDirectorySet.srcDirs += "src/release/graphql"
        }
    }
}

问题是我在Apollo v3中没有找到onCompilationUnit(在我的项目中使用)

主要问题是:如何配置gradle强制Apollo v3对不同的构建类型使用不同的架构? 我认为 Apollo v3 中的 onCompilationUnit 类似物将解决这个问题。如果 Apollo v3.

中存在,请给我推荐一个

如果有其他一些方法可以解决这个问题,欢迎您回答:)

根据GitHub issue mentioned in the question, the new way to take Android flavors into accounts is createAllAndroidVariantServices中@BoD的回答,基本上是针对不同的build-types指定了不同的来源。因此,正如文档所述,我用我的 debug-schema 创建了 src/debug/graphql/$sourceFolder,相应地 src/release/graphql/$sourceFolder 和 prod-schema。我还将下一个配置添加到我的 build.gradle.kts:

apollo {
    createAllAndroidVariantServices(".", "") {
        if (name.contains("staging")) {
            // add if you have staging build-variant, which uses the same scheme as prod
            srcDir(file("src/release/graphql/"))
        }

        packageName.set("com.example.myapp")
    }
}