Skip to content

Commit 35cd5c8

Browse files
authored
fix(proguard): Fix compatibility with AGP 9.x when uploading proguard mappings (#1021)
* fix(proguard): Fix compatibility with AGP 9.x when uploading proguard mappings * Changelog
1 parent 1631a66 commit 35cd5c8

5 files changed

Lines changed: 33 additions & 25 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## Unreleased
4+
5+
### Fixes
6+
7+
- Fix compatibility with AGP 9.x when uploading proguard mappings ([#1021](https://github.com/getsentry/sentry-android-gradle-plugin/pull/1021))
8+
39
## 5.12.1
410

511
### Fixes

plugin-build/src/agp70/kotlin/io/sentry/android/gradle/AGP70Compat.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.android.build.api.instrumentation.AsmClassVisitorFactory
66
import com.android.build.api.instrumentation.FramesComputationMode
77
import com.android.build.api.instrumentation.InstrumentationParameters
88
import com.android.build.api.instrumentation.InstrumentationScope
9-
import com.android.build.api.variant.AndroidComponentsExtension
9+
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
1010
import com.android.build.api.variant.Variant
1111
import com.android.build.gradle.api.ApplicationVariant
1212
import io.sentry.gradle.common.SentryVariant
@@ -63,8 +63,8 @@ fun <T : InstrumentationParameters> configureInstrumentationFor70(
6363
}
6464

6565
fun onVariants70(
66-
androidComponentsExt: AndroidComponentsExtension<*, *, *>,
67-
callback: (Variant) -> Unit,
66+
androidComponentsExt: ApplicationAndroidComponentsExtension,
67+
callback: (com.android.build.api.variant.ApplicationVariant) -> Unit,
6868
) {
6969
androidComponentsExt.onVariants(callback = callback)
7070
}

plugin-build/src/agp74/kotlin/io/sentry/android/gradle/AGP74Compat.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import com.android.build.api.instrumentation.AsmClassVisitorFactory
77
import com.android.build.api.instrumentation.FramesComputationMode
88
import com.android.build.api.instrumentation.InstrumentationParameters
99
import com.android.build.api.instrumentation.InstrumentationScope
10-
import com.android.build.api.variant.AndroidComponentsExtension
10+
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
11+
import com.android.build.api.variant.ApplicationVariant
1112
import com.android.build.api.variant.CanMinifyCode
1213
import com.android.build.api.variant.Variant
1314
import com.android.build.api.variant.impl.ApplicationVariantImpl
@@ -111,8 +112,8 @@ fun <T : InstrumentationParameters> configureInstrumentationFor74(
111112
}
112113

113114
fun onVariants74(
114-
androidComponentsExt: AndroidComponentsExtension<*, *, *>,
115-
callback: (Variant) -> Unit,
115+
androidComponentsExt: ApplicationAndroidComponentsExtension,
116+
callback: (ApplicationVariant) -> Unit,
116117
) {
117118
androidComponentsExt.onVariants(callback = callback)
118119
}

plugin-build/src/main/kotlin/io/sentry/android/gradle/AndroidComponentsConfig.kt

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import com.android.build.api.instrumentation.AsmClassVisitorFactory
77
import com.android.build.api.instrumentation.FramesComputationMode
88
import com.android.build.api.instrumentation.InstrumentationParameters
99
import com.android.build.api.instrumentation.InstrumentationScope
10-
import com.android.build.api.variant.AndroidComponentsExtension
10+
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
11+
import com.android.build.api.variant.ApplicationVariant
1112
import com.android.build.api.variant.Variant
12-
import com.android.build.gradle.AppExtension
1313
import com.android.build.gradle.internal.utils.setDisallowChanges
1414
import io.sentry.android.gradle.SentryPlugin.Companion.sep
1515
import io.sentry.android.gradle.SentryPropertiesFileProvider.getPropertiesFilePath
@@ -48,7 +48,7 @@ import org.gradle.api.provider.SetProperty
4848
import org.gradle.api.tasks.TaskProvider
4949
import org.gradle.internal.build.event.BuildEventListenerRegistryInternal
5050

51-
fun AndroidComponentsExtension<*, *, *>.configure(
51+
fun ApplicationAndroidComponentsExtension.configure(
5252
project: Project,
5353
extension: SentryPluginExtension,
5454
buildEvents: BuildEventListenerRegistryInternal,
@@ -347,7 +347,7 @@ private fun Variant.configureDependenciesTask(
347347
}
348348
}
349349

350-
private fun Variant.configureProguardMappingsTasks(
350+
private fun ApplicationVariant.configureProguardMappingsTasks(
351351
project: Project,
352352
extension: SentryPluginExtension,
353353
sentryTelemetryProvider: Provider<SentryTelemetryService>,
@@ -373,7 +373,7 @@ private fun Variant.configureProguardMappingsTasks(
373373
output = paths.proguardUuidDir,
374374
)
375375

376-
val releaseInfo = getReleaseInfo(project, this)
376+
val releaseInfo = getReleaseInfo()
377377
val uploadMappingsTask =
378378
SentryUploadProguardMappingsTask.register(
379379
project = project,
@@ -445,24 +445,25 @@ private fun <T : InstrumentationParameters> Variant.configureInstrumentation(
445445
* onVariants method in AGP 7.4.0 has a binary incompatibility with the prior versions, hence we
446446
* have to distinguish here, although the compatibility sources would look exactly the same.
447447
*/
448-
private fun AndroidComponentsExtension<*, *, *>.configureVariants(callback: (Variant) -> Unit) {
448+
private fun ApplicationAndroidComponentsExtension.configureVariants(
449+
callback: (ApplicationVariant) -> Unit
450+
) {
449451
if (isAGP74) {
450452
onVariants74(this, callback)
451453
} else {
452454
onVariants70(this, callback)
453455
}
454456
}
455457

456-
private fun getReleaseInfo(project: Project, variant: Variant): ReleaseInfo {
457-
val appExtension = project.extensions.getByType(AppExtension::class.java)
458-
var applicationId = appExtension.defaultConfig.applicationId ?: appExtension.namespace.toString()
459-
var versionName = appExtension.defaultConfig.versionName ?: "undefined"
460-
var versionCode = appExtension.defaultConfig.versionCode
461-
val flavor = appExtension.productFlavors.find { it.name == variant.flavorName }
462-
flavor?.applicationId?.let { applicationId = it }
463-
flavor?.versionName?.let { versionName = it }
464-
flavor?.versionCode?.let { versionCode = it }
465-
flavor?.applicationIdSuffix?.let { applicationId += it }
466-
flavor?.versionNameSuffix?.let { versionName += it }
458+
private fun ApplicationVariant.getReleaseInfo(): ReleaseInfo {
459+
val applicationId = applicationId.orNull ?: namespace.get()
460+
var versionName = outputs.firstOrNull()?.versionName?.orNull
461+
if (versionName.isNullOrEmpty()) {
462+
versionName = "undefined"
463+
}
464+
var versionCode = outputs.firstOrNull()?.versionCode?.orNull
465+
if (versionCode != null && versionCode < 0) {
466+
versionCode = null
467+
}
467468
return ReleaseInfo(applicationId, versionName, versionCode)
468469
}

plugin-build/src/main/kotlin/io/sentry/android/gradle/SentryPlugin.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.sentry.android.gradle
22

3-
import com.android.build.api.variant.AndroidComponentsExtension
3+
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
44
import com.android.build.gradle.AppExtension
55
import io.sentry.BuildConfig
66
import io.sentry.android.gradle.autoinstall.installDependencies
@@ -48,7 +48,7 @@ constructor(private val buildEvents: BuildEventListenerRegistryInternal) : Plugi
4848
project.pluginManager.withPlugin("com.android.application") {
4949
val oldAGPExtension = project.extensions.getByType(AppExtension::class.java)
5050
val androidComponentsExt =
51-
project.extensions.getByType(AndroidComponentsExtension::class.java)
51+
project.extensions.getByType(ApplicationAndroidComponentsExtension::class.java)
5252
val cliExecutable = project.cliExecutableProvider()
5353

5454
val extraProperties = project.extensions.getByName("ext") as ExtraPropertiesExtension

0 commit comments

Comments
 (0)