Android studio/Gradle javadoc 任务

标签 android android-studio gradle android-gradle-plugin javadoc

我一直在努力设置一个 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/

相关文章:

android - 在 JNI 文件夹中构建 native 库?

Android Studio 模拟器错误 "The emulator process for AVD was killed"

spring-boot - 使用 bootWar 设置事件 Spring 配置文件

kotlin - Kotlin类的Gradle集成测试任务

android - 如何在Android中有条件地编译JAR?

android - Phonegap/Android 中的 Materialise 图标不起作用

android - Android应用程序是否可以与C语言中的非Android应用程序共享UID

java - 应用程序在测试设备上调试但在发布 apk 时运行良好,它没有从 firebase 获取 post.class 变量

android - OpenCV - NDK 更新后对 'cv::CascadeClassifier::detectMultiScale()' 的 undefined reference

android - 为我的项目获取gradle错误多个dex文件定义了Lcom/google/android/gms/common/api/zze