// Copyright (C) 2017 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. class CombinedJavadocPlugin implements Plugin { static final String TASK_NAME = "generateCombinedJavadoc" @Override void apply(Project project) { project.gradle.projectsEvaluated { Set libraryModules = getLibraryModules(project) if (!libraryModules.isEmpty()) { String sdkDirectory = getSdkDirectory(libraryModules) project.task(TASK_NAME, type: Javadoc) { description = "Generates combined Javadoc." title = "ExoPlayer library" source = libraryModules.generateJavadoc.source classpath = project.files(libraryModules.generateJavadoc.classpath) destinationDir = project.file("$project.buildDir/docs/javadoc") options { links "http://docs.oracle.com/javase/7/docs/api/" linksOffline "https://developer.android.com/reference", "${sdkDirectory}/docs/reference" encoding = "UTF-8" } exclude "**/BuildConfig.java" exclude "**/R.java" destinationDir project.file("$project.buildDir/docs/javadoc") doLast { libraryModules.each { libraryModule -> project.copy { from "${libraryModule.projectDir}/src/main/javadoc" into "${project.buildDir}/docs/javadoc" } } } } } } } // Returns Android library modules that declare a generateJavadoc task. private Set getLibraryModules(Project project) { project.subprojects.findAll { it.plugins.findPlugin("com.android.library") && it.tasks.findByName("generateJavadoc") } } // Returns the Android SDK directory given a set of Android library modules. private String getSdkDirectory(Set libraryModules) { // We can retrieve the Android SDK directory from any module. return libraryModules.iterator().next().android.sdkDirectory } } apply plugin: CombinedJavadocPlugin