我一直在努力设置一个 gradle 任务来为我的 Android 库生成 Javadoc,但是当存在对其他库的外部依赖时,文档生成失败。这似乎是一项常见的任务,但不知何故似乎没有一个简单的解决方案,例如 this answer将显示(手动重新生成 exploded-aar 有点荒谬,而且在 Android Studio 3.0 上甚至是 that doesn't work anymore 由于新的依赖指令)。
但是,我注意到通过 Android Studio GUI(工具菜单)生成 Javadoc 工作得很好——解决了对其他库的依赖等问题。那么这是如何工作的——这个菜单是否不使用 gradle 任务来生成 Javadoc?
由于我需要使用 gradle 生成 Javadoc 作为 CI 的一部分,我发现非常令人沮丧的是没有记录在案的方法让它工作,但有一种方法可以通过菜单工作。 Android Studio Tools -> Generate Javadoc 菜单不是依次使用 gradle 任务吗?由于依赖项与 gradle 文件一起列出,并且 Javadoc 工具菜单显然能够解决这些依赖项 - 它是如何实现的?它如何获取嵌入在相关 aar 库等中的 jars?它如何独立使用而不是通过 Android Studio GUI 使用?
最佳答案
也许您已经找到了解决方案。以防万一,下面是我如何为我的 Jenkins CI 生成 API 文档。
task generateApiDoc() {
group "reporting"
description "Generates Javadoc."
}
android.libraryVariants.all { variant ->
// Only consider release
if (variant.buildType.name == "release") {
def task = project.tasks.create("generate${variant.name.capitalize()}Javadoc", Javadoc) {
group "ApiDoc"
description "Generates Javadoc for $variant.name."
// Source files from the variant
source = variant.javaCompiler.source
// Classpath from the variant + android.jar
classpath = variant.javaCompiler.classpath + files(prj.android.getBootClasspath()) + files("$buildDir/intermediates/classes/release")
/* add the excluded packages */
exclude "**/R**"
exclude "**/BuildConfig*"
options.windowTitle = "My Library"
options.memberLevel = JavadocMemberLevel.PROTECTED
options.linkSource false
options.author = true
//options.links("http://docs.oracle.com/javase/7/docs/api/", "http://d.android.com/reference");
failOnError false
}
task.dependsOn assemble
generateApiDoc.dependsOn task
}
}
然后运行下面的 gradle 命令来获取你的 api 文档来代替 "$buildDir/docs"
。
./gradlew assembleRelease
./gradlew generateApiDoc
为 Gradle 插件 3.4.1 编辑
android.libraryVariants.all { variant ->
def task = project.tasks.create("generate${variant.name.capitalize()}Javadoc", Javadoc) {
title "API Documentation (${project.android.defaultConfig.versionName})"
group "ApiDoc"
description "Generates Javadoc for $variant.name."
// Source files from the variant
source = variant.sourceSets.collect { it.java.sourceFiles }.inject { m, i -> m + i }
// To fix issue: Error: Can not create variant 'android-lint' after configuration ': library: debugRuntimeElements' has been resolved
doFirst {
classpath = project.files(variant.javaCompileProvider.get().classpath.files,
project.android.getBootClasspath())
}
if (JavaVersion.current().isJava8Compatible()) {
options.addStringOption('Xdoclint:none', '-quiet')
}
exclude "**/R"
exclude "**/R.**"
exclude "**/R\$**"
exclude "**/BuildConfig*"
if (JavaVersion.current().isJava8Compatible()) {
options.addStringOption('Xdoclint:none', '-quiet')
}
options.windowTitle = "API Documentation (${project.android.defaultConfig.versionName})"
options.memberLevel = JavadocMemberLevel.PROTECTED
options.linkSource false
options.author = false
failOnError true
}
task.dependsOn "assemble${variant.name.capitalize()}"
generateApiDoc.dependsOn task
}
关于Android studio/Gradle javadoc 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46879499/