From 465304515bd565cfe1dd6214cb38b56c6bc68aa7 Mon Sep 17 00:00:00 2001 From: James Hamilton Date: Fri, 21 May 2021 18:16:55 +0200 Subject: [PATCH] Fix minifyEnabled = true check that checked all variants --- .../gradle/plugin/android/AndroidPlugin.kt | 17 ++++++++- .../plugin/android/ProGuardTransform.kt | 5 --- .../plugin/android/dsl/ConfigurationTest.kt | 38 +++++++++++++++++++ 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/gradle-plugin/src/main/kotlin/proguard/gradle/plugin/android/AndroidPlugin.kt b/gradle-plugin/src/main/kotlin/proguard/gradle/plugin/android/AndroidPlugin.kt index 36f2081c..f37a9db8 100644 --- a/gradle-plugin/src/main/kotlin/proguard/gradle/plugin/android/AndroidPlugin.kt +++ b/gradle-plugin/src/main/kotlin/proguard/gradle/plugin/android/AndroidPlugin.kt @@ -21,6 +21,7 @@ package proguard.gradle.plugin.android +import com.android.build.api.variant.VariantInfo import com.android.build.gradle.AppExtension import com.android.build.gradle.BaseExtension import com.android.build.gradle.LibraryExtension @@ -36,6 +37,7 @@ import org.gradle.api.tasks.TaskProvider import proguard.gradle.plugin.android.AndroidProjectType.ANDROID_APPLICATION import proguard.gradle.plugin.android.AndroidProjectType.ANDROID_LIBRARY import proguard.gradle.plugin.android.dsl.ProGuardAndroidExtension +import proguard.gradle.plugin.android.dsl.VariantConfiguration import proguard.gradle.plugin.android.tasks.CollectConsumerRulesTask import proguard.gradle.plugin.android.transforms.AndroidConsumerRulesTransform import proguard.gradle.plugin.android.transforms.ArchiveConsumerRulesTransform @@ -64,7 +66,8 @@ class AndroidPlugin(private val androidExtension: BaseExtension) : Plugin androidExtension.applicationVariants.all { applicationVariant -> - verifyNotMinified(applicationVariant) + if (proguardBlock.configurations.hasVariantConfiguration(applicationVariant.name)) + verifyNotMinified(applicationVariant) collectConsumerRulesTask.dependsOn(createCollectConsumerRulesTask( project, @@ -73,7 +76,8 @@ class AndroidPlugin(private val androidExtension: BaseExtension) : Plugin androidExtension.libraryVariants.all { libraryVariant -> - verifyNotMinified(libraryVariant) + if (proguardBlock.configurations.hasVariantConfiguration(libraryVariant.name)) + verifyNotMinified(libraryVariant) collectConsumerRulesTask.dependsOn(createCollectConsumerRulesTask( project, @@ -158,3 +162,12 @@ enum class AndroidProjectType { ANDROID_APPLICATION, ANDROID_LIBRARY; } + +fun Iterable.findVariantConfiguration(variant: VariantInfo) = + find { it.name == variant.fullVariantName } ?: find { it.name == variant.buildTypeName } + +fun Iterable.findVariantConfiguration(variantName: String) = + find { it.name == variantName } ?: find { variantName.endsWith(it.name.capitalize()) } + +fun Iterable.hasVariantConfiguration(variantName: String) = + this.findVariantConfiguration(variantName) != null diff --git a/gradle-plugin/src/main/kotlin/proguard/gradle/plugin/android/ProGuardTransform.kt b/gradle-plugin/src/main/kotlin/proguard/gradle/plugin/android/ProGuardTransform.kt index 7f80b01f..71fdf183 100644 --- a/gradle-plugin/src/main/kotlin/proguard/gradle/plugin/android/ProGuardTransform.kt +++ b/gradle-plugin/src/main/kotlin/proguard/gradle/plugin/android/ProGuardTransform.kt @@ -137,8 +137,3 @@ class ProGuardTransform( typealias ProGuardIOEntry = Pair -private fun Iterable.findVariantConfiguration(variant: VariantInfo) = - find { it.name == variant.fullVariantName } ?: find { it.name == variant.buildTypeName } - -private fun Iterable.findVariantConfiguration(variantName: String) = - find { it.name == variantName } ?: find { variantName.endsWith(it.name.capitalize()) } diff --git a/gradle-plugin/src/test/kotlin/proguard/gradle/plugin/android/dsl/ConfigurationTest.kt b/gradle-plugin/src/test/kotlin/proguard/gradle/plugin/android/dsl/ConfigurationTest.kt index c6bf70f7..24644831 100644 --- a/gradle-plugin/src/test/kotlin/proguard/gradle/plugin/android/dsl/ConfigurationTest.kt +++ b/gradle-plugin/src/test/kotlin/proguard/gradle/plugin/android/dsl/ConfigurationTest.kt @@ -8,7 +8,9 @@ package proguard.gradle.plugin.android.dsl import io.kotest.core.spec.style.FreeSpec +import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldContain +import org.gradle.testkit.runner.TaskOutcome import testutils.AndroidProject import testutils.applicationModule import testutils.createGradleRunner @@ -52,6 +54,42 @@ class ConfigurationTest : FreeSpec({ } } + "Given a project with a configuration for a minified variant that is not configured" - { + val project = autoClose(AndroidProject().apply { + addModule(applicationModule("app", buildDotGradle = """ + plugins { + id 'com.android.application' + id 'proguard' + } + android { + compileSdkVersion 30 + + buildTypes { + release { + minifyEnabled true + } + } + } + + proguard { + configurations { + debug { + defaultConfiguration 'proguard-android-debug.txt' + } + } + }""".trimIndent())) + }.create()) + + + "When the project is evaluated" - { + val result = createGradleRunner(project.rootDir, testKitDir, "assemble").build() + + "Then the build should succeed" { + result.task(":app:assemble")?.outcome shouldBe TaskOutcome.SUCCESS + } + } + } + "Given a project with a configuration for a minified variant" - { val project = autoClose(AndroidProject().apply { addModule(applicationModule("app", buildDotGradle = """