From 093c329ac30092306304b88c3eea246e2f4ce4b0 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Sat, 19 Nov 2022 23:23:35 +0100 Subject: [PATCH 1/6] Fix Timber and Fragment autoinstallation --- sentry-android-fragment/proguard-rules.pro | 1 + sentry-android-timber/proguard-rules.pro | 1 + 2 files changed, 2 insertions(+) diff --git a/sentry-android-fragment/proguard-rules.pro b/sentry-android-fragment/proguard-rules.pro index a63b9e5add..0d35017a98 100644 --- a/sentry-android-fragment/proguard-rules.pro +++ b/sentry-android-fragment/proguard-rules.pro @@ -2,6 +2,7 @@ # The Android SDK checks at runtime if this class is 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-timber/proguard-rules.pro b/sentry-android-timber/proguard-rules.pro index f3557d3fd5..d02c42a77e 100644 --- a/sentry-android-timber/proguard-rules.pro +++ b/sentry-android-timber/proguard-rules.pro @@ -2,6 +2,7 @@ # The Android SDK checks at runtime if this class is 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 From e05ea05ba61fbb26dec44bb32b6eaa17e4297883 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Sat, 19 Nov 2022 23:34:29 +0100 Subject: [PATCH 2/6] Switch to canonicalName for Fragment span op description and breadcrumbs --- .../sentry/android/fragment/SentryFragmentLifecycleCallbacks.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 = From ed66ce609d4bd56258744fe85b52e5d3c8cb29d4 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Sat, 19 Nov 2022 23:34:49 +0100 Subject: [PATCH 3/6] Skip our frames for obfuscated builds --- sentry-android-core/proguard-rules.pro | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sentry-android-core/proguard-rules.pro b/sentry-android-core/proguard-rules.pro index 048871d26f..f6e6264155 100644 --- a/sentry-android-core/proguard-rules.pro +++ b/sentry-android-core/proguard-rules.pro @@ -11,10 +11,12 @@ -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.** { *; } +-keeppackagenames io.sentry.** + # don't warn jetbrains annotations -dontwarn org.jetbrains.annotations.** # don't warn about missing classes (mainly for Guardsquare's proguard). From 094314f90ac557ba3546f8d176e32dc6a8fc60e4 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Sun, 20 Nov 2022 22:14:16 +0100 Subject: [PATCH 4/6] Changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) 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 From 9b2392e69ba76f79432d9fd9f4193ef467d330c9 Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Sun, 20 Nov 2022 22:22:37 +0100 Subject: [PATCH 5/6] Comments and test fix --- sentry-android-core/proguard-rules.pro | 1 + sentry-android-fragment/proguard-rules.pro | 2 +- .../android/fragment/SentryFragmentLifecycleCallbacksTest.kt | 2 +- sentry-android-timber/proguard-rules.pro | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sentry-android-core/proguard-rules.pro b/sentry-android-core/proguard-rules.pro index f6e6264155..5b1934a8e3 100644 --- a/sentry-android-core/proguard-rules.pro +++ b/sentry-android-core/proguard-rules.pro @@ -15,6 +15,7 @@ # 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 diff --git a/sentry-android-fragment/proguard-rules.pro b/sentry-android-fragment/proguard-rules.pro index 0d35017a98..71e58d6e8a 100644 --- a/sentry-android-fragment/proguard-rules.pro +++ b/sentry-android-fragment/proguard-rules.pro @@ -1,6 +1,6 @@ ##---------------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 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..0eb431a673 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 @@ -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 d02c42a77e..87f033ce58 100644 --- a/sentry-android-timber/proguard-rules.pro +++ b/sentry-android-timber/proguard-rules.pro @@ -1,6 +1,6 @@ ##---------------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 From 8acb15c5a589d250d8e8ff990fc8e3db4019366a Mon Sep 17 00:00:00 2001 From: Roman Zavarnitsyn Date: Sun, 20 Nov 2022 22:51:14 +0100 Subject: [PATCH 6/6] Fix test --- .../android/fragment/SentryFragmentLifecycleCallbacksTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0eb431a673..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) } ) }