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

按ProductFraile和buildType分级源集

翟青青
2023-03-14

编辑口味和路径:

目前我有:

sourceSets.whenObjectAdded { 
    sourceSet -> 
    def sourceData = rootProject.ext[sourceSet.name]
    sourceSet.java.srcDirs = sourceData.javaDirRelease
}

ext是一个文件,其中所有特定于ProductFlayer的配置都是这样定义的:

ext{
    flavor1 = [
        javaDirRelease : ['src/pathToJavaReleaseFiles']
        javaDirDebug : ['src/pathToJavaDebugFiles']
    ]
}
sourceSets {
   flavor1{}
}
sourceSet.debug.java.srcDirs = 'src/pathToJavaDebugFiles'
sourceSets {
    flavor1{
        def flavorData = rootProject.ext['flavor1']
        release {
            java.srcDirs = flavorData.javaDirRelease
        }
        debug {
            java.srcDirs = flavorData.javaDirDebug
        }
    }
}

然而,我真的希望动态添加,这样我仍然可以保持我的配置文件完整。我的构建配置非常复杂,并不像这里描述的那么简单,因此我不需要建议将源文件放入文件夹SRC/Flavor1Debug中,因为这些资源也来自其他productFlavors,所以这不起作用。

共有1个答案

禹德水
2023-03-14

我想我明白了。我首先要说的是,这不是一个很好的设置,你真的应该寻找一个更标准的设置。

因此,对于解决方案,为了动态地读取风味源,我建议将ext结构移到如下所示:

ext {
    sources = [
        flavor1Debug : ['src/pathToJavaReleaseFiles']
        flavor1Release : ['src/pathToJavaDebugFiles']
    ]
}

这使您可以读取源路径并迭代project.ext.sources中的键和值。

applicationVariants.all { variant ->
        def extraSources = project.ext.sources.get(variant.name)
        if (extraSources != null) {
            def extraSourceFiles = extraSources.collect { project.file(it) }
            def sourceSet = variant.sourceSets.find { it.name == variant.name }
            sourceSet.java.srcDir extraSourceFiles
            def dummyTask = project.task("register${variant.name}ExtraSourcesTask")
            variant.registerJavaGeneratingTask(dummyTask, extraSourceFiles)
        }
    }
 类似资料:
  • 我想知道如何在Gradle中向特定的ProductFraile和buildType添加依赖关系。例如,我有ProductFlavel和构建类型,如何添加对任务的依赖项? 或: 这里没有错误,但任务是针对每一种风格和构建类型执行的,非常混乱。

  • 我是新的gradle和想使用gradle android插件的口味,构建类型和自定义源集。使用flavors和buildtypes构建works find。不幸的是,我有一个遗留的项目目录结构,所以我必须为buildTypes定制res目录。 buildtype的附加资源(基本上是一些字符串配置值)似乎不会合并到构建中,也不会替换主树中的资源键。 以前有人问过这个问题,我知道有Gradle pro

  • coming soon。。。。= = 对于Gradle的task(DefaultTask,JavaCompile,Copy,Zip),请参考Gradle文档。

  • 这个问题类似于使一个源集依赖于另一个源集 这不起作用,因为您不能直接将源集添加为依赖项。建议的方法是: 但是这在eclipse中不能正常工作,因为当我清理gradle build文件夹时,eclipse不能再编译了,因为它依赖于gradle build。此外,如果我更改了主代码,我必须在gradle中重新构建项目,以便更改在Eclipse中生效。 如何正确声明依赖项? 这个 适用于主源代码,但由于

  • 我正在编写使用webendpoint在junit上运行测试的web服务,因此我必须将所有测试保存在源代码中。问题是,我想要从IDEA和命令行直接运行测试,而最后一个我已经塞住了。 如何通过“Gradle Test”在sources文件夹(src/main/java)中运行测试?我和gradle不是一家人,但我试着用 但是它打破了使用IDEA的项目导入,My2016.1.1有时不能创建两个具有相同内

  • 我在Gradle.properties中使用sourceCompatibility=1.7,Gradle JVM(设置,Gradle,Intellij IDEA)是1.8.0_171和 在大楼里。 当我运行构建任务(tasks->build->build Intellij IDEA)时,我在compileJava任务期间得到“错误:不兼容类型:推断的类型不符合等式约束”。 如果我将Gradle J