android - 如何从 gradle 插件将文件夹添加到 android 项目源集中

标签 android gradle plugins gradle-plugin

我正在为 gradle 编写一个插件,为 Android 项目生成一些类。

我在项目 src/gen/java 文件夹中生成这些类,因为我不希望它们与真正的源代码混合。

从项目的 build.gradle 配置中,我可以添加它以使构建工具看到生成的类:

android {
    sourceSets {
        main {
            java {
                srcDir 'src/gen/java'
            }
        }
    }
} 

问题是我希望我的插件自动设置它。从我的插件中,我尝试了以下操作:

公共(public)类 MyPlugin 实现插件 {

@Override
public void apply(Project project) {
    // ... 
    // TEST 1 : doesnt work
    project.android.sourceSets.main.java.srcDirs += "src/gen/java"

    // TEST 2 : doesnt work
    project.android.sourceSets {
        main {
            java {
                srcDir 'src/gen/java'
            }
        }
    }
}

每次插件都可以运行,但是编译器仍然看不到该文件夹​​,并且在编译时找不到生成的类。有人知道从插件中执行此操作的另一种方法吗?

最佳答案

如果您将文件移动到应用模块的 build/generated/sources 目录,插件当前正在为您生成代码,那么您不必将其添加到源集中。

你也可以看看SQLDelight这也是一个 gradle 插件,可以生成代码或 AutoValue

编辑:

您还需要调用 registerJavaGeneratingTask在将生成源代码的 BuildVariant 上

关于android - 如何从 gradle 插件将文件夹添加到 android 项目源集中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40485449/

相关文章:

android - 用刀柄注入(inject) viewModel

android - 如何在 Android 自定义键盘中添加 shift 键?

Android 控制台错误 - 指定的 Activity 不存在!获取启动器 Activity

android - Android-设置Google Play服务和Firebase-Gradle构建错误

javascript - 类似于 Facebook 评论框的富文本框

android - phonegap 3.3.0 中的本地通知

android - 如何检查应用程序是否在所有设备上兼容?

java - gradle + java项目中的根模块可以包含源文件吗?

gradle - 如何从已发布的jar-s中删除SuppressFBWarnings批注?

javascript - cocoa插件调用网页javascript