Android 工作室 / Gradle javadoc 任务
Android studio / Gradle javadoc task
我一直在努力设置一个 gradle 任务来为我的 Android 库生成 Javadoc,但是当存在对其他库的外部依赖时,文档生成失败。这似乎是一项常见的任务,但不知何故似乎没有一个简单的解决方案,例如 will reveal (re-generating exploded-aar manually is a bit absurd, and also, on Android Studio 3.0 even 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 使用?
生成 java 样式文档的工具称为 javadoc
,它安装在每个 JDK 中。您可以配置要包含哪些 类 或包,应排除哪些包以及许多其他选项。在 JDK 可用的终端中键入 javadoc
,您就会明白。另见 https://docs.oracle.com/javase/9/javadoc/javadoc.htm#JSJAV-GUID-7A344353-3BBF-45C4-8B28-15025DDCC643
获得最佳配置后,您可以在 CI 中包含一个 javadoc 步骤。
也许你已经找到了解决办法。以防万一,下面是我如何为我的 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
}
我使用一个 gradle 任务,它只执行一个 bash 脚本文件,使用一个(相当长的)javadoc 命令。
您可以做的是 运行 从 Android Studio 生成 Javadoc 一次,然后从 Studio 日志中复制已执行的 javadoc 命令以及所有正确的参数,并自动执行gradle.
中的相同命令
我一直在努力设置一个 gradle 任务来为我的 Android 库生成 Javadoc,但是当存在对其他库的外部依赖时,文档生成失败。这似乎是一项常见的任务,但不知何故似乎没有一个简单的解决方案,例如
但是,我注意到通过 Android Studio GUI(工具菜单)生成 Javadoc 工作得很好 - 解决了对其他库的依赖等问题。那么这是如何工作的 - 这个菜单不使用gradle 生成 Javadoc 的任务?
因为我需要使用 gradle 生成 Javadoc 作为 CI 的一部分,我发现非常令人沮丧的是没有记录在案的方法让它工作,虽然有一种方法可以通过菜单。 Android Studio Tools -> Generate Javadoc 菜单不使用 gradle 任务吗?由于依赖项与 gradle 文件一起列出,并且 Javadoc 工具菜单显然能够解决这些依赖项 - 它是如何实现的?它如何获取嵌入在相关 aar 库等中的 jars?它如何独立使用而不是通过 Android Studio GUI 使用?
生成 java 样式文档的工具称为 javadoc
,它安装在每个 JDK 中。您可以配置要包含哪些 类 或包,应排除哪些包以及许多其他选项。在 JDK 可用的终端中键入 javadoc
,您就会明白。另见 https://docs.oracle.com/javase/9/javadoc/javadoc.htm#JSJAV-GUID-7A344353-3BBF-45C4-8B28-15025DDCC643
获得最佳配置后,您可以在 CI 中包含一个 javadoc 步骤。
也许你已经找到了解决办法。以防万一,下面是我如何为我的 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
}
我使用一个 gradle 任务,它只执行一个 bash 脚本文件,使用一个(相当长的)javadoc 命令。
您可以做的是 运行 从 Android Studio 生成 Javadoc 一次,然后从 Studio 日志中复制已执行的 javadoc 命令以及所有正确的参数,并自动执行gradle.
中的相同命令