使用Gradle从Javadoc任务中排除aidl文件

时间:2015-01-28 20:12:29

标签: android gradle javadoc aidl

我目前正在发现Android Studio和Gradle,并将项目的所有构建链从bash脚本迁移到Gradle配置。它最终可能会很棒,但同时我也在挣扎。

我现在想做的很简单。我有一个标准规则来从我的源代码生成Javadoc(我从http://snowdream.github.io/blog/android/2013/11/01/how-to-generate-javadocs-with-android-gradle-plugin/获取了这个代码段):

android.libraryVariants.all { variant ->
    task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
        source = variant.javaCompile.source
        def androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"

        classpath = files(variant.javaCompile.classpath.files, androidJar)
        options {
            links "http://docs.oracle.com/javase/7/docs/api/"
            linksOffline "http://d.android.com/reference","${android.sdkDirectory}/docs/reference"
        }
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }
}

但是我的项目还包含AIDL文件和我不希望这些aidl文件(也不是从它们生成的.java文件)包含在Javadoc 中。

我尝试了规则:

exclude "**/$buildDir/**"

...我尝试了其他一千个,但没有一个工作,我的接口和存根被处理成HTML文件。

求求你的帮助!非常感谢。

1 个答案:

答案 0 :(得分:2)

经过数小时研究Gradle和Groovy如何工作,我找到的最佳方式

exclude {
  it.file.path.contains('aidl')
}

然而,我仍然不满意。我觉得使用指向AIDL生成的Java文件的variant.aidlCompile.sourceOutputDir可以做一些不那么残酷的事情。但我无法将Closure中的迭代元素与此FileFileTree或我给它的任何形状进行比较......

修改

经过进一步研究,另一种方法是使用支持@hide标记的自定义Doclet(如Doclava)隐藏AIDL中定义的接口。我更喜欢这种方法,因为它在Javadoc生成期间不会导致错误。