diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a5103a35..60cb7ec1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Fixes + +- Fix compatibility with AGP 9.x when uploading proguard mappings ([#1021](https://github.com/getsentry/sentry-android-gradle-plugin/pull/1021)) + ## 5.12.1 ### Fixes diff --git a/plugin-build/src/agp70/kotlin/io/sentry/android/gradle/AGP70Compat.kt b/plugin-build/src/agp70/kotlin/io/sentry/android/gradle/AGP70Compat.kt index 63167839a..520e90000 100644 --- a/plugin-build/src/agp70/kotlin/io/sentry/android/gradle/AGP70Compat.kt +++ b/plugin-build/src/agp70/kotlin/io/sentry/android/gradle/AGP70Compat.kt @@ -6,7 +6,7 @@ import com.android.build.api.instrumentation.AsmClassVisitorFactory import com.android.build.api.instrumentation.FramesComputationMode import com.android.build.api.instrumentation.InstrumentationParameters import com.android.build.api.instrumentation.InstrumentationScope -import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.api.variant.Variant import com.android.build.gradle.api.ApplicationVariant import io.sentry.gradle.common.SentryVariant @@ -63,8 +63,8 @@ fun configureInstrumentationFor70( } fun onVariants70( - androidComponentsExt: AndroidComponentsExtension<*, *, *>, - callback: (Variant) -> Unit, + androidComponentsExt: ApplicationAndroidComponentsExtension, + callback: (com.android.build.api.variant.ApplicationVariant) -> Unit, ) { androidComponentsExt.onVariants(callback = callback) } diff --git a/plugin-build/src/agp74/kotlin/io/sentry/android/gradle/AGP74Compat.kt b/plugin-build/src/agp74/kotlin/io/sentry/android/gradle/AGP74Compat.kt index 82d03f34f..e10722a7a 100644 --- a/plugin-build/src/agp74/kotlin/io/sentry/android/gradle/AGP74Compat.kt +++ b/plugin-build/src/agp74/kotlin/io/sentry/android/gradle/AGP74Compat.kt @@ -7,7 +7,8 @@ import com.android.build.api.instrumentation.AsmClassVisitorFactory import com.android.build.api.instrumentation.FramesComputationMode import com.android.build.api.instrumentation.InstrumentationParameters import com.android.build.api.instrumentation.InstrumentationScope -import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.api.variant.ApplicationAndroidComponentsExtension +import com.android.build.api.variant.ApplicationVariant import com.android.build.api.variant.CanMinifyCode import com.android.build.api.variant.Variant import com.android.build.api.variant.impl.ApplicationVariantImpl @@ -111,8 +112,8 @@ fun configureInstrumentationFor74( } fun onVariants74( - androidComponentsExt: AndroidComponentsExtension<*, *, *>, - callback: (Variant) -> Unit, + androidComponentsExt: ApplicationAndroidComponentsExtension, + callback: (ApplicationVariant) -> Unit, ) { androidComponentsExt.onVariants(callback = callback) } diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/AndroidComponentsConfig.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/AndroidComponentsConfig.kt index daa83c706..261dacd47 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/AndroidComponentsConfig.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/AndroidComponentsConfig.kt @@ -7,9 +7,9 @@ import com.android.build.api.instrumentation.AsmClassVisitorFactory import com.android.build.api.instrumentation.FramesComputationMode import com.android.build.api.instrumentation.InstrumentationParameters import com.android.build.api.instrumentation.InstrumentationScope -import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.api.variant.ApplicationAndroidComponentsExtension +import com.android.build.api.variant.ApplicationVariant import com.android.build.api.variant.Variant -import com.android.build.gradle.AppExtension import com.android.build.gradle.internal.utils.setDisallowChanges import io.sentry.android.gradle.SentryPlugin.Companion.sep import io.sentry.android.gradle.SentryPropertiesFileProvider.getPropertiesFilePath @@ -48,7 +48,7 @@ import org.gradle.api.provider.SetProperty import org.gradle.api.tasks.TaskProvider import org.gradle.internal.build.event.BuildEventListenerRegistryInternal -fun AndroidComponentsExtension<*, *, *>.configure( +fun ApplicationAndroidComponentsExtension.configure( project: Project, extension: SentryPluginExtension, buildEvents: BuildEventListenerRegistryInternal, @@ -347,7 +347,7 @@ private fun Variant.configureDependenciesTask( } } -private fun Variant.configureProguardMappingsTasks( +private fun ApplicationVariant.configureProguardMappingsTasks( project: Project, extension: SentryPluginExtension, sentryTelemetryProvider: Provider, @@ -373,7 +373,7 @@ private fun Variant.configureProguardMappingsTasks( output = paths.proguardUuidDir, ) - val releaseInfo = getReleaseInfo(project, this) + val releaseInfo = getReleaseInfo() val uploadMappingsTask = SentryUploadProguardMappingsTask.register( project = project, @@ -445,7 +445,9 @@ private fun Variant.configureInstrumentation( * onVariants method in AGP 7.4.0 has a binary incompatibility with the prior versions, hence we * have to distinguish here, although the compatibility sources would look exactly the same. */ -private fun AndroidComponentsExtension<*, *, *>.configureVariants(callback: (Variant) -> Unit) { +private fun ApplicationAndroidComponentsExtension.configureVariants( + callback: (ApplicationVariant) -> Unit +) { if (isAGP74) { onVariants74(this, callback) } else { @@ -453,16 +455,15 @@ private fun AndroidComponentsExtension<*, *, *>.configureVariants(callback: (Var } } -private fun getReleaseInfo(project: Project, variant: Variant): ReleaseInfo { - val appExtension = project.extensions.getByType(AppExtension::class.java) - var applicationId = appExtension.defaultConfig.applicationId ?: appExtension.namespace.toString() - var versionName = appExtension.defaultConfig.versionName ?: "undefined" - var versionCode = appExtension.defaultConfig.versionCode - val flavor = appExtension.productFlavors.find { it.name == variant.flavorName } - flavor?.applicationId?.let { applicationId = it } - flavor?.versionName?.let { versionName = it } - flavor?.versionCode?.let { versionCode = it } - flavor?.applicationIdSuffix?.let { applicationId += it } - flavor?.versionNameSuffix?.let { versionName += it } +private fun ApplicationVariant.getReleaseInfo(): ReleaseInfo { + val applicationId = applicationId.orNull ?: namespace.get() + var versionName = outputs.firstOrNull()?.versionName?.orNull + if (versionName.isNullOrEmpty()) { + versionName = "undefined" + } + var versionCode = outputs.firstOrNull()?.versionCode?.orNull + if (versionCode != null && versionCode < 0) { + versionCode = null + } return ReleaseInfo(applicationId, versionName, versionCode) } diff --git a/plugin-build/src/main/kotlin/io/sentry/android/gradle/SentryPlugin.kt b/plugin-build/src/main/kotlin/io/sentry/android/gradle/SentryPlugin.kt index f49aa02ad..8a30d7eb3 100644 --- a/plugin-build/src/main/kotlin/io/sentry/android/gradle/SentryPlugin.kt +++ b/plugin-build/src/main/kotlin/io/sentry/android/gradle/SentryPlugin.kt @@ -1,6 +1,6 @@ package io.sentry.android.gradle -import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.gradle.AppExtension import io.sentry.BuildConfig import io.sentry.android.gradle.autoinstall.installDependencies @@ -48,7 +48,7 @@ constructor(private val buildEvents: BuildEventListenerRegistryInternal) : Plugi project.pluginManager.withPlugin("com.android.application") { val oldAGPExtension = project.extensions.getByType(AppExtension::class.java) val androidComponentsExt = - project.extensions.getByType(AndroidComponentsExtension::class.java) + project.extensions.getByType(ApplicationAndroidComponentsExtension::class.java) val cliExecutable = project.cliExecutableProvider() val extraProperties = project.extensions.getByName("ext") as ExtraPropertiesExtension