@@ -33,18 +33,31 @@ import org.gradle.api.Plugin
33
33
import org.gradle.api.Project
34
34
import org.gradle.api.artifacts.Configuration
35
35
import org.gradle.api.logging.Logger
36
+ import org.gradle.api.provider.Property
37
+ import org.gradle.api.provider.Provider
36
38
import org.gradle.kotlin.dsl.apply
39
+ import org.gradle.kotlin.dsl.create
40
+
41
+ abstract class VendorExtension {
42
+ /* * Controls dead code elimination, enabled if true. */
43
+ abstract val optimize: Property <Boolean >
44
+
45
+ init {
46
+ optimize.convention(true )
47
+ }
48
+ }
37
49
38
50
class VendorPlugin : Plugin <Project > {
39
51
override fun apply (project : Project ) {
52
+ val vendorConfig = project.extensions.create<VendorExtension >(" vendor" )
40
53
project.plugins.all {
41
54
when (this ) {
42
- is LibraryPlugin -> configureAndroid(project)
55
+ is LibraryPlugin -> configureAndroid(project, vendorConfig )
43
56
}
44
57
}
45
58
}
46
59
47
- fun configureAndroid (project : Project ) {
60
+ fun configureAndroid (project : Project , vendorConfig : VendorExtension ) {
48
61
project.apply (plugin = " LicenseResolverPlugin" )
49
62
50
63
val vendor = project.configurations.create(" vendor" )
@@ -71,7 +84,8 @@ class VendorPlugin : Plugin<Project> {
71
84
},
72
85
jarJarProvider = { jarJar.resolve() },
73
86
project = project,
74
- logger = project.logger
87
+ logger = project.logger,
88
+ optimize = vendorConfig.optimize
75
89
),
76
90
logger = project.logger
77
91
)
@@ -80,19 +94,35 @@ class VendorPlugin : Plugin<Project> {
80
94
}
81
95
82
96
interface JarTransformer {
83
- fun transform (inputJar : File , outputJar : File , packagesToVendor : Set <String >)
97
+ fun transform (
98
+ inputJar : File ,
99
+ outputJar : File ,
100
+ ownPackages : Set <String >,
101
+ packagesToVendor : Set <String >
102
+ )
84
103
}
85
104
86
105
class JarJarTransformer (
87
106
private val parentPackageProvider : () -> String ,
88
107
private val jarJarProvider : () -> Collection <File >,
89
108
private val project : Project ,
90
- private val logger : Logger
109
+ private val logger : Logger ,
110
+ private val optimize : Provider <Boolean >
91
111
) : JarTransformer {
92
- override fun transform (inputJar : File , outputJar : File , packagesToVendor : Set <String >) {
112
+ override fun transform (
113
+ inputJar : File ,
114
+ outputJar : File ,
115
+ ownPackages : Set <String >,
116
+ packagesToVendor : Set <String >
117
+ ) {
93
118
val parentPackage = parentPackageProvider()
94
119
val rulesFile = File .createTempFile(parentPackage, " .jarjar" )
95
120
rulesFile.printWriter().use {
121
+ if (optimize.get()) {
122
+ for (packageName in ownPackages) {
123
+ it.println (" keep $packageName .**" )
124
+ }
125
+ }
96
126
for (externalPackageName in packagesToVendor) {
97
127
it.println (" rule $externalPackageName .** $parentPackage .@0" )
98
128
}
@@ -227,7 +257,7 @@ class VendorTransform(
227
257
zipAll(unzippedDir, jar)
228
258
val outputJar = File (workDir, " output.jar" )
229
259
230
- jarTransformer.transform(jar, outputJar, externalPackageNames)
260
+ jarTransformer.transform(jar, outputJar, ownPackageNames, externalPackageNames)
231
261
return outputJar
232
262
}
233
263
0 commit comments