Cómo generar javadoc para la biblioteca de Android cuando tiene dependencias que también son bibliotecas aar?

Tengo el proyecto de la biblioteca de androide que depende de otros proyectos de la biblioteca del androide. Necesito generar javadoc para la biblioteca, pero falla porque gradle pone a javadoc classpath ruta a ubicaciones .aar pero javadoc espera archivos .jar.

Archivo gradle simplificado:

android { compileSdkVersion 23 buildToolsVersion "23.0.2" configurations { javadocDeps } defaultConfig { minSdkVersion 7 targetSdkVersion 23 versionCode 1 versionName "0.1.0" } } dependencies { compile 'com.android.support:support-v4:23.2.0' compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.nineoldandroids:library:2.4.0' compile 'com.annimon:stream:1.0.7' javadocDeps 'com.android.support:support-annotations:23.2.0' javadocDeps 'com.nineoldandroids:library:2.4.0' javadocDeps 'com.android.support:support-v4:23.2.0' } task sourcesJar(type: Jar) { from android.sourceSets.main.java.srcDirs classifier = 'sources' } task javadoc(type: Javadoc, dependsOn: explodeAars) { source = android.sourceSets.main.java.srcDirs classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) classpath += configurations.javadocDeps } task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from javadoc.destinationDir } artifacts { archives javadocJar archives sourcesJar } 

3 posibles soluciones:

1) de alguna manera para agregar a la ruta de acceso de clase class.jar de cada biblioteca de aar que depende build / intermidiates / exploded-aar / library / version / jars / classes.jar No sé cómo incluir estas rutas en la tarea javadoc.

2) manualmente desempaquetar classes.jar desde el archivo aar y agregarlos a classpath de la tarea javadoc

3) muy sucio hack – hardcoded caminos a la biblioteca – pero creo que esto es tan mal.

¿Cómo lograr 1 o 2 con gradle dsl?

3 Solutions collect form web for “Cómo generar javadoc para la biblioteca de Android cuando tiene dependencias que también son bibliotecas aar?”

Para agregar los JARs de los AAR, puede agregar el siguiente doFirst a la tarea javadoc:

 task javadoc(type: Javadoc) { source = android.sourceSets.main.java.srcDirs } .doFirst { classpath += fileTree(dir: "$buildDir/intermediates/exploded-aar/", include:"**/classes.jar") } 

Se agregará todos los archivos .jar de todos los AARs al classpath javadoc. (Opción 1 de las soluciones propuestas)

La solución de @rve ya está rota en Android Studio 2.3 / Gradle 3.3 ya que el exploded-aar ya no existe (sin alternativa dentro del directorio de compilación).

Si el aar en el que usted confía no es un módulo en su proyecto, primero necesitará extraer el archivo classes.jar antes de referenciarlo en el classpath (básicamente, volver a crear intermediates/exploded-aar manualmente).

Si el aar del que dependes es solo otro módulo en tu proyecto, también puedes hacer que tu tarea javadoc dependa de la tarea de compilación de ese módulo y hacer referencia a los intermediates/classes/release de ese módulo (si haces javadoc depende de assemblyRelease por ejemplo) . Un ejemplo de esa solución: https://github.com/Microsoft/mobile-center-sdk-android/pull/345/files

Realmente deseo alguien viene con una solución mejor sin embargo.

Me las arreglé para automatizar la solución de Guillaume Perrot extrayendo las classes.jar contenidas en cada archivo AAR, y añadiéndolas al classpath de la tarea javadoc.

Parece que funciona para AAR dependencias y módulos AAR en Android Studio 2.3 y Gradle 3.3

 import java.nio.file.Files import java.nio.file.Paths import java.io.FileOutputStream import java.util.zip.ZipFile task javadoc(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += configurations.compile classpath += configurations.provided afterEvaluate { // Wait after evaluation to add the android classpath // to avoid "buildToolsVersion is not specified" error classpath += files(android.getBootClasspath()) // Process AAR dependencies def aarDependencies = classpath.filter { it.name.endsWith('.aar') } classpath -= aarDependencies aarDependencies.each { aar -> // Extract classes.jar from the AAR dependency, and add it to the javadoc classpath def outputPath = "$buildDir/tmp/aarJar/${aar.name.replace('.aar', '.jar')}" classpath += files(outputPath) // Use a task so the actual extraction only happens before the javadoc task is run dependsOn task(name: "extract ${aar.name}").doLast { extractEntry(aar, 'classes.jar', outputPath) } } } } // Utility method to extract only one entry in a zip file private def extractEntry(archive, entryPath, outputPath) { if (!archive.exists()) { throw new GradleException("archive $archive not found") } def zip = new ZipFile(archive) zip.entries().each { if (it.name == entryPath) { def path = Paths.get(outputPath) if (!Files.exists(path)) { Files.createDirectories(path.getParent()) Files.copy(zip.getInputStream(it), path) } } } zip.close() } 
  • Eclipse no tiene java doc para mostrar información sobre clases y métodos. Cómo adjuntar esos? Androide
  • SetContentView (R.layout.Main); Main no se puede resolver o no es un campo
  • Javadoc en Eclipse no reconoce paquetes
  • Cómo adjuntar javadoc o fuentes a jarras en la carpeta libs?
  • La documentación de Kotlin no admite etiquetas como '<p>' well
  • ¿Cómo configuro Java Doc for google drive api para android en Eclipse
  • ¿Cómo exportar la biblioteca AAR con su documentación?
  • Agregue el proyecto de Javadoc para Android con varios módulos de biblioteca
  • Cómo adjuntar una carpeta javadoc local a un proyecto sin una ruta absoluta
  • Gradle excluye R.java en Android Javadocs cuando las clases internas dependen de R.java
  • Doclava - ¿Cómo generar versionado xml?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.