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

刘奔康*_*刘奔康 5 gradle android-gradle-plugin gradle-plugin

我正在为 Android Studio 开发一个 gradle 插件。这是我的问题如何使用 Gradle API 获取 Android Studio 主 SourceSet?

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

SourceSet main = project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME)
Run Code Online (Sandbox Code Playgroud)

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

刘奔康*_*刘奔康 2

首先,该代码不起作用,因为它仅适用于带有 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;
                }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的代码并不漂亮。等待更好的答案。