Skip to content

Releases: getsentry/sentry-java

7.0.0

30 Nov 12:48
Compare
Choose a tag to compare

Version 7 of the Sentry Android/Java SDK brings a variety of features and fixes. The most notable changes are:

  • Bumping minSdk level to 19 (Android 4.4)
  • The SDK will now listen to connectivity changes and try to re-upload cached events when internet connection is re-established additionally to uploading events on app restart
  • Sentry.getSpan now returns the root transaction, which should improve the span hierarchy and make it leaner
  • Multiple improvements to reduce probability of the SDK causing ANRs
  • New sentry-okhttp artifact is unbundled from Android and can be used in pure JVM-only apps

Sentry Self-hosted Compatibility

This SDK version is compatible with a self-hosted version of Sentry 22.12.0 or higher. If you are using an older version of self-hosted Sentry (aka onpremise), you will need to upgrade. If you're using sentry.io no action is required.

Sentry Integrations Version Compatibility (Android)

Make sure to align all Sentry dependencies to the same version when bumping the SDK to 7.+, otherwise it will crash at runtime due to binary incompatibility. (E.g. if you're using -timber, -okhttp or other packages)

For example, if you're using the Sentry Android Gradle plugin with the autoInstallation feature (enabled by default), make sure to use version 4.+ of the gradle plugin together with version 7.+ of the SDK. If you can't do that for some reason, you can specify sentry version via the plugin config block:

sentry {
  autoInstallation {
    sentryVersion.set("7.0.0")
  }
}

Similarly, if you have a Sentry SDK (e.g. sentry-android-core) dependency on one of your Gradle modules and you're updating it to 7.+, make sure the Gradle plugin is at 4.+ or specify the SDK version as shown in the snippet above.

Breaking Changes

  • Bump min API to 19 (#2883)
  • If you're using sentry-kotlin-extensions, it requires kotlinx-coroutines-core version 1.6.1 or higher now (#2838)
  • Move enableNdk from SentryOptions to SentryAndroidOptions (#2793)
  • Apollo v2 BeforeSpanCallback now allows returning null (#2890)
  • SentryOkHttpUtils was removed from public API as it's been exposed by mistake (#3005)
  • Scope now implements the IScope interface, therefore some methods like ScopeCallback.run accept IScope now (#3066)
  • Cleanup startTransaction overloads (#2964)
    • We have reduced the number of overloads by allowing to pass in a TransactionOptions object instead of having separate parameters for certain options
    • TransactionOptions has defaults set and can be customized, for example:
// old
val transaction = Sentry.startTransaction("name", "op", bindToScope = true)
// new
val transaction = Sentry.startTransaction("name", "op", TransactionOptions().apply { isBindToScope = true })

Behavioural Changes

  • Android only: Sentry.getSpan() returns the root span/transaction instead of the latest span (#2855)
  • Capture failed HTTP and GraphQL (Apollo) requests by default (#2794)
    • This can increase your event consumption and may affect your quota, because we will report failed network requests as Sentry events by default, if you're using the sentry-android-okhttp or sentry-apollo-3 integrations. You can customize what errors you want/don't want to have reported for OkHttp and Apollo3 respectively.
  • Measure AppStart time till First Draw instead of onResume (#2851)
  • Automatic user interaction tracking: every click now starts a new automatic transaction (#2891)
    • Previously performing a click on the same UI widget twice would keep the existing transaction running, the new behavior now better aligns with other SDKs
  • Add deadline timeout for automatic transactions (#2865)
    • This affects all automatically generated transactions on Android (UI, clicks), the default timeout is 30s, meaning the automatic transaction will be force-finished with status deadline_exceeded when reaching the deadline
  • Set ip_address to {{auto}} by default, even if sendDefaultPII is disabled (#2860)
    • Instead use the "Prevent Storing of IP Addresses" option in the "Security & Privacy" project settings on sentry.io
  • Raw logback message and parameters are now guarded by sendDefaultPii if an encoder has been configured (#2976)
  • The maxSpans setting (defaults to 1000) is enforced for nested child spans which means a single transaction can have maxSpans number of children (nested or not) at most (#3065)
  • The ScopeCallback in withScope is now always executed (#3066)

Deprecations

  • sentry-android-okhttp was deprecated in favour of the new sentry-okhttp module. Make sure to replace io.sentry.android.okhttp package name with io.sentry.okhttp before the next major, where the classes will be removed (#3005)

Other Changes

Features

  • Observe network state to upload any unsent envelopes (#2910)
  • Add sentry-okhttp module to support instrumenting OkHttp in non-Android projects (#3005)
  • Do not filter out Sentry SDK frames in case of uncaught exceptions (#3021)
  • Do not try to send and drop cached envelopes when rate-limiting is active (#2937)

Fixes

  • Use getMyMemoryState() instead of getRunningAppProcesses() to retrieve process importance (#3004)
    • This should prevent some app stores from flagging apps as violating their privacy
  • Reduce flush timeout to 4s on Android to avoid ANRs (#2858)
  • Reduce timeout of AsyncHttpTransport to avoid ANR (#2879)
  • Do not overwrite UI transaction status if set by the user (#2852)
  • Capture unfinished transaction on Scope with status aborted in case a crash happens (#2938)
    • This will fix the link between transactions and corresponding crashes, you'll be able to see them in a single trace
  • Fix Coroutine Context Propagation using CopyableThreadContextElement (#2838)
  • Fix don't overwrite the span status of unfinished spans (#2859)
  • Migrate from default interface methods to proper implementations in each interface implementor (#2847)
    • This prevents issues when using the SDK on older AGP versions (< 4.x.x)
  • Reduce main thread work on init (#3036)
  • Move Integrations registration to background on init (#3043)
  • Fix SentryOkHttpInterceptor.BeforeSpanCallback was not finishing span when it was dropped (#2958)

6.34.0

20 Nov 13:46
Compare
Choose a tag to compare

Features

  • Add current activity name to app context (#2999)
  • Add MonitorConfig param to CheckInUtils.withCheckIn (#3038)
    • This makes it easier to automatically create or update (upsert) monitors.
  • (Internal) Extract Android Profiler and Measurements for Hybrid SDKs (#3016)
  • (Internal) Remove SentryOptions dependency from AndroidProfiler (#3051)
  • (Internal) Add readBytesFromFile for use in Hybrid SDKs (#3052)
  • (Internal) Add getProguardUuid for use in Hybrid SDKs (#3054)

Fixes

  • Fix SIGSEV, SIGABRT and SIGBUS crashes happening after/around the August Google Play System update, see #2955 for more details (fix provided by Native SDK bump)
  • Ensure DSN uses http/https protocol (#3044)

Dependencies

7.0.0-rc.2

14 Nov 22:23
Compare
Choose a tag to compare
7.0.0-rc.2 Pre-release
Pre-release

Fixes

  • Fix SIGSEV, SIGABRT and SIGBUS crashes happening after/around the August Google Play System update, see #2955 for more details (fix provided by Native SDK bump)

Dependencies

6.33.2-beta.1

13 Nov 12:46
Compare
Choose a tag to compare
6.33.2-beta.1 Pre-release
Pre-release

Fixes

  • Fix SIGSEV, SIGABRT and SIGBUS crashes happening after/around the August Google Play System update, see #2955 for more details (fix provided by Native SDK bump)

Dependencies

7.0.0-rc.1

08 Nov 11:18
Compare
Choose a tag to compare
7.0.0-rc.1 Pre-release
Pre-release

Features

  • Do not filter out Sentry SDK frames in case of uncaught exceptions (#3021)

Breaking changes:

  • Cleanup startTransaction overloads (#2964)
    • We have reduce the number of overloads by allowing to pass in TransactionOptions instead of having separate parameters for certain options.
    • TransactionOptions has defaults set and can be customized
  • Raw logback message and parameters are now guarded by sendDefaultPii if an encoder has been configured (#2976)

Fixes

  • Use getMyMemoryState() instead of getRunningAppProcesses() to retrieve process importance (#3004)
    • This should prevent some app stores from flagging apps as violating their privacy

6.33.1

07 Nov 11:17
cb93e00
Compare
Choose a tag to compare

Fixes

  • Do not register sentrySpringFilter in ServletContext for Spring Boot (#3027)

6.33.0

02 Nov 11:33
Compare
Choose a tag to compare

Features

  • Add thread information to spans (#2998)
  • Use PixelCopy API for capturing screenshots on API level 24+ (#3008)

Fixes

  • Fix crash when HTTP connection error message contains formatting symbols (#3002)
  • Cap max number of stack frames to 100 to not exceed payload size limit (#3009)
    • This will ensure we report errors with a big number of frames such as StackOverflowError
  • Fix user interaction tracking not working for Jetpack Compose 1.5+ (#3010)
  • Make sure to close all Closeable resources (#3000)

6.32.0

18 Oct 16:11
Compare
Choose a tag to compare

Features

  • Make DebugImagesLoader public (#2993)

Fixes

  • Make SystemEventsBroadcastReceiver exported on API 33+ (#2990)
    • This will fix the SystemEventsBreadcrumbsIntegration crashes that you might have encountered on Play Console

6.31.0

12 Oct 17:14
Compare
Choose a tag to compare

Features

  • Improve default debouncing mechanism (#2945)
  • Add CheckInUtils.withCheckIn which abstracts away some of the manual check-ins complexity (#2959)
  • Add @SentryCaptureExceptionParameter annotation which captures exceptions passed into an annotated method (#2764)
    • This can be used to replace Sentry.captureException calls in @ExceptionHandler of a @ControllerAdvice
  • Add ServerWebExchange to Hint for WebFlux as WEBFLUX_EXCEPTION_HANDLER_EXCHANGE (#2977)
  • Allow filtering GraphQL errors (#2967)
    • This list can be set directly when calling the constructor of SentryInstrumentation
    • For Spring Boot it can also be set in application.properties as sentry.graphql.ignored-error-types=SOME_ERROR,ANOTHER_ERROR

Fixes

  • Add OkHttp span auto-close when response body is not read (#2923)
  • Fix json parsing of nullable/empty fields for Hybrid SDKs (#2968)
    • (Internal) Rename nextList to nextListOrNull to actually match what the method does
    • (Hybrid) Check if there's any object in a collection before trying to parse it (which prevents the "Failed to deserilize object in list" log message)
    • (Hybrid) If a date can't be parsed as an ISO timestamp, attempts to parse it as millis silently, without printing a log message
    • (Hybrid) If op is not defined as part of SpanContext, fallback to an empty string, because the filed is optional in the spec
  • Always attach OkHttp errors and Http Client Errors only to call root span (#2961)
  • Fixed crash accessing Choreographer instance (#2970)

Dependencies

7.0.0-beta.1

29 Sep 07:31
Compare
Choose a tag to compare
7.0.0-beta.1 Pre-release
Pre-release

Features

Breaking changes:

  • Capture failed HTTP requests by default (#2794)
  • Reduce flush timeout to 4s on Android to avoid ANRs (#2858)
  • Set ip_address to {{auto}} by default, even if sendDefaultPII is disabled (#2860)
    • Instead use the "Prevent Storing of IP Addresses" option in the "Security & Privacy" project settings on sentry.io
  • Reduce timeout of AsyncHttpTransport to avoid ANR (#2879)
  • Add deadline timeout for automatic transactions (#2865)
    • This affects all automatically generated transactions on Android (UI, clicks), the default timeout is 30s
  • Apollo v2 BeforeSpanCallback now allows returning null (#2890)
  • Automatic user interaction tracking: every click now starts a new automatic transaction (#2891)
    • Previously performing a click on the same UI widget twice would keep the existing transaction running, the new behavior now better aligns with other SDKs
  • Android only: If global hub mode is enabled, Sentry.getSpan() returns the root span instead of the latest span (#2855)
  • Observe network state to upload any unsent envelopes (#2910)
  • Do not try to send and drop cached envelopes when rate-limiting is active (#2937)

Fixes

  • Measure AppStart time till First Draw instead of onResume (#2851)
  • Do not overwrite UI transaction status if set by the user (#2852)
  • Capture unfinished transaction on Scope with status aborted in case a crash happens (#2938)
    • This will fix the link between transactions and corresponding crashes, you'll be able to see them in a single trace

Breaking changes:

  • Move enableNdk from SentryOptions to SentryAndroidOptions (#2793)
  • Fix Coroutine Context Propagation using CopyableThreadContextElement, requires kotlinx-coroutines-core version 1.6.1 or higher (#2838)
  • Bump min API to 19 (#2883)
  • Fix don't overwrite the span status of unfinished spans (#2859)
    • If you're using a self hosted version of sentry, sentry self hosted >= 22.12.0 is required
  • Migrate from default interface methods to proper implementations in each interface implementor (#2847)
    • This prevents issues when using the SDK on older AGP versions (< 4.x.x)
    • Make sure to align Sentry dependencies to the same version when bumping the SDK to 7.+, otherwise it will crash at runtime due to binary incompatibility.
      (E.g. if you're using -timber, -okhttp or other packages)