Android Studio / Gradle Javadoc 任务

17
我一直努力设置一个Gradle任务来为我的Android库生成Javadocs,但当存在对其他库的外部依赖时,文档生成失败。这似乎是一个常见的任务,但不知何故,似乎没有一个简单的解决方案,例如这个答案会揭示(手动重新生成了exploded-aar有点荒谬,而且在Android Studio 3.0上,甚至 这也不再起作用由于新的依赖指令)。
然而,我注意到通过Android Studio GUI(工具菜单)生成Javadoc非常顺利-解析到其他库的依赖项等等。那么这是如何工作的-这个菜单不使用Gradle任务来生成Javadoc吗?
由于我需要使用Gradle作为CI的一部分生成Javadoc,我觉得非常沮丧,因为没有文件记录的方法可以让它起作用,而通过菜单可以有效解决。难道Android Studio的工具->生成Javadoc菜单反过来不使用Gradle任务吗?由于依赖项在Gradle文件中列出,而Javadoc工具菜单显然能够解析这些依赖项-它是如何实现的?它如何使用源于依赖AAR库中的Jars等? 如何不通过Android Studio GUI单独使用它?
3个回答

7
也许你已经找到了解决方案。如果还没有的话,下面是我为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
}


2
我终于开始尝试这个,它似乎完美地运行了。非常非常感谢你。 - JHH
很高兴听到它有所帮助。 - shizhen
在2020年,感谢您再次更新Gradle 3.4.1,并注意到原始答案已经失效。 :) - JHH
这个任务中if (JavaVersion.current().isJava8Compatible())块被重复了。 - JHH
抱歉,不清楚这些生成的文件放在哪里。 - Johann

1
我使用一个Gradle任务,只需执行一个Bash脚本文件,其中包含一个(相当长的)Javadoc命令。
你可以在Android Studio中运行一次Javadoc生成,然后从Studio日志中复制已执行的Javadoc命令,带有所有正确的参数,并自动执行相同的命令在你的Gradle中。

-2

1
作为一名有20年经验的Java程序员,我非常了解javadoc工具。正如问题所描述的那样,问题在于通过gradle生成脚本来生成javadoc,这意味着在生成过程中需要解决gradle依赖关系。仅仅依靠javadoc工具本身意味着必须手动创建一个从gradle缓存中获取的大量类路径列表。我只想调用一个gradle任务来为我完成这个任务,考虑到gradle已经为大多数其他事情提供了任务,这似乎是一个合理的任务。 - JHH
1
明白了,祝你好运! - Eddie Lopez
我是如何在JitPack上为一个库生成javadocs的:https://github.com/jitpack/android-example/blob/master/library/build.gradle - Eddie Lopez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接