gpt4 book ai didi

android - 添加以在 afterEvaluate 中构建变体源集

转载 作者:行者123 更新时间:2023-11-30 01:15:32 26 4
gpt4 key购买 nike

我正在尝试创建一个 gradle 插件,为特定变体生成源代码。这些生成任务的输出目录需要添加到相应变体的源集中。

目前,我在 afterEvaluate block 中执行此操作(为简单起见,包含在应用程序的 build.gradle 中):

android {
...
productFlavors {
foo {}
bar {}
}
}

afterEvaluate {
android.sourceSets.each { sourceSet ->
sourceSet.java.srcDirs += new File(project.buildDir, "generated/source/mygeneratedsource/${sourceSet.name}")
}
}

我的目录结构最终是这样的(为简洁起见,使用默认包):

app
\--build
\--generated
\--source
\--mygeneratedsource
\--foo
\--GeneratedClass.java
\--bar
\--GeneratedClass.java
\--src
\--main
\--java
\--MyApp.java

Android Studio 似乎正在将新目录作为有效的特定于变体的源目录(我可以从 MyApp 中引用 GeneratedClass),但如果我尝试编译,我会得到:

error: cannot find symbol GeneratedClass

有谁知道为什么 AS 可以解析符号,但在编译过程中却失败了?

最佳答案

我的理解是源是在评估期间在编译器上设置的,因此在评估后改变 sourceSets 不会影响编译。幸运的是,对于生成的源代码,Android 构建系统提供了一些方便的方法,registerJavaGeneratingTask它是资源变体 (registerResGeneratingTask)。您可以使用它们来注册生成的类文件夹,然后插件会将它们包含在编译路径中。

如果这些源不是作为任务的结果生成的,您可以只创建一个虚拟任务,例如project.task("register${variant.name.capitalize()}GeneratedSources") 并将该任务注册为具有适当来源的 java 生成任务,它应该仍然有效。

关于android - 添加以在 afterEvaluate 中构建变体源集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37916033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com