50

新しい Gradle ビルド システムを使用して Android プロジェクトの JavaDoc を生成するにはどうすればよいですか?

これが私が思いついたものですが、うまくいきません。

task generateJavadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    ext.cp = android.libraryVariants.collect { variant ->
        variant.javaCompile.classpath.files
    }
    classpath = files(ext.cp) 
}

主な問題は、クラスパスで適切な android.jar を取得できないため、JavaDocs のリンクの一部が解決されないことです。クラスパスで必要なすべての jar を取得する方法を見つける必要があります。

私が採用したアプローチのもう 1 つの問題は、1 つを選択するのではなく、すべてのビルド バリアントのクラスパスを収集することです。

4

9 に答える 9

41

Android gradle プラグイン 1.1.2+ (com.android.tools.build:gradle:1.1.2+) の場合

libraryVariants - もう機能しません

使用する:

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    destinationDir = file("../javadoc/")
    failOnError false
}

destinationDir = file("../javadoc/") - プロジェクト ディレクトリのルートにある javadoc を見つけます (このようにして、jenkins javadoc プラグインはそれを見つけて、特別なドキュメント パネルに表示できます)

failOnError false - jenkins でのビルドの失敗を引き起こす可能性のある警告を抑制する場合

于 2015-04-01T16:44:29.470 に答える
24

Gradle 1.11 - Gradle プラグイン0.10.0

android.plugin.sdkDirectoryで置き換えますandroid.sdkDirectory

android.libraryVariants.all { variant ->
    task("generate${variant.name}Javadoc", type: Javadoc) {
        description "Generates Javadoc for $variant.name."
        source = variant.javaCompile.source
        ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }
}
于 2014-05-15T08:15:39.127 に答える
11

私が落ち着いた解決策は次のとおりです。

android.libraryVariants.all { variant ->

    task("generate${variant.name}Javadoc", type: Javadoc) {
        description "Generates Javadoc for $variant.name."
        source = variant.javaCompile.source
        ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
    }

}

Xavier Ducrohet は、adt-dev グループ ( https://groups.google.com/forum/#!searchin/adt-dev/javadoc/adt-dev/seRizEn8ICA/bafEvUl6mzsJ ) でこれを行う方法であることを確認しました (注意事項あり)。 .

于 2013-10-09T15:01:32.620 に答える
9

android gradle tools 1.10.+ では、android SDK dir の取得が以前とは異なります。以下を変更する必要があります。

android.sdkDirectory 

それ以外の

android.plugin.sdkDirectory

これは問題の完全な解決策です:

android.applicationVariants.all { variant ->

    task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
        title = "Documentation for Android $android.defaultConfig.versionName b$android.defaultConfig.versionCode"
        destinationDir = new File("${project.getProjectDir()}/doc/compiled/", variant.baseName)
        source = variant.javaCompile.source

        ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)

        description "Generates Javadoc for $variant.name."

        options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PRIVATE
        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://developer.android.com/reference/");
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }
}
于 2014-05-12T08:27:00.190 に答える
8

Android jar はプロパティにあるようですandroid.plugin.runtimeJarList。ただし、どこにも文書化されていないため、いつでも壊れる可能性があります。

ビルドバリアント全体で機能するようにソリューションを改良しました。

android.applicationVariants.all { variant ->
    def name = variant.name
    task "javadoc$name"(type: Javadoc) {
        description = "Generates javadoc for build $name"
        destinationDir = new File(destinationDir, variant.baseName)
        source = files(variant.javaCompile.source)
        classpath = files(android.plugin.runtimeJarList, variant.javaCompile.classpath)
        exclude '**/R.html', '**/R.*.html'
    }
}

製品のフレーバーに依存する可能性があるため、メイン ブランチだけで javadoc を実行するのは一般的に意味がありません。デバッグとリリースでさえ、いくつかの違いがある可能性があります。もちろん、使用するデフォルトのバリアントを選択することもできます。したがって、次のようなことができます。

task javadoc(dependsOn: javadocDebug)
于 2013-08-21T17:02:25.117 に答える
4

2014年に機能していた更新バージョンを次に示します。

android.libraryVariants.all { variant ->
    def name = variant.buildType.name

    if (name.equalsIgnoreCase("debug")) {
        return; // Skip debug builds.
    }
    task("javadoc${variant.name.capitalize()}", type: Javadoc) {
        description "Generates Javadoc for $variant.name."
        source = variant.javaCompile.source
        ext.androidJar = files(plugins.findPlugin("com.android.library").getBootClasspath())
        classpath = files(variant.javaCompile.classpath.files) + ext.androidJar
        exclude '**/internal/**'
        failOnError false
    }

    task("bundleJavadoc${variant.name.capitalize()}", type: Jar) {
        description "Bundles Javadoc into zip for $variant.name."
        classifier = "javadoc"
        from tasks["javadoc${variant.name.capitalize()}"]
    }
}
于 2014-08-12T13:32:25.130 に答える
3

そのためのオープンソースプラグインを作成しました。GitHub リポジトリ

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "gradle.plugin.com.vanniktech:gradle-android-javadoc-plugin:0.2.1"
    }
}

この行をbuild.gradleに追加します

apply plugin: "com.vanniktech.android.javadoc"

次に、次のいずれかを実行します。

./gradlew generateDebugJavadoc
./gradlew generateReleaseJavadoc

Java のドキュメントは次の場所にあります。module/javaDoc/

于 2015-10-04T16:03:47.567 に答える
2

製品のフレーバーが異なる場合、このソリューションは Gradle プラグイン 1.3.1 で機能することがわかりました。

これにより、Gradle タスクが作成され、製品のフレーバーとビルド タイプごとに Javadoc が生成されます。たとえば、モジュール名がappproductiondev製品フレーバーがdebugandreleaseビルド タイプの場合、次の Gradle タスクがあります。

  • :app:generateDevDebugJavadoc
  • :app:generateDevReleaseJavadoc
  • :app:generateProductionDebugJavadoc
  • :app:generateProductionReleaseJavadoc

app/build.gradle

android {

    // ...

    applicationVariants.all { variant ->
        // create tasks to generate Javadocs
        task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
            source = variant.javaCompile.source
            classpath += project.files(android.getBootClasspath().join(File.pathSeparator))

            // choose the destination that works best for you here
            // I chose this particular directory because Jenkins pulls reports 
            // from this directory already if you need to have the output 
            // folder be parameterized for the build variant, use
            // "build/outputs/docs/javadoc-${variant.name}/" instead and it'll 
            // be in `javadoc-productionRelease` for example
            destinationDir = file("build/outputs/docs/javadoc/")

            // the name that will appear in the docs
            title = rootProject.name

            // you will probably get errors from using the @annotations and 
            // the support library, so just turn off failing for errors
            failOnError false    
        }
    }

    // ...

}
于 2015-09-15T20:29:34.910 に答える