51 votes

Générer la Javadoc avec Android plugin Gradle

Comment puis-je générer la documentation Javadoc pour un projet Android en utilisant le nouveau système de build Gradle?

Voici ce que j'ai mais ça ne fonctionne pas.

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

Le principal problème est que je n'ai pas le approprié android.jar sur le chemin de la classe de sorte que certaines des liens de la documentation Javadoc ne sont pas résolus. Je dois trouver un moyen pour obtenir toutes les bocaux sur le chemin de la classe.

Un autre problème avec l'approche que j'ai adoptée est-il recueille les chemins de classe pour tous les construire variantes, plutôt que de choisir un.

24voto

flav Points 370

Gradle 1.11 - Plugin Gradle 0.10.0

Remplacer android.plugin.sdkDirectory par 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'
    }
}

12voto

Matt Accola Points 1163

La solution que j'ai fini par régler sur est comme suit:

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 confirmé ce est la façon de le faire (avec des réserves) sur l'adt-dev groupe, https://groups.google.com/forum/#!searchin/adt-dev/javadoc/adt-dev/seRizEn8ICA/bafEvUl6mzsJ.

9voto

Julian Liebl Points 395

Avec android gradle outils 1.10.+ obtenir le SDK android dir est différente de celle d'avant. Vous devez modifier les éléments suivants:

android.sdkDirectory 

au lieu de

android.plugin.sdkDirectory

C'est la solution complète du problème:

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/reference/");
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }
}

8voto

thatsmydoing Points 639

Le android pots semblent être dans le bien, en android.plugin.runtimeJarList. Ce n'est pas documentée nulle part, donc il peut casser à tout moment.

J'ai affiné votre solution pour travailler dans les construire variantes:

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'
    }
}

Généralement, il n'est pas judicieux de faire une javadoc sur la branche principale) car vous pouvez compter sur certaines choses du produit saveurs. Même debug vs libération pourrait avoir quelques différences. Vous pourriez bien sûr, il suffit de choisir une variante par défaut à utiliser. Donc, vous pourriez faire quelque chose comme,

task javadoc(dependsOn: javadocDebug)

4voto

volkersfreunde Points 120

Voici une version mise à jour qui fonctionne avec la dernière version:

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()}"]
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X