如何将生成的代码从构建文件夹添加到 Gradle Android 库插件中的路径
How to add a generated code from build folder to the path in a Gradle Android Library plugin
我有一个 Android 库模块,在 build.gradle.kts
脚本中我做了一个插件 class,在我正在做的插件的应用方法中:
import com.android.build.gradle.LibraryExtension
val libExtension = project.extensions.findByType(LibraryExtension::class.java)!!
libExtension.libraryVariants.all {
val variantName = this.name
val sourceDir = "${project.buildDir}/generated/my-plugin/$variantName"
libExtension.sourceSets[variantName].kotlin.srcDir(sourceDir)
}
(其中 variantName 是“调试”或“发布”)
我认为此代码会将文件夹添加为源文件夹,但它不会(因此文件夹中的 kotlin class 不可用)。
在我的 android 库模块的构建文件夹下:
我的文件夹(不工作/不蓝色):
构建目录中正确工作的文件夹,由另一个插件创建:
好的,所以问题中的代码有效,我没那么疯狂><.
当我将它拆分到演示中时,它显示它可以正常工作。
这是不工作的代码:
import com.android.build.gradle.LibraryExtension
val libExtension = project.extensions.findByType(LibraryExtension::class.java)!!
libExtension.libraryVariants.all {
val variantName = this.name
val sourceDir = "${project.buildDir}/generated/my-plugin/$variantName"
// This task generates some code and puts it in the sourceDir
val tp = project.tasks.register<MyTask>("${variantName}MyTask")
tp.get().doLast {
libExtension.sourceSets[variantName].kotlin.srcDir(sourceDir)
}
}
我假设“doLast”是阻止它在 IDE 中工作的原因。
我的猜测是,如果我先生成文件然后将文件夹设置为源集,则 IDE 不会被触发。但是,如果我先将其设置为源集,然后生成文件,它会起作用吗?
无论如何把问题留在这里,因为我发现很难找到任何人谈论这个。
我有一个 Android 库模块,在 build.gradle.kts
脚本中我做了一个插件 class,在我正在做的插件的应用方法中:
import com.android.build.gradle.LibraryExtension
val libExtension = project.extensions.findByType(LibraryExtension::class.java)!!
libExtension.libraryVariants.all {
val variantName = this.name
val sourceDir = "${project.buildDir}/generated/my-plugin/$variantName"
libExtension.sourceSets[variantName].kotlin.srcDir(sourceDir)
}
(其中 variantName 是“调试”或“发布”)
我认为此代码会将文件夹添加为源文件夹,但它不会(因此文件夹中的 kotlin class 不可用)。
在我的 android 库模块的构建文件夹下:
我的文件夹(不工作/不蓝色):
构建目录中正确工作的文件夹,由另一个插件创建:
好的,所以问题中的代码有效,我没那么疯狂><.
当我将它拆分到演示中时,它显示它可以正常工作。
这是不工作的代码:
import com.android.build.gradle.LibraryExtension
val libExtension = project.extensions.findByType(LibraryExtension::class.java)!!
libExtension.libraryVariants.all {
val variantName = this.name
val sourceDir = "${project.buildDir}/generated/my-plugin/$variantName"
// This task generates some code and puts it in the sourceDir
val tp = project.tasks.register<MyTask>("${variantName}MyTask")
tp.get().doLast {
libExtension.sourceSets[variantName].kotlin.srcDir(sourceDir)
}
}
我假设“doLast”是阻止它在 IDE 中工作的原因。 我的猜测是,如果我先生成文件然后将文件夹设置为源集,则 IDE 不会被触发。但是,如果我先将其设置为源集,然后生成文件,它会起作用吗?
无论如何把问题留在这里,因为我发现很难找到任何人谈论这个。