From 4f27bb780ccc16f6297aa61bd26838f22bb4d388 Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Wed, 20 May 2026 16:49:31 +0200 Subject: [PATCH] feat(android): Warn at runtime when sentry-android version mismatches Adds a runtime warning when the resolved sentry-android version differs from what @sentry/react-native expects, which can happen when the Sentry Android Gradle Plugin's autoInstallation overrides the pinned version. Closes https://github.com/getsentry/sentry-react-native/issues/3671 Co-Authored-By: Claude Opus 4.6 --- .../main/java/io/sentry/react/RNSentryStart.java | 13 +++++++++++++ .../main/java/io/sentry/react/RNSentryVersion.java | 1 + scripts/update-android.sh | 6 ++++++ 3 files changed, 20 insertions(+) diff --git a/packages/core/android/src/main/java/io/sentry/react/RNSentryStart.java b/packages/core/android/src/main/java/io/sentry/react/RNSentryStart.java index 4f792521ac..5151db7369 100644 --- a/packages/core/android/src/main/java/io/sentry/react/RNSentryStart.java +++ b/packages/core/android/src/main/java/io/sentry/react/RNSentryStart.java @@ -362,6 +362,19 @@ static void updateWithReactDefaults( * applied after the configureOptions callback during manual native initialization. */ static void updateWithReactFinals(@NotNull SentryAndroidOptions options) { + if (!BuildConfig.VERSION_NAME.equals(RNSentryVersion.EXPECTED_ANDROID_SDK_VERSION)) { + options + .getLogger() + .log( + SentryLevel.WARNING, + "sentry-android resolved to %s, but @sentry/react-native expects %s. " + + "This may cause crashes at startup. " + + "If you use the Sentry Android Gradle Plugin, disable autoInstallation: " + + "https://docs.sentry.io/platforms/react-native/manual-setup/manual-setup/", + BuildConfig.VERSION_NAME, + RNSentryVersion.EXPECTED_ANDROID_SDK_VERSION); + } + BeforeSendCallback userBeforeSend = options.getBeforeSend(); options.setBeforeSend( (event, hint) -> { diff --git a/packages/core/android/src/main/java/io/sentry/react/RNSentryVersion.java b/packages/core/android/src/main/java/io/sentry/react/RNSentryVersion.java index 64f76ccc08..d82ec157d3 100644 --- a/packages/core/android/src/main/java/io/sentry/react/RNSentryVersion.java +++ b/packages/core/android/src/main/java/io/sentry/react/RNSentryVersion.java @@ -6,4 +6,5 @@ class RNSentryVersion { static final String NATIVE_SDK_NAME = "sentry.native.android.react-native"; static final String ANDROID_SDK_NAME = "sentry.java.android.react-native"; static final String REACT_NATIVE_SDK_NAME = "sentry.javascript.react-native"; + static final String EXPECTED_ANDROID_SDK_VERSION = "8.41.0"; } diff --git a/scripts/update-android.sh b/scripts/update-android.sh index efbd17d43f..aa2f27e3e6 100755 --- a/scripts/update-android.sh +++ b/scripts/update-android.sh @@ -33,6 +33,12 @@ set-version) expoHandlerContent=$(echo "$expoHandlerContent" | sed -E "s/(io\.sentry:sentry-android:)([0-9\.]+)/\1$2/g") echo "$expoHandlerContent" >$expoHandlerFile + # Update expected version constant in RNSentryVersion.java + versionFile='src/main/java/io/sentry/react/RNSentryVersion.java' + versionContent=$(cat $versionFile) + versionContent=$(echo "$versionContent" | sed -E "s/(EXPECTED_ANDROID_SDK_VERSION = \")([0-9\.]+)/\1$2/") + echo "$versionContent" >$versionFile + # Update replay-stubs to match cd $ORIGINAL_DIR ./update-android-stubs.sh set-version $2