diff --git a/CHANGELOG.md b/CHANGELOG.md index cfcb6594c1..a874b3954d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Unreleased + +### Fixes + +- Use `canonicalName` in Fragment Integration for better de-obfuscation ([#2379](https://github.com/getsentry/sentry-java/pull/2379)) +- Fix Timber and Fragment integrations auto-installation for obfuscated builds ([#2379](https://github.com/getsentry/sentry-java/pull/2379)) + ## 6.8.0 ### Fixes diff --git a/sentry-android-core/proguard-rules.pro b/sentry-android-core/proguard-rules.pro index 048871d26f..5b1934a8e3 100644 --- a/sentry-android-core/proguard-rules.pro +++ b/sentry-android-core/proguard-rules.pro @@ -11,10 +11,13 @@ -keep class androidx.lifecycle.ProcessLifecycleOwner { (...); } ##---------------End: proguard configuration for androidx.lifecycle ---------- -# To mitigate the issue on R8 site (https://issuetracker.google.com/issues/235733922) +# To mitigate the issue on R8 site (https://issuetracker.google.com/issues/235733922) # which comes through AGP 7.3.0-betaX and 7.4.0-alphaX -keepclassmembers enum io.sentry.** { *; } +# To filter out io.sentry frames from stacktraces +-keeppackagenames io.sentry.** + # don't warn jetbrains annotations -dontwarn org.jetbrains.annotations.** # don't warn about missing classes (mainly for Guardsquare's proguard). diff --git a/sentry-android-fragment/proguard-rules.pro b/sentry-android-fragment/proguard-rules.pro index a63b9e5add..71e58d6e8a 100644 --- a/sentry-android-fragment/proguard-rules.pro +++ b/sentry-android-fragment/proguard-rules.pro @@ -1,7 +1,8 @@ ##---------------Begin: proguard configuration for Fragment ---------- -# The Android SDK checks at runtime if this class is available via Class.forName +# The Android SDK checks at runtime if these classes are available via Class.forName -keep class io.sentry.android.fragment.FragmentLifecycleIntegration { (...); } +-keepnames class androidx.fragment.app.FragmentManager$FragmentLifecycleCallbacks # To ensure that stack traces is unambiguous # https://developer.android.com/studio/build/shrink-code#decode-stack-trace diff --git a/sentry-android-fragment/src/main/java/io/sentry/android/fragment/SentryFragmentLifecycleCallbacks.kt b/sentry-android-fragment/src/main/java/io/sentry/android/fragment/SentryFragmentLifecycleCallbacks.kt index 7cef61c085..2a414522e0 100644 --- a/sentry-android-fragment/src/main/java/io/sentry/android/fragment/SentryFragmentLifecycleCallbacks.kt +++ b/sentry-android-fragment/src/main/java/io/sentry/android/fragment/SentryFragmentLifecycleCallbacks.kt @@ -143,7 +143,7 @@ class SentryFragmentLifecycleCallbacks( } private fun getFragmentName(fragment: Fragment): String { - return fragment.javaClass.simpleName + return fragment.javaClass.canonicalName ?: fragment.javaClass.simpleName } private fun isRunningSpan(fragment: Fragment): Boolean = diff --git a/sentry-android-fragment/src/test/java/io/sentry/android/fragment/SentryFragmentLifecycleCallbacksTest.kt b/sentry-android-fragment/src/test/java/io/sentry/android/fragment/SentryFragmentLifecycleCallbacksTest.kt index 4a2bece739..f802a9124b 100644 --- a/sentry-android-fragment/src/test/java/io/sentry/android/fragment/SentryFragmentLifecycleCallbacksTest.kt +++ b/sentry-android-fragment/src/test/java/io/sentry/android/fragment/SentryFragmentLifecycleCallbacksTest.kt @@ -198,7 +198,7 @@ class SentryFragmentLifecycleCallbacksTest { assertEquals(SentryFragmentLifecycleCallbacks.FRAGMENT_LOAD_OP, it) }, check { - assertEquals("Fragment", it) + assertEquals("androidx.fragment.app.Fragment", it) } ) } @@ -272,7 +272,7 @@ class SentryFragmentLifecycleCallbacksTest { assertEquals("navigation", breadcrumb.type) assertEquals(INFO, breadcrumb.level) assertEquals(expectedState, breadcrumb.getData("state")) - assertEquals(fixture.fragment.javaClass.simpleName, breadcrumb.getData("screen")) + assertEquals(fixture.fragment.javaClass.canonicalName, breadcrumb.getData("screen")) }, anyOrNull() ) diff --git a/sentry-android-timber/proguard-rules.pro b/sentry-android-timber/proguard-rules.pro index f3557d3fd5..87f033ce58 100644 --- a/sentry-android-timber/proguard-rules.pro +++ b/sentry-android-timber/proguard-rules.pro @@ -1,7 +1,8 @@ ##---------------Begin: proguard configuration for Timber ---------- -# The Android SDK checks at runtime if this class is available via Class.forName +# The Android SDK checks at runtime if these classes are available via Class.forName -keep class io.sentry.android.timber.SentryTimberIntegration { (...); } +-keepnames class timber.log.Timber # To ensure that stack traces is unambiguous # https://developer.android.com/studio/build/shrink-code#decode-stack-trace