curioushikhov curioushikhov - 4 months ago 51x
Android Question

How to generate javadoc for android library when it has dependencies which are also aar libraries?

I have android library project which depends on other android library projects. I need to generate javadoc for library but it fails because gradle puts to javadoc classpath path to .aar locations but javadoc expects .jar files.

simplified gradle file:

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"

configurations {

defaultConfig {
minSdkVersion 7
targetSdkVersion 23
versionCode 1
versionName "0.1.0"

dependencies {
compile ''
compile ''
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.annimon:stream:1.0.7'
javadocDeps ''
javadocDeps 'com.nineoldandroids:library:2.4.0'
javadocDeps ''

task sourcesJar(type: Jar) {
classifier = 'sources'

task javadoc(type: Javadoc, dependsOn: explodeAars) {
source =
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 solutions possible:

1) somehow to add to the classpath path classes.jar from every aar library it depends build/intermidiates/exploded-aar/library/version/jars/classes.jar
I don't know how to include these paths in javadoc task.

2) manually unpack classes.jar from aar file and add them to classpath of javadoc task

3) very dirty hack - hardcoded paths to library - but I think this is so WRONG.

How to achieve 1 or 2 with gradle dsl?

rve rve

To add the JARs from the AARs you can add the following doFirst to the javadoc task:

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

It will add all .jar files from all the AARs to the javadoc classpath. (option 1 from your proposed solutions)