import java.nio.file.Files import java.nio.file.NoSuchFileException import java.util.zip.ZipEntry import java.util.zip.ZipFile /* * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ ext.tasks_version = '16.0.1' def attr = Attribute.of("artifactType", String.class) configurations { aar { attributes { attribute(attr, ArtifactTypeDefinition.JAR_TYPE) } sourceSets.main.compileClasspath += it sourceSets.test.compileClasspath += it sourceSets.test.runtimeClasspath += it } } dependencies { registerTransform { from.attribute(attr, "aar") to.attribute(attr, "jar") artifactTransform(ExtractJars.class) } aar("com.google.android.gms:play-services-tasks:$tasks_version") { exclude group: 'com.android.support' } } tasks.withType(dokka.getClass()) { externalDocumentationLink { url = new URL("https://developers.google.com/android/reference/") // This is workaround for missing package list in Google API packageListUrl = projectDir.toPath().resolve("package.list").toUri().toURL() } afterEvaluate { classpath += project.configurations.aar.files } } class ExtractJars extends ArtifactTransform { @Override List transform(File input) { unzip(input) List jars = new ArrayList<>() outputDirectory.traverse(nameFilter: ~/.*\.jar/) { jars += it } return jars } private void unzip(File zipFile) { ZipFile zip try { zip = new ZipFile(zipFile) for (entry in zip.entries()) { unzipEntryTo(zip, entry) } } finally { if (zip != null) zip.close() } } private void unzipEntryTo(ZipFile zip, ZipEntry entry) { File output = new File(outputDirectory, entry.name) if (entry.isDirectory()) { output.mkdirs() } else { InputStream stream try { stream = zip.getInputStream(entry) Files.copy(stream, output.toPath()) } catch (NoSuchFileException ignored) { } finally { if (stream != null) stream.close() } } } }