我目前正在发现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文件。
求求你的帮助!非常感谢。
答案 0 :(得分:2)
经过数小时研究Gradle和Groovy如何工作,我找到的最佳方式:
exclude {
it.file.path.contains('aidl')
}
然而,我仍然不满意。我觉得使用指向AIDL生成的Java文件的variant.aidlCompile.sourceOutputDir
可以做一些不那么残酷的事情。但我无法将Closure中的迭代元素与此File
或FileTree
或我给它的任何形状进行比较......
修改强>
经过进一步研究,另一种方法是使用支持@hide
标记的自定义Doclet(如Doclava)隐藏AIDL中定义的接口。我更喜欢这种方法,因为它在Javadoc生成期间不会导致错误。