如何使用 Gradle API 获取 Android Studio main SourceSet?

How to get Android Studio main SourceSet with Gradle API?

我正在为 Android 开发一个 gradle 插件 Studio.Here 是我的问题 我如何获得 Android Studio main SourceSet Gradle API?

我想用 java 源目录做一些复制工作。 在问这个问题之前,我发现了一些有用但不起作用的东西。

SourceSet main = project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME)

我收到此错误消息
Caused by: org.gradle.api.UnknownDomainObjectException: SourceSet with name 'main' not found.

首先,该代码不起作用,因为它仅适用于带有 java gradle 插件的 java 项目。所以我用谷歌搜索并找到了解决方法。 这是我的代码。

project.afterEvaluate {
    ...
    def sets;
    if (Utils.is140orAbove()) {
        sets = project.android.sourceSets;
    } else {
        sets = project.android.sourceSetsContainer;
    }
    sets.all { AndroidSourceSet sourceSet ->
        if(sourceSet.name.startsWith("main"))
            for(File file:sourceSet.java.getSrcDirs())
                if(file.exists()) {
                    mainSource = file;
                    break;
                }
    }
    ...
}

我的代码不是beautiful.Waiting为了更好的答案。

project.android.sourceSets.main

有效。请注意,它的类型为 AndroidSourceSet,而不是 SourceSet。它具有基本相同的 API,但具有 Android 相关的添加。

android.sourceSets.main.java.getSrcDirs()[0].path

这适用于 Android Studio 3.1 及更高版本