From 24655ac7de752aa4dc5fbcd76545d61c1730b693 Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Thu, 23 Jun 2022 17:44:47 +0200 Subject: [PATCH 1/7] Skip jar processing on AGP < 7.1.2 if it is a signed multi release jar, show warning to the user with hint to upgrade AGP --- .../transforms/MetaInfStripTransform.kt | 12 ++++++++ .../transforms/MetaInfStripTransformTest.kt | 30 ++++++++++++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt index 734fa278..94c0d037 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt @@ -20,6 +20,7 @@ import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional import org.gradle.api.tasks.PathSensitive import org.gradle.api.tasks.PathSensitivity +import java.util.logging.Logger /** * Gradle's [TransformAction] that strips out unsupported Java classes from @@ -63,6 +64,13 @@ abstract class MetaInfStripTransform : TransformAction= 7.1.2 (https://developer.android.com/studio/releases/gradle-plugin)") + output.delete() + outputs.file(inputArtifact) + return + } + if (jarEntry.name.startsWith(versionsDir, ignoreCase = true)) { val javaVersion = jarEntry.javaVersion if (javaVersion > MIN_SUPPORTED_JAVA_VERSION) { @@ -93,12 +101,16 @@ abstract class MetaInfStripTransform : TransformAction Date: Mon, 27 Jun 2022 08:39:44 +0200 Subject: [PATCH 2/7] revert wrong test name --- .../android/gradle/transforms/MetaInfStripTransformTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-build/src/test/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransformTest.kt b/plugin-build/src/test/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransformTest.kt index e23192c6..547d52b4 100644 --- a/plugin-build/src/test/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransformTest.kt +++ b/plugin-build/src/test/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransformTest.kt @@ -180,7 +180,7 @@ class MetaInfStripTransformTest { } @Test - fun `when multi-release, signed jar with supported classes, keeps them and multi-release flag`() { + fun `when multi-release jar with supported classes, keeps them and multi-release flag`() { val outputs = FakeTransformOutputs(tmp) val sut = fixture.getSut(tmp, includeSupportedVersion = true) From 8a0d07d57f5cde6418ab6516948c1ab081fa0fa9 Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Mon, 27 Jun 2022 08:43:07 +0200 Subject: [PATCH 3/7] add changelog entry --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7cc5fbb..90afb43e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Fixes + +- Skip jar processing on AGP < 7.1.2 for signed multi release jars ([#334](https://github.com/getsentry/sentry-android-gradle-plugin/pull/334)) + ## 3.1.2 ### Features From 4835f0fa88fde4aed0fb4daf0d63dfc3d12df0bf Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Mon, 27 Jun 2022 12:58:02 +0200 Subject: [PATCH 4/7] fix formatting issues --- .../gradle/transforms/MetaInfStripTransform.kt | 15 +++++++++++---- .../transforms/MetaInfStripTransformTest.kt | 7 +++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt index 94c0d037..4ef76918 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt @@ -5,6 +5,7 @@ import java.util.jar.Attributes import java.util.jar.JarEntry import java.util.jar.JarFile import java.util.jar.JarOutputStream +import java.util.logging.Logger import java.util.zip.ZipEntry import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.artifacts.transform.CacheableTransform @@ -20,7 +21,6 @@ import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional import org.gradle.api.tasks.PathSensitive import org.gradle.api.tasks.PathSensitivity -import java.util.logging.Logger /** * Gradle's [TransformAction] that strips out unsupported Java classes from @@ -65,7 +65,13 @@ abstract class MetaInfStripTransform : TransformAction= 7.1.2 (https://developer.android.com/studio/releases/gradle-plugin)") + logger.warning( + """ + Signed Multirelease Jar (${jarFile.name}) found, skipping transform. + This might lead to duplicate class errors due to a bug in AGP (https://issuetracker.google.com/issues/206655905). + Please update to AGP >= 7.1.2 (https://developer.android.com/studio/releases/gradle-plugin) + """.trimIndent() + ) output.delete() outputs.file(inputArtifact) return @@ -101,7 +107,7 @@ abstract class MetaInfStripTransform : TransformAction Date: Wed, 29 Jun 2022 11:52:44 +0200 Subject: [PATCH 5/7] fix build error when used in actual build pipeline. add testcase to SentryPluginMRJarTest --- .../transforms/MetaInfStripTransform.kt | 24 +++++++++------- .../android/gradle/SentryPluginMRJarTest.kt | 28 +++++++++++++++++++ .../transforms/MetaInfStripTransformTest.kt | 10 +++---- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt index 4ef76918..043d39e0 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt @@ -1,11 +1,13 @@ package io.sentry.android.gradle.transforms +import io.sentry.android.gradle.SentryPlugin +import io.sentry.android.gradle.util.warn import java.io.File +import java.nio.file.Files import java.util.jar.Attributes import java.util.jar.JarEntry import java.util.jar.JarFile import java.util.jar.JarOutputStream -import java.util.logging.Logger import java.util.zip.ZipEntry import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.artifacts.transform.CacheableTransform @@ -51,9 +53,10 @@ abstract class MetaInfStripTransform : TransformAction + tmpOutputFile.jarOutputStream().use { outStream -> val entries = jarFile.entries() // copy each .jar entry, except those that are under META-INF/versions/${unsupported_java_version} while (entries.hasMoreElements()) { @@ -65,14 +68,14 @@ abstract class MetaInfStripTransform : TransformAction= 7.1.2 (https://developer.android.com/studio/releases/gradle-plugin) + Signed Multirelease Jar (${jarFile.name}) found, skipping transform. + This might lead to auto-instrumentation issues due to a bug in AGP (https://issuetracker.google.com/issues/206655905). + Please update to AGP >= 7.1.2 (https://developer.android.com/studio/releases/gradle-plugin) in order to keep using `autoInstrumentation` option. """.trimIndent() - ) - output.delete() + } + tmpOutputFile.delete() outputs.file(inputArtifact) return } @@ -102,6 +105,8 @@ abstract class MetaInfStripTransform : TransformAction= 7.1.2" in result.output } + assertTrue { "BUILD SUCCESSFUL" in result.output } + } + override val additionalRootProjectConfig: String = "" } diff --git a/plugin-build/src/test/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransformTest.kt b/plugin-build/src/test/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransformTest.kt index 3c4558cf..f9b2f058 100644 --- a/plugin-build/src/test/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransformTest.kt +++ b/plugin-build/src/test/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransformTest.kt @@ -32,13 +32,13 @@ class MetaInfStripTransformTest { jarName: String = "test.jar", multiRelease: Boolean = true, includeSupportedVersion: Boolean = false, - mimicSignedJar: Boolean = false + signed: Boolean = false ): MetaInfStripTransform { val file = tmpDir.newFile(jarName) val jar = file.toJar( multiRelease = multiRelease, includeSupportedVersion = includeSupportedVersion, - mimicSignedJar = mimicSignedJar + signed = signed ) whenever(provider.get()).thenReturn(RegularFile { jar }) @@ -49,7 +49,7 @@ class MetaInfStripTransformTest { private fun File.toJar( multiRelease: Boolean, includeSupportedVersion: Boolean, - mimicSignedJar: Boolean + signed: Boolean ): File { JarOutputStream(outputStream()).use { // normal classpath @@ -107,7 +107,7 @@ class MetaInfStripTransformTest { it.closeEntry() } - if (mimicSignedJar) { + if (signed) { it.putNextEntry(ZipEntry("META-INF/SIGNING_FILE.SF")) it.putNextEntry(ZipEntry("META-INF/SIGNING_FILE.DSA")) } @@ -235,7 +235,7 @@ class MetaInfStripTransformTest { fun `when multi-release signed-jar, skip transform`() { val outputs = FakeTransformOutputs(tmp) - val sut = fixture.getSut(tmp, includeSupportedVersion = true, mimicSignedJar = true) + val sut = fixture.getSut(tmp, includeSupportedVersion = true, signed = true) sut.transform(outputs) val jar = JarFile(outputs.outputFile) From f1a1e99f6dfadd225d103a8250f5594049cbc124 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Wed, 29 Jun 2022 15:31:06 +0200 Subject: [PATCH 6/7] Update plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt --- .../sentry/android/gradle/transforms/MetaInfStripTransform.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt index 043d39e0..7597df6f 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt @@ -54,7 +54,7 @@ abstract class MetaInfStripTransform : TransformAction val entries = jarFile.entries() From b71c3457c86c195b8c90d9685687efd376e5d97b Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Thu, 30 Jun 2022 09:50:05 +0200 Subject: [PATCH 7/7] fix formatting --- .../android/gradle/transforms/MetaInfStripTransform.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt index 7597df6f..b508824f 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/transforms/MetaInfStripTransform.kt @@ -54,7 +54,10 @@ abstract class MetaInfStripTransform : TransformAction val entries = jarFile.entries()