|
2 | 2 |
|
3 | 3 | ## Unreleased |
4 | 4 |
|
| 5 | +Version 7 of the Sentry Android/Java SDK brings a variety of features and fixes. The most notable changes are: |
| 6 | +- Bumping `minSdk` level to 19 (Android 4.4) |
| 7 | +- 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 |
| 8 | +- `Sentry.getSpan` now returns the root transaction, which should improve the span hierarchy and make it leaner |
| 9 | +- Multiple improvements to reduce probability of the SDK causing ANRs |
| 10 | +- New `sentry-okhttp` artifact is unbundled from Android and can be used in pure JVM-only apps |
| 11 | + |
| 12 | +## Sentry Self-hosted Compatibility |
| 13 | + |
| 14 | +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](https://develop.sentry.dev/self-hosted/) (aka onpremise), you will need to [upgrade](https://develop.sentry.dev/self-hosted/releases/). If you're using `sentry.io` no action is required. |
| 15 | + |
| 16 | +## Sentry Integrations Version Compatibility (Android) |
| 17 | + |
| 18 | +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) |
| 19 | + |
| 20 | +For example, if you're using the [Sentry Android Gradle plugin](https://github.com/getsentry/sentry-android-gradle-plugin) with the `autoInstallation` [feature](https://docs.sentry.io/platforms/android/configuration/gradle/#auto-installation) (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: |
| 21 | + |
| 22 | +```kotlin |
| 23 | +sentry { |
| 24 | + autoInstallation { |
| 25 | + sentryVersion.set("7.0.0") |
| 26 | + } |
| 27 | +} |
| 28 | +``` |
| 29 | + |
| 30 | +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. |
| 31 | + |
| 32 | +## Breaking Changes |
| 33 | + |
| 34 | +- Bump min API to 19 ([#2883](https://github.com/getsentry/sentry-java/pull/2883)) |
| 35 | +- If you're using `sentry-kotlin-extensions`, it requires `kotlinx-coroutines-core` version `1.6.1` or higher now ([#2838](https://github.com/getsentry/sentry-java/pull/2838)) |
| 36 | +- Move enableNdk from SentryOptions to SentryAndroidOptions ([#2793](https://github.com/getsentry/sentry-java/pull/2793)) |
| 37 | +- Apollo v2 BeforeSpanCallback now allows returning null ([#2890](https://github.com/getsentry/sentry-java/pull/2890)) |
| 38 | +- `SentryOkHttpUtils` was removed from public API as it's been exposed by mistake ([#3005](https://github.com/getsentry/sentry-java/pull/3005)) |
| 39 | +- `Scope` now implements the `IScope` interface, therefore some methods like `ScopeCallback.run` accept `IScope` now ([#3066](https://github.com/getsentry/sentry-java/pull/3066)) |
| 40 | +- Cleanup `startTransaction` overloads ([#2964](https://github.com/getsentry/sentry-java/pull/2964)) |
| 41 | + - We have reduced the number of overloads by allowing to pass in a `TransactionOptions` object instead of having separate parameters for certain options |
| 42 | + - `TransactionOptions` has defaults set and can be customized, for example: |
| 43 | + |
| 44 | +```kotlin |
| 45 | +// old |
| 46 | +val transaction = Sentry.startTransaction("name", "op", bindToScope = true) |
| 47 | +// new |
| 48 | +val transaction = Sentry.startTransaction("name", "op", TransactionOptions().apply { isBindToScope = true }) |
| 49 | +``` |
| 50 | + |
| 51 | +## Behavioural Changes |
| 52 | + |
| 53 | +- Android only: `Sentry.getSpan()` returns the root span/transaction instead of the latest span ([#2855](https://github.com/getsentry/sentry-java/pull/2855)) |
| 54 | +- Capture failed HTTP and GraphQL (Apollo) requests by default ([#2794](https://github.com/getsentry/sentry-java/pull/2794)) |
| 55 | + - 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](https://docs.sentry.io/platforms/android/integrations/okhttp#http-client-errors) and [Apollo3](https://docs.sentry.io/platforms/android/integrations/apollo3#graphql-client-errors) respectively. |
| 56 | +- Measure AppStart time till First Draw instead of `onResume` ([#2851](https://github.com/getsentry/sentry-java/pull/2851)) |
| 57 | +- Automatic user interaction tracking: every click now starts a new automatic transaction ([#2891](https://github.com/getsentry/sentry-java/pull/2891)) |
| 58 | + - 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 |
| 59 | +- Add deadline timeout for automatic transactions ([#2865](https://github.com/getsentry/sentry-java/pull/2865)) |
| 60 | + - 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 |
| 61 | +- Set ip_address to {{auto}} by default, even if sendDefaultPII is disabled ([#2860](https://github.com/getsentry/sentry-java/pull/2860)) |
| 62 | + - Instead use the "Prevent Storing of IP Addresses" option in the "Security & Privacy" project settings on sentry.io |
| 63 | +- Raw logback message and parameters are now guarded by `sendDefaultPii` if an `encoder` has been configured ([#2976](https://github.com/getsentry/sentry-java/pull/2976)) |
| 64 | +- 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](https://github.com/getsentry/sentry-java/pull/3065)) |
| 65 | +- The `ScopeCallback` in `withScope` is now always executed ([#3066](https://github.com/getsentry/sentry-java/pull/3066)) |
| 66 | + |
| 67 | +## Deprecations |
| 68 | + |
| 69 | +- `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](https://github.com/getsentry/sentry-java/pull/3005)) |
| 70 | + |
| 71 | +## Other Changes |
| 72 | + |
| 73 | +### Features |
| 74 | + |
| 75 | +- Observe network state to upload any unsent envelopes ([#2910](https://github.com/getsentry/sentry-java/pull/2910)) |
| 76 | + - Android: it works out-of-the-box as part of the default `SendCachedEnvelopeIntegration` |
| 77 | + - JVM: you'd have to install `SendCachedEnvelopeFireAndForgetIntegration` as mentioned in https://docs.sentry.io/platforms/java/configuration/#configuring-offline-caching and provide your own implementation of `IConnectionStatusProvider` via `SentryOptions` |
| 78 | +- Add `sentry-okhttp` module to support instrumenting OkHttp in non-Android projects ([#3005](https://github.com/getsentry/sentry-java/pull/3005)) |
| 79 | +- Do not filter out Sentry SDK frames in case of uncaught exceptions ([#3021](https://github.com/getsentry/sentry-java/pull/3021)) |
| 80 | +- Do not try to send and drop cached envelopes when rate-limiting is active ([#2937](https://github.com/getsentry/sentry-java/pull/2937)) |
| 81 | + |
5 | 82 | ### Fixes |
6 | 83 |
|
| 84 | +- Use `getMyMemoryState()` instead of `getRunningAppProcesses()` to retrieve process importance ([#3004](https://github.com/getsentry/sentry-java/pull/3004)) |
| 85 | + - This should prevent some app stores from flagging apps as violating their privacy |
| 86 | +- Reduce flush timeout to 4s on Android to avoid ANRs ([#2858](https://github.com/getsentry/sentry-java/pull/2858)) |
| 87 | +- Reduce timeout of AsyncHttpTransport to avoid ANR ([#2879](https://github.com/getsentry/sentry-java/pull/2879)) |
| 88 | +- Do not overwrite UI transaction status if set by the user ([#2852](https://github.com/getsentry/sentry-java/pull/2852)) |
| 89 | +- Capture unfinished transaction on Scope with status `aborted` in case a crash happens ([#2938](https://github.com/getsentry/sentry-java/pull/2938)) |
| 90 | + - This will fix the link between transactions and corresponding crashes, you'll be able to see them in a single trace |
| 91 | +- Fix Coroutine Context Propagation using CopyableThreadContextElement ([#2838](https://github.com/getsentry/sentry-java/pull/2838)) |
| 92 | +- Fix don't overwrite the span status of unfinished spans ([#2859](https://github.com/getsentry/sentry-java/pull/2859)) |
| 93 | +- Migrate from `default` interface methods to proper implementations in each interface implementor ([#2847](https://github.com/getsentry/sentry-java/pull/2847)) |
| 94 | + - This prevents issues when using the SDK on older AGP versions (< 4.x.x) |
7 | 95 | - Reduce main thread work on init ([#3036](https://github.com/getsentry/sentry-java/pull/3036)) |
8 | 96 | - Move Integrations registration to background on init ([#3043](https://github.com/getsentry/sentry-java/pull/3043)) |
| 97 | +- Fix `SentryOkHttpInterceptor.BeforeSpanCallback` was not finishing span when it was dropped ([#2958](https://github.com/getsentry/sentry-java/pull/2958)) |
9 | 98 |
|
10 | 99 | ## 6.34.0 |
11 | 100 |
|
|
0 commit comments