Reviewed By: passy Differential Revision: D17863711 fbshipit-source-id: 259dc77826fb803ff1b88c88529d7f679d3b74d8
102 lines
3.6 KiB
Groovy
102 lines
3.6 KiB
Groovy
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
import java.nio.file.Files
|
|
import java.nio.file.Paths
|
|
import java.io.FileOutputStream
|
|
import java.util.zip.ZipFile
|
|
|
|
// Android tasks for Javadoc and sources.jar generation
|
|
|
|
afterEvaluate { project ->
|
|
if (POM_PACKAGING == 'aar') {
|
|
task androidJavadoc(type: Javadoc, dependsOn: assembleDebug) {
|
|
source += files(android.sourceSets.main.java.srcDirs)
|
|
failOnError false
|
|
// This task will try to compile *everything* it finds in the above directory and
|
|
// will choke on text files it doesn't understand.
|
|
exclude '**/BUCK'
|
|
exclude '**/*.md'
|
|
}
|
|
|
|
task androidJavadocJar(type: Jar, dependsOn: androidJavadoc) {
|
|
archiveClassifier.set('javadoc')
|
|
from androidJavadoc.destinationDir
|
|
}
|
|
|
|
task androidSourcesJar(type: Jar) {
|
|
archiveClassifier.set('sources')
|
|
from android.sourceSets.main.java.srcDirs
|
|
}
|
|
|
|
android.libraryVariants.all { variant ->
|
|
def name = variant.name.capitalize()
|
|
task "jar${name}"(type: Jar, dependsOn: variant.javaCompileProvider) {
|
|
from variant.javaCompileProvider.get().destinationDir
|
|
}
|
|
|
|
androidJavadoc.doFirst {
|
|
classpath += files(android.bootClasspath)
|
|
classpath += files(variant.javaCompileProvider.get().classpath.files)
|
|
// This is generated by `assembleDebug` and holds the JARs generated by the APT.
|
|
classpath += fileTree(dir: "$buildDir/intermediates/bundles/debug/", include: '**/*.jar')
|
|
|
|
// 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)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
artifacts.add('archives', androidJavadocJar)
|
|
artifacts.add('archives', androidSourcesJar)
|
|
}
|
|
|
|
if (POM_PACKAGING == 'jar') {
|
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
|
archiveClassifier.set('javadoc')
|
|
from javadoc.destinationDir
|
|
}
|
|
|
|
task sourcesJar(type: Jar, dependsOn: classes) {
|
|
archiveClassifier.set('sources')
|
|
from sourceSets.main.allSource
|
|
}
|
|
|
|
artifacts.add('archives', javadocJar)
|
|
artifacts.add('archives', sourcesJar)
|
|
}
|
|
}
|
|
|
|
// 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()
|
|
}
|