diff --git a/build.gradle b/build.gradle index f1901a1270..49c7d5c22a 100644 --- a/build.gradle +++ b/build.gradle @@ -47,3 +47,5 @@ def getBintrayRepo() { property('publicRepo').toBoolean() return publicRepo ? 'exoplayer' : 'exoplayer-test' } + +apply from: 'javadoc_combined.gradle' diff --git a/extensions/cronet/build.gradle b/extensions/cronet/build.gradle index 13c0c645de..5e3c2ab482 100644 --- a/extensions/cronet/build.gradle +++ b/extensions/cronet/build.gradle @@ -43,4 +43,4 @@ dependencies { ext { javadocTitle = 'Cronet extension' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' diff --git a/extensions/ffmpeg/build.gradle b/extensions/ffmpeg/build.gradle index b89b6deec1..0eddd017a4 100644 --- a/extensions/ffmpeg/build.gradle +++ b/extensions/ffmpeg/build.gradle @@ -36,4 +36,4 @@ dependencies { ext { javadocTitle = 'FFmpeg extension' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' diff --git a/extensions/flac/build.gradle b/extensions/flac/build.gradle index 5ad0654149..4a6b8e0e5a 100644 --- a/extensions/flac/build.gradle +++ b/extensions/flac/build.gradle @@ -37,4 +37,4 @@ dependencies { ext { javadocTitle = 'FLAC extension' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' diff --git a/extensions/gvr/build.gradle b/extensions/gvr/build.gradle index c65be14bd3..f622a73758 100644 --- a/extensions/gvr/build.gradle +++ b/extensions/gvr/build.gradle @@ -31,7 +31,7 @@ dependencies { ext { javadocTitle = 'GVR extension' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' ext { releaseArtifact = 'extension-gvr' diff --git a/extensions/okhttp/build.gradle b/extensions/okhttp/build.gradle index d06a17519e..f47f1a8556 100644 --- a/extensions/okhttp/build.gradle +++ b/extensions/okhttp/build.gradle @@ -38,7 +38,7 @@ dependencies { ext { javadocTitle = 'OkHttp extension' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' ext { releaseArtifact = 'extension-okhttp' diff --git a/extensions/opus/build.gradle b/extensions/opus/build.gradle index dd403d3de4..31d5450fdd 100644 --- a/extensions/opus/build.gradle +++ b/extensions/opus/build.gradle @@ -36,4 +36,4 @@ dependencies { ext { javadocTitle = 'Opus extension' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' diff --git a/extensions/vp9/build.gradle b/extensions/vp9/build.gradle index 95fd1d3e67..5068586a4a 100644 --- a/extensions/vp9/build.gradle +++ b/extensions/vp9/build.gradle @@ -36,4 +36,4 @@ dependencies { ext { javadocTitle = 'VP9 extension' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' diff --git a/javadoc_combined.gradle b/javadoc_combined.gradle new file mode 100644 index 0000000000..1fec48ca25 --- /dev/null +++ b/javadoc_combined.gradle @@ -0,0 +1,68 @@ +// 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 diff --git a/library_javadoc.gradle b/javadoc_library.gradle similarity index 64% rename from library_javadoc.gradle rename to javadoc_library.gradle index ac33bae3dd..ea193e661c 100644 --- a/library_javadoc.gradle +++ b/javadoc_library.gradle @@ -12,18 +12,24 @@ // See the License for the specific language governing permissions and // limitations under the License. android.libraryVariants.all { variant -> - task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) { - description "Generates Javadoc for $variant.name." - title = javadocTitle + def name = variant.buildType.name + if (!name.equals("release")) { + return; // Skip non-release builds. + } + task("generateJavadoc", type: Javadoc) { + description = "Generates Javadoc for the ${javadocTitle}." + title = "ExoPlayer ${javadocTitle}" source = variant.javaCompile.source - classpath = files(variant.javaCompile.classpath.files, project.android.getBootClasspath()) + classpath = files(variant.javaCompile.classpath.files, + project.android.getBootClasspath()) options { links "http://docs.oracle.com/javase/7/docs/api/" - linksOffline "https://developer.android.com/reference","${android.sdkDirectory}/docs/reference" - encoding = 'UTF-8' + linksOffline "https://developer.android.com/reference", + "${android.sdkDirectory}/docs/reference" + encoding = "UTF-8" } - exclude '**/BuildConfig.java' - exclude '**/R.java' + exclude "**/BuildConfig.java" + exclude "**/R.java" doLast { copy { from "src/main/javadoc" diff --git a/library/core/build.gradle b/library/core/build.gradle index a2952e91ff..d2ce499235 100644 --- a/library/core/build.gradle +++ b/library/core/build.gradle @@ -46,9 +46,9 @@ dependencies { } ext { - javadocTitle = 'Core' + javadocTitle = 'Core module' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' ext { releaseArtifact = 'exoplayer-core' diff --git a/library/dash/build.gradle b/library/dash/build.gradle index 1030a58c56..93f75216db 100644 --- a/library/dash/build.gradle +++ b/library/dash/build.gradle @@ -38,9 +38,9 @@ dependencies { } ext { - javadocTitle = 'DASH' + javadocTitle = 'DASH module' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' ext { releaseArtifact = 'exoplayer-dash' diff --git a/library/hls/build.gradle b/library/hls/build.gradle index 9bcca92348..a35142870c 100644 --- a/library/hls/build.gradle +++ b/library/hls/build.gradle @@ -32,9 +32,9 @@ dependencies { } ext { - javadocTitle = 'HLS' + javadocTitle = 'HLS module' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' ext { releaseArtifact = 'exoplayer-hls' diff --git a/library/smoothstreaming/build.gradle b/library/smoothstreaming/build.gradle index 4085392f6f..c9196c1792 100644 --- a/library/smoothstreaming/build.gradle +++ b/library/smoothstreaming/build.gradle @@ -38,9 +38,9 @@ dependencies { } ext { - javadocTitle = 'SmoothStreaming' + javadocTitle = 'SmoothStreaming module' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' ext { releaseArtifact = 'exoplayer-smoothstreaming' diff --git a/library/ui/build.gradle b/library/ui/build.gradle index 4ecc759969..6defb42078 100644 --- a/library/ui/build.gradle +++ b/library/ui/build.gradle @@ -29,9 +29,9 @@ dependencies { } ext { - javadocTitle = 'UI' + javadocTitle = 'UI module' } -apply from: '../../library_javadoc.gradle' +apply from: '../../javadoc_library.gradle' ext { releaseArtifact = 'exoplayer-ui'