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:
- Gradle, Javadoc y la documentación de Android
- Eclipse no tiene java doc para mostrar información sobre clases y métodos. Cómo adjuntar esos? Androide
- Documentación multilingüe de Android Sdk
- ¿Por qué mi fuente de SDK de Android no está completa?
- Cómo adjuntar javadoc al archivo .aar personalizado en android studio?
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?
- Generar Android Javadoc con Ant
- La documentación de Kotlin no admite etiquetas como '<p>' well
- Cómo generar android estilo javadocs?
- ¿Cómo crear JavaDoc usando Android Studio sin R y BuildConfig?
- Forma correcta de excluir R.java de javadoc usando gradle
- Cualquier forma de incrustar javadoc en un tarro
- Gradle excluye R.java en Android Javadocs cuando las clases internas dependen de R.java
- Gradle Javadoc tarea sin advertencias
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() }
- Activar la animación de salida predeterminada de la actividad
- Crear varios menús contextuales en una actividad