|
1 | 1 | package dev.vyp.stringcare.plugin |
2 | 2 |
|
3 | 3 | import dev.vyp.stringcare.plugin.internal.PrintUtils |
| 4 | +import dev.vyp.stringcare.plugin.internal.StringCareSession |
4 | 5 | import dev.vyp.stringcare.plugin.internal.absolutePath |
5 | 6 | import dev.vyp.stringcare.plugin.internal.config |
6 | | -import dev.vyp.stringcare.plugin.internal.defaultConfig |
7 | 7 | import dev.vyp.stringcare.plugin.internal.registerTask |
8 | 8 | import dev.vyp.stringcare.plugin.internal.registerVariantObfuscationTasks |
9 | | -import dev.vyp.stringcare.plugin.internal.tempPath |
| 9 | +import dev.vyp.stringcare.plugin.services.StringCareBuildService |
| 10 | +import org.gradle.api.Action |
10 | 11 | import org.gradle.api.Plugin |
11 | 12 | import org.gradle.api.Project |
| 13 | +import org.gradle.api.provider.Provider |
| 14 | +import org.gradle.api.services.BuildServiceSpec |
12 | 15 |
|
13 | 16 | /** |
14 | 17 | * StringCare Gradle plugin entry point. Applies string/asset obfuscation for Android application projects. |
15 | 18 | */ |
16 | 19 | class StringCarePlugin : Plugin<Project> { |
17 | | - |
18 | 20 | companion object { |
| 21 | + /** Test hook: clears the in-memory temp root used by [dev.vyp.stringcare.plugin.internal.tempPath]. */ |
19 | 22 | @JvmStatic |
20 | | - internal lateinit var absoluteProjectPath: String |
21 | | - |
22 | | - private var internalTempDir: String? = null |
23 | | - @JvmStatic |
24 | | - var tempFolder: String |
25 | | - get() = internalTempDir ?: tempPath() |
26 | | - set(value) { |
27 | | - internalTempDir = value |
28 | | - } |
29 | | - |
30 | 23 | fun resetFolder() { |
31 | | - internalTempDir = null |
| 24 | + StringCareSession.clearTestTempRoot() |
32 | 25 | } |
33 | | - |
34 | | - @JvmStatic |
35 | | - internal var configuration: StringCareConfiguration = defaultConfig() |
36 | | - |
37 | | - @JvmStatic |
38 | | - internal var variantMap = mutableMapOf<String, String>() |
39 | 26 | } |
40 | 27 |
|
41 | 28 | override fun apply(target: Project) { |
42 | 29 | val extension = target.extensions.create("stringcare", StringCareExtension::class.java) |
43 | | - absoluteProjectPath = target.absolutePath() |
| 30 | + val buildService = registerStringCareService(target) |
44 | 31 |
|
45 | 32 | target.plugins.withId("com.android.application") { |
46 | 33 | val config = target.config(extension) |
47 | | - configuration = config |
48 | | - target.registerVariantObfuscationTasks(extension, config) |
| 34 | + buildService.get().setResolvedConfiguration(config) |
| 35 | + target.registerVariantObfuscationTasks(config, buildService) |
49 | 36 | target.afterEvaluate { |
50 | | - if (configuration.debug) { |
51 | | - PrintUtils.print("PATH", absoluteProjectPath) |
| 37 | + val resolved = buildService.get().getResolvedConfiguration() |
| 38 | + if (resolved.debug) { |
| 39 | + PrintUtils.print("PATH", buildService.get().absoluteProjectPath()) |
52 | 40 | } |
53 | | - target.registerTask(configuration) |
| 41 | + target.registerTask(resolved, buildService) |
54 | 42 | } |
55 | 43 | } |
56 | 44 |
|
57 | 45 | if (!target.plugins.hasPlugin("com.android.application")) { |
58 | 46 | target.afterEvaluate { |
59 | | - configuration = target.config(extension) |
60 | | - target.registerTask(configuration) |
| 47 | + val config = target.config(extension) |
| 48 | + buildService.get().setResolvedConfiguration(config) |
| 49 | + target.registerTask(config, buildService) |
61 | 50 | } |
62 | 51 | } |
63 | 52 | } |
| 53 | + |
| 54 | + private fun registerStringCareService(target: Project): Provider<StringCareBuildService> = |
| 55 | + target.gradle.sharedServices.registerIfAbsent( |
| 56 | + "stringCareBuildService", |
| 57 | + StringCareBuildService::class.java, |
| 58 | + Action<BuildServiceSpec<StringCareBuildService.Params>> { spec -> |
| 59 | + spec.parameters.absoluteProjectPath.set(target.provider { target.absolutePath() }) |
| 60 | + }, |
| 61 | + ) |
64 | 62 | } |
65 | 63 |
|
66 | 64 | /** |
67 | 65 | * Internal resolved configuration (module name, applicationId, etc.). |
68 | 66 | */ |
69 | | -open class StringCareConfiguration(var name: String) { |
| 67 | +open class StringCareConfiguration( |
| 68 | + var name: String, |
| 69 | +) { |
70 | 70 | var assetsFiles = mutableListOf<String>() |
71 | 71 | var stringFiles = mutableListOf<String>() |
72 | 72 | var srcFolders = mutableListOf<String>() |
|
0 commit comments