• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<lambda>null1 import org.gradle.api.*
2 import org.gradle.api.artifacts.transform.InputArtifact
3 import org.gradle.api.artifacts.transform.TransformAction
4 import org.gradle.api.artifacts.transform.TransformOutputs
5 import org.gradle.api.artifacts.transform.TransformParameters
6 import org.gradle.api.attributes.*
7 import org.gradle.api.file.FileSystemLocation
8 import org.gradle.api.provider.Provider
9 import org.gradle.kotlin.dsl.*
10 import java.io.File
11 import java.nio.file.Files
12 import java.util.zip.ZipEntry
13 import java.util.zip.ZipFile
14 
15 // Attributes used by aar dependencies
16 val artifactType = Attribute.of("artifactType", String::class.java)
17 val unpackedAar = Attribute.of("unpackedAar", Boolean::class.javaObjectType)
18 
19 fun Project.configureAar() = configurations.configureEach {
20     afterEvaluate {
21         if (isCanBeResolved && !isCanBeConsumed) {
22             attributes.attribute(unpackedAar, true) // request all AARs to be unpacked
23         }
24     }
25 }
26 
configureAarUnpackingnull27 fun DependencyHandlerScope.configureAarUnpacking() {
28     attributesSchema {
29         attribute(unpackedAar)
30     }
31 
32     artifactTypes {
33         create("aar") {
34             attributes.attribute(unpackedAar, false)
35         }
36     }
37 
38     registerTransform(UnpackAar::class.java) {
39         from.attribute(unpackedAar, false).attribute(artifactType, "aar")
40         to.attribute(unpackedAar, true).attribute(artifactType, "jar")
41     }
42 }
43 
44 @Suppress("UnstableApiUsage")
45 abstract class UnpackAar : TransformAction<TransformParameters.None> {
46     @get:InputArtifact
47     abstract val inputArtifact: Provider<FileSystemLocation>
48 
transformnull49     override fun transform(outputs: TransformOutputs) {
50         ZipFile(inputArtifact.get().asFile).use { zip ->
51             zip.entries().asSequence()
52                 .filter { !it.isDirectory }
53                 .filter { it.name.endsWith(".jar") }
54                 .forEach { zip.unzip(it, outputs.file(it.name)) }
55         }
56     }
57 }
58 
ZipFilenull59 private fun ZipFile.unzip(entry: ZipEntry, output: File) {
60     getInputStream(entry).use {
61         Files.copy(it, output.toPath())
62     }
63 }
64