Skip to content

Update dependency io.sentry:sentry to v8 - #300

Open
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/io.sentry-sentry-8.x
Open

renovate[bot] wants to merge 1 commit into
masterfrom
renovate/io.sentry-sentry-8.x

Conversation

@renovate

@renovate renovate Bot commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
io.sentry:sentry 7.21.08.58.0 age confidence

Release Notes

getsentry/sentry-java (io.sentry:sentry)

v8.58.0

Compare Source

Features
  • Add LocalSentrySpan to sentry-compose so apps can provide a parent ISpan to a composable subtree and have nested SentryTraced spans attach to it ([#​6112]#​6112)

  • Add dataCollection, a fine-grained replacement for sendDefaultPii, for controlling data collected automatically by SDK integrations (#​5759)

    [!WARNING]
    sendDefaultPii will be removed in the next major SDK version. Migrate to dataCollection before upgrading.

    • Until then, when dataCollection is not configured, the SDK preserves the existing sendDefaultPii behavior.
    • Configuring any dataCollection option makes it the source of truth. sendDefaultPii is then ignored, and omitted dataCollection options use the defaults below.
    • The Logback appender is a compatibility exception. When an encoder is configured, sendDefaultPii=true continues to include the original message template and parameters. To opt in independently of sendDefaultPii, set <includeUnencodedMessage>true</includeUnencodedMessage> on the Sentry appender in logback.xml or logback-spring.xml.
    • Data explicitly supplied through APIs such as Sentry.setUser, scopes, event processors, or beforeSend is not affected.

    To opt in to the documented dataCollection defaults without configuring an individual option:

    Sentry.init(options -> options.getDataCollection().forceDataCollection());
    Option Default Behavior
    userInfo true Allows integrations to populate user identity and IP address information automatically.
    cookies { mode: DENY_LIST, terms: [] } Collects cookies while filtering sensitive values.
    httpHeaders.request { mode: DENY_LIST, terms: [] } Collects request headers while filtering sensitive values.
    httpHeaders.response { mode: DENY_LIST, terms: [] } Collects response headers while filtering sensitive values.
    httpBodies All supported body types Collects supported incoming and outgoing request and response bodies. An empty set disables body collection.
    urlQueryParams { mode: DENY_LIST, terms: [] } Collects URL query parameters while filtering sensitive values.
    graphql.document true Collects GraphQL documents.
    graphql.variables true Collects GraphQL variables.
    databaseQueryData true Allows collection of associated query data, such as bound parameters, write payloads, and results, where supported. Sanitized query statements and structural database metadata remain available.
    filePaths true Allows file-system instrumentation to collect file and directory paths. File extensions and byte counts remain available when disabled.

    Cookies, HTTP headers, and URL query parameters support three modes:

    • OFF: Do not collect the category.
    • DENY_LIST: Collect values except those matching the built-in sensitive deny-list or additional configured terms.
    • ALLOW_LIST: Only send plaintext values for matching terms. The built-in sensitive deny-list still applies.

    Matching is case-insensitive and partial. The built-in sensitive deny-list contains auth, token, secret, password, passwd, pwd, key, jwt, bearer, sso, saml, csrf, xsrf, credentials, session, sid, and identity. Filtered values are replaced with "[Filtered]". Custom deny-list terms extend rather than replace this list.

    Configure all HTTP body types, a custom cookie deny-list, a request-header allow-list, and disable URL query parameter and file path collection in an options callback:

    Sentry.init(
        options -> {
          options
              .getDataCollection()
              .setHttpBodies(
                  EnumSet.of(
                      HttpBodyType.INCOMING_REQUEST,
                      HttpBodyType.OUTGOING_REQUEST,
                      HttpBodyType.INCOMING_RESPONSE,
                      HttpBodyType.OUTGOING_RESPONSE));
          options
              .getDataCollection()
              .setCookies(
                  KeyValueCollectionBehavior.denyList(
                      "forwarded", "-ip", "remote-", "via", "-user"));
          options
              .getDataCollection()
              .getHttpHeaders()
              .setRequest(
                  KeyValueCollectionBehavior.allowList("content-type", "x-request-id"));
          options
              .getDataCollection()
              .setUrlQueryParams(KeyValueCollectionBehavior.off());
          options.getDataCollection().setFilePaths(false);
        });

    Configure the same options in sentry.properties:

    data-collection.http-bodies=incoming_request,outgoing_request,incoming_response,outgoing_response
    data-collection.cookies.mode=deny_list
    data-collection.cookies.terms=forwarded,-ip,remote-,via,-user
    data-collection.http-headers.request.mode=allow_list
    data-collection.http-headers.request.terms=content-type,x-request-id
    data-collection.url-query-params.mode=off
    data-collection.file-paths=false

    Configure them with Spring Boot properties:

    sentry.data-collection.http-bodies=incoming-request,outgoing-request,incoming-response,outgoing-response
    sentry.data-collection.cookies.mode=deny-list
    sentry.data-collection.cookies.terms=forwarded,-ip,remote-,via,-user
    sentry.data-collection.http-headers.request.mode=allow-list
    sentry.data-collection.http-headers.request.terms=content-type,x-request-id
    sentry.data-collection.url-query-params.mode=off
    sentry.data-collection.file-paths=false

    Configure them in AndroidManifest.xml:

    <meta-data
        android:name="io.sentry.data-collection.http-bodies"
        android:value="incoming_request,outgoing_request,incoming_response,outgoing_response" />
    <meta-data
        android:name="io.sentry.data-collection.cookies.mode"
        android:value="deny_list" />
    <meta-data
        android:name="io.sentry.data-collection.cookies.terms"
        android:value="forwarded,-ip,remote-,via,-user" />
    <meta-data
        android:name="io.sentry.data-collection.http-headers.request.mode"
        android:value="allow_list" />
    <meta-data
        android:name="io.sentry.data-collection.http-headers.request.terms"
        android:value="content-type,x-request-id" />
    <meta-data
        android:name="io.sentry.data-collection.url-query-params.mode"
        android:value="off" />
    <meta-data
        android:name="io.sentry.data-collection.file-paths"
        android:value="false" />

    See the Data Collection documentation for all configuration keys, supported integrations, and migration guidance.

Fixes
  • Disable URL caching when reading META-INF/MANIFEST.MF files during version detection so that the SDK no longer keeps jar file handles open for the life of the process (#​6124
  • Keep the EventListener wrapped by SentryOkHttpEventListener per Call (#​6003)

v8.57.0

Compare Source

Behavioral Changes
  • Measure HTTP rate-limit backoff on a monotonic clock instead of the wall clock, so that a device time change no longer lifts or extends an active rate limit (#​6030)
Features
  • Add Android SDK support for reporting MemoryLimiter app exits recovered from ApplicationExitInfo (#​6111).
  • Sentry can now configure Log4j2 automatically for Spring Boot 4 when sentry-log4j2 is on the classpath and Log4j2 Core is the active logging backend (#​5403)
    • Enable automatic appender registration with:
      sentry.logging.enabled=true
      Automatic registration is disabled by default for now and will be enabled by default in the next major release.
    • The appender is attached to the root logger by default. To attach it to specific loggers instead, configure one or more non-overlapping logger names:
      sentry.logging.loggers[0]=com.example
      sentry.logging.loggers[1]=org.example
    • Configure the minimum level for creating breadcrumbs. The default is INFO:
      sentry.logging.minimum-breadcrumb-level=INFO
    • Configure the minimum level for creating Sentry error events. The default is ERROR:
      sentry.logging.minimum-event-level=ERROR
    • Configure the minimum level for sending Sentry structured logs. The default is INFO:
      sentry.logging.minimum-level=INFO
      Structured logs must also be enabled:
      sentry.logs.enabled=true
  • Sentry can now configure Log4j2 automatically for Spring Boot 3 when sentry-log4j2 is on the classpath and Log4j2 Core is the active logging backend (#​6072)
    • Disabled by default for now; enable it and configure levels the same way as described in the Spring Boot 4 entry above (sentry.logging.enabled=true)
Fixes
  • Support ws and wss URL parsing for WebSocket instrumentation (#​6064)
  • Keep resolving the server name after Sentry.close() or a re-init. Closing the SDK shut down the shared hostname cache for the life of the process, so server_name silently froze at the value it had last resolved (#​6119)
  • Order breadcrumbs by the timestamp they carry rather than by when they were created in the current process, so breadcrumbs restored from disk or handed over by a hybrid SDK no longer sort as if they had just happened (#​6097)
Internal
  • Deprecate RateLimiter(ICurrentDateProvider, SentryOptions) in favor of RateLimiter(SentryOptions), whose backoff is measured on a monotonic ticker (#​6030)
  • Deprecate AndroidCurrentDateProvider.getInstance() in favor of MonotonicTicker, which counts time spent in deep sleep and cannot be confused with the epoch-based CurrentDateProvider (#​6103)

v8.56.0

Compare Source

Fixes
  • Update SentryTraced so that it now honors options.setIgnoredSpanOrigins (#​6058)
  • SentryTraced now checks for its owning transaction dynamically rather than once per app process. The latter caused SentryTraced spans to be dropped process-wide once the original transaction finished (#​6057)
  • Fix typos in Spring GraphQL integration names (GrahQL to GraphQL) (#​6061)
  • Populate the Android connection status cache during the first two minutes after boot, instead of treating the empty cache as up to date (#​6029)
  • Prevent SentryTraced from producing dangling spans if recomposition is abandoned or drawing fails (#​6049)
  • Report a consistent app start type across the app start measurement, contexts.app and the app.start span attributes (#​6006)
Improvements
  • Emit a single ui.compose span per SentryTraced on initial composition instead of one on every recomposition, and set the origin on ui.render spans (#​6051)
Internal
  • Add an internal MonotonicTicker abstraction with Deadline and Stopwatch primitives (#​6028)
  • Add internal Timestamp, EpochClock and AnchoredClock, so related instants project from one wall-clock reading instead of each reading the clock (#​6045)
Dependencies

v8.55.0

Compare Source

Features
  • Add Session.State.Unhandled for unhandled errors that do not terminate the process (#​5919)
Improvements
  • Move ANR profiling out of experimental (#​6042)
Fixes
  • Keep dropped tombstone and ANR events dropped, instead of reporting the same app exit again at every app start (#​6002)
  • Apply Sentry.withScope and Sentry.withIsolationScope data to events captured inside the callback when globalHubMode is enabled (#​6004)
    • globalHubMode is enabled by default on Android, where tags, extras, contexts and level set inside the callback were silently dropped
    • Scopes that are explicitly made current, e.g. via Sentry.setCurrentScopes or the SentryContext coroutine integration, are now also honoured when globalHubMode is enabled
    • Sentry.pushScope, Sentry.pushIsolationScope and Sentry.popScope remain no-ops when globalHubMode is enabled
  • Drop the profiler_id from transactions and spans when no Perfetto profile covers them, e.g. when Android's ProfilingManager rate limits the profiling request (#​6015)
  • Prevent events from being dropped when feature flags are added while an event is being captured (#​5989)
Internal
  • Add InternalSentrySdk.captureEnvelopeNonTerminating for hybrid SDKs (e.g. Flutter) so unhandled exceptions that don't terminate the process no longer end the session as crashed (#​5921)
  • Add InternalSentrySdk.updateSessionForDroppedEventNonTerminating so hybrid SDKs can still update the session when an error is dropped by sampling (#​5990)
Dependencies

v8.54.0

Compare Source

Features
  • Set app.vitals.start.screen and app.vitals.start.type on standalone app.start children (#​6005)
  • Add screenshot attachment button to the Android user feedback widget (#​5828)
    • Users can now attach a screenshot when submitting feedback. Enabled by default; can be disabled via SentryFeedbackOptions.setEnableAttachScreenshot(false) or the io.sentry.feedback.enable-attach-screenshot manifest flag.
    • Requires the androidx.activity >=1.8.2 dependency
  • Add manual Session Replay controls through Sentry.replay() (#​5978)
    • Explicit start() and startBuffering() calls bypass the configured replay sample rates; sampling still controls automatic startup.
    • start() starts a full-session replay and does nothing if one is already recording.
    • startBuffering() keeps a rolling buffer that is sent on flush() or an error, then continues in session mode.
    • stop() ends the current replay; the next start() creates a new replay session.
    • pause() suspends recording until resume() and remains paused across background and foreground transitions and automatic replay restarts in the same process.
    • resume() continues the same manually paused replay.
    • flush() sends the current replay data, or starts a full-session replay when recording is stopped.
Fixes
  • Prevents inclusion of null. prefix before default-package class names when parsing Java and JNI frames from Android ANR thread dumps (#​5979)
  • Prevent duplicated breadcrumbs on tombstone-merged native crash events (#​5888)
  • Prevent a class of Session Replay deadlocks by confining lifecycle state changes to Android's main thread (#​5965)
  • Symbolicate tombstone native frames for libraries loaded directly from APKs (#​5992)
  • Prevent a deadlock between the app start extension and the Android performance event processor (#​6007)
Performance
  • Defer starting Session Replay off the SDK initialization critical path (#​5965)
  • Use manifest metadata resolved at build time to reduce Android SDK initialization overhead (#​5976)
Dependencies

v8.53.0

Compare Source

Features
  • Allow child spans to use explicit start timestamps through ISpan (#​5929)
  • Make ISpan.startChild overloads with SpanOptions public (#​5927)
  • Add Sentry.feedback().enableOnShake(), Sentry.feedback().disableOnShake(), and Sentry.feedback().isOnShakeEnabled() to toggle and query shake-to-report at runtime (#​5827)
Improvements
  • Remove ApiStatus.Experimental annotation from SentrySQLiteDriver (#​5938)
Fixes
  • Clear contexts when calling Scope.clear() (#​5902)
  • Preserve custom Throwable identities when R8 optimizes Android apps (#​5881)
  • Report the correct cpu usage for the first performance sample of a transaction, which was measured against the time since device boot (#​5926)
  • Prevent an ANR when the Session Replay video encoder gets stuck (#​5842)
    • Some hardware encoders never signal end-of-stream, which made the replay worker spin forever while holding the encoder lock. The app's lifecycle callbacks then blocked on that lock and the app froze until the system killed it. The encoder now gives up instead of spinning, and closing the replay cache no longer waits indefinitely for a wedged encoder.
Performance
  • Read the clock once per performance collection round instead of once per in-flight transaction (#​5934)
  • Reduce allocations while collecting cpu usage during transactions by reading the process cpu time via Process.getElapsedCpuTime() instead of parsing /proc/self/stat (33.6kB to 16 bytes per sample on a Pixel 3) (#​5926)
  • Store performance measurements as primitives, removing a boxed allocation per measurement per performance sample (#​5935)
Dependencies

v8.52.0

Compare Source

Fixes
  • Restore the interrupt flag when cached envelope processing is interrupted between files (#​5884)
  • Reduce false-positive SDK crash attribution for host app SQLite cursor crashes (#​5883)
  • Prevent inflated cold app start when the OS spawns the process in the background (e.g. FCM push) on API 35+ (#​5841, #​5880)
  • Preserve single-sample ANR profile chunks so profiles remain available on ANR events (#​5872)
  • Avoid a CPU busy-loop when recording discarded log or metric envelopes under rate limiting (#​5835)
    • ClientReportRecorder now reads the item count from the envelope item header instead of deserializing the payload, which under sustained rate limiting could pin CPU cores while repeatedly throwing exceptions
  • Report tasks handed to a no-op ISentryExecutorService as cancelled (#​5874)
    • NoOpSentryExecutorService previously returned a Future that was never run and never cancelled, so callers could not tell a dropped task from a queued one and get() would block until its timeout
Performance
  • Defer use of reflection by SentryFrameMetricsCollector during Sentry.init (#​5886)
  • Avoid waiting up to shutdownTimeoutMillis when closing the SDK with a pending transaction timeout or session-end task (#​5851)
  • Use RGB_565 instead of ARGB_8888 for screenshot and replay capture bitmaps, halving per-frame memory usage (#​5821)
  • Remove an unused lock from SentryPerformanceProvider, which was allocated on every cold start in ContentProvider.onCreate without ever being acquired (#​5871)
  • Reduce main-thread allocations when parsing the app start profiling config (#​5867)
  • Batch and coalesce scope-persistence disk writes to reduce startup cost (#​5791)
    • Scope mutations are now coalesced (latest value per field) and breadcrumbs are appended in batches behind a single fsync, instead of one synchronous disk write per mutation.
  • Reduce the number of SDK threads: the HostnameCache worker thread now times out while idle instead of staying alive for the whole process lifetime (#​5817)
Dependencies

v8.51.0

Compare Source

Features
  • Use Android's ProfilingManager (Perfetto) for continuous profiling on API 35+ devices (#​5251)
    • On API 35+ devices, continuous profiling now automatically uses Android's system ProfilingManager with Perfetto-based stack sampling, providing lower-overhead and more accurate profiles. No configuration change is required.
    • Devices below API 35 keep using the legacy Debug-based profiler.
    • Added an enableLegacyProfiling option (default true) to disable the legacy Debug-based profiler. Setting it to false disables continuous profiling on API < 35 devices as well as transaction-based profiling (profilesSampleRate/profilesSampler) on all devices, since transaction-based profiling is not supported by Perfetto.
    • It can also be configured via the io.sentry.profiling.enable-legacy-profiling manifest flag.
    • See the Android profiling docs for details.
Behavioral Changes
  • The outbox and cache directories are no longer created by Sentry.init (#​5792)
    • They are now created lazily by whichever component first writes into them, off the init thread. As a result, the directories at SentryOptions.getOutboxPath() and SentryOptions.getCacheDirPath() are not guaranteed to exist once Sentry.init returns.
    • If you write envelopes into the outbox path yourself instead of going through the SDK — as hybrid SDKs do for captureEnvelope — create the directory first, e.g. new File(outboxPath).mkdirs().
Improvements
  • Skip building Android manifest metadata debug log messages when debug logging is disabled, reducing allocations during SDK init (#​5790)
Fixes
  • Use the original app build's ProGuard UUID for ANR profile chunks (#​5852)
  • Fix potential ANR/deadlock in Session Replay when checkCanRecord runs on the replay executor thread (#​5837)
  • Prevent concurrent PixelCopy access during Session Replay masking and bitmap cleanup (#​5808)
  • Release MediaMuxer when the replay video encoder fails to start to avoid a resource leak (#​5607)
  • Set the correct platform (android instead of java) on ANR profile chunks so they are billed as UI Profile Hours rather than Continuous Profile Hours (#​5836)
  • Skip encoding and capturing buffered session replay segments while rate-limited, so we don't waste resources on envelopes the transport will drop (#​5813)
    • These skipped replays are now reported as ratelimit_backoff discarded events in client reports, so they no longer disappear from drop statistics. One event is recorded per buffer flush rather than per segment.
    • Buffer mode is also kept while rate-limited instead of switching to session mode, so the rolling buffer stays warm and the next error after the rate limit expires can send a complete replay.
Performance
  • Create the outbox and cache directories lazily in their consumers instead of during SDK init, moving the mkdirs() calls off the init (main) thread (#​5792)
  • Reduce the number of SDK threads: LifecycleWatcher now schedules the session-end task on the shared timer executor instead of creating a dedicated java.util.Timer thread (#​5819)
  • Reduce the number of SDK threads: RateLimiter now schedules its rate-limit-lifted notifications on the shared timer executor instead of creating a dedicated java.util.Timer thread (#​5814)
  • Speed up deserialization of arbitrary JSON objects by typing numbers without throwing exceptions (#​5783)
Dependencies

v8.50.1

Compare Source

Fixes
  • Pin the published Sentry Android SDK's AAR metadata minCompileSdk to our minSdk (21) instead of AGP 9's new default of the SDK's own compileSdk (37), so apps that depend on the SDK aren't forced to raise their compileSdk (#​5823)

v8.50.0

Compare Source

Android 17 support
  • We've put Android 17 through a set of rigorous tests. We're now officially giving it the Sentry stamp of compatibility .(#​5796)
Fixes
  • Reduce main-thread work during Sentry.init by resolving the shake-detector accelerometer off the main thread (~1.75ms on a Pixel 10) (#​5784)
  • Backfill release, environment, distribution, tags, and app version/build—and use the matching replay-on-error sample rate—for ApplicationExitInfo ANR and native crash events captured before SDK initialization, without reusing options cached by a later app update (#​5762)
  • SentryTagModifierNode.isImportantForBounds now matches the default behavior and returns true (#​5789)
  • Prevent a StackOverflowError when a beforeSend, beforeBreadcrumb, beforeSendLog, or beforeEnvelope callback triggers another capture (directly or through a logging integration such as Timber) (#​5737)
    • Captures made from within a user callback (event, transaction, breadcrumb, log, envelope, or check-in) are now dropped while that callback runs, instead of recursing. Captures made by event processors are unaffected.
  • Replace deprecated ThrowableProxy with LogEvent#getThrown() in sentry-log4j2 (#​5751)
Dependencies

v8.49.0

Compare Source

Features
  • Session Replay: Record segment names (transaction names) (#​5763)

  • Add io.sentry:sentry-opentelemetry-bom to align Sentry OpenTelemetry modules with tested OpenTelemetry dependencies (#​5629)

    • Spring Boot Gradle plugin: add the Sentry BOM to dependencyManagement; explicit imports are applied after Spring Boot's implicit BOM
      dependencyManagement {
        imports {
          mavenBom("io.sentry:sentry-opentelemetry-bom:<sentry-version>")
        }
      }
    • Gradle: import it as a platform and omit versions from Sentry OpenTelemetry and OpenTelemetry dependencies
      implementation(platform("io.sentry:sentry-opentelemetry-bom:<sentry-version>"))
    • Maven: import it before Spring Boot's BOM in the same <dependencyManagement> block, or in the child POM when using spring-boot-starter-parent
      <dependency>
        <groupId>io.sentry</groupId>
        <artifactId>sentry-opentelemetry-bom</artifactId>
        <version>${sentry.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
Fixes
  • Session Replay: Fix first recording segment missing for replays in buffer mode (#​5753)
  • Session Replay: Fix error-to-replay linkage in buffer mode (#​5754)
  • Prevent logs and metrics from remaining queued after a flush scheduling race (#​5756)
  • Fix main thread identification for tombstone (native crash) events (#​5742)
  • Prevent malformed JDBC URLs, which may contain credentials, from being printed to stdout (#​5656)
  • Restrict JVM-global proxy authentication credentials to challenges from the configured proxy host (#​5656)
  • Sanitize Spring 7 and Spring Jakarta WebClient span descriptions to prevent embedded URL credentials from being sent to Sentry (#​5656)
  • Respect tracePropagationTargets when injecting Sentry tracing headers through the OpenTelemetry OTLP propagator (#​5656)
Performance
  • Schedule transaction idle/deadline timeouts on a shared, dedicated executor instead of spawning a Timer thread per transaction (#​5670)
Dependencies
  • Bump OpenTelemetry to support Spring Boot 4.1 (#​5573)
    • If this causes issues for you because you are also using Spring Boot Dependency Management Plugin (io.spring.dependency-management),
      which may downgrade the OpenTelemetry SDK, please have a look at the changelog entry above that explains how to use sentry-opentelemetry-bom.
    • OpenTelemetry to 1.63.0 (was 1.60.1)
    • OpenTelemetry Instrumentation to 2.29.0 (was 2.26.0)
    • OpenTelemetry Instrumentation Alpha to 2.29.0-alpha (was 2.26.0-alpha)
    • OpenTelemetry Semantic Conventions to 1.42.0 (was 1.40.0)
    • OpenTelemetry Semantic Conventions Alpha to 1.42.0-alpha (was 1.40.0-alpha)
  • Bump Native SDK from v0.15.2 to v0.15.3 (#​5728)

v8.48.0

Compare Source

Features
  • Add Sentry.extendAppStart(), Sentry.finishExtendedAppStart(), and Sentry.getExtendedAppStartSpan() to extend the app start measurement past the first frame for extra launch-time work on Android (#​5604)

    • Requires standalone app start tracing (options.isEnableStandaloneAppStartTracing). Call extendAppStart() in Application.onCreate after SDK init and finishExtendedAppStart() when done:
    Sentry.extendAppStart()
    
    // Optionally, retrieve the extended app start span to attach your own child spans
    val child = Sentry.getExtendedAppStartSpan()?.startChild("preload", "Preload resources")
    // ... extra launch-time work ...
    child?.finish()
    
    Sentry.finishExtendedAppStart()
  • Add trace_metric_byte data category and record byte-level client reports when trace metrics are discarded (#​5626)

  • Expose sentry-native's heartbeat-based app-hang detection through SentryAndroidOptions (#​5623)

    • Enable via setEnableNdkAppHangTracking(true) (disabled by default) and tune the timeout with setNdkAppHangTimeoutIntervalMillis(...) (default 5000 ms), or the io.sentry.ndk.app-hang.enable / io.sentry.ndk.app-hang.timeout-interval-millis manifest entries
    • Intended for hybrid SDKs: emit the heartbeat by calling the native sentry_app_hang_heartbeat() from the thread you want monitored. Independent of the JVM-based ANR detection (setAnrEnabled)
  • Support the io.sentry.tombstone.report-historical manifest option to enable historical tombstone reporting via AndroidManifest.xml <meta-data> (#​5683)

Fixes
  • Fix NoSuchMethodError from using Math.floorDiv/Math.floorMod overloads that are unavailable on Java 8 (#​5743)
  • Fix main thread identification parsing for ApplicationExitInfo ANRs (#​5733)
  • Do not send threads without stacktraces for ApplicationExitInfo ANRs (#​5733)
  • Record byte-level client reports when event processors discard logs or trace metrics (#​5718)
  • Name the device-info caching thread SentryDeviceInfoCache so all threads spawned by the SDK are identifiable (#​5684)
  • Apply byte-category rate limits to log and trace metric envelope items (#​5716)
Performance
  • Skip Hint allocation in Scope.addBreadcrumb when no beforeBreadcrumb callback is set (#​5689)
  • Speed up scope persistence by detecting the Sentry executor thread via a marker instead of a Thread.getName() name scan on every scope mutation (#​5691)
  • Remove executor prewarm during SDK init (#​5681)
    • The single-threaded SentryExecutorService queued the prewarm work ahead of the first useful task, so it could only delay init work, never speed it up; the thread and class loading it warmed are paid identically by the first real task submitted right after.
Dependencies

v8.47.0

Compare Source

Behavioral Changes
  • SentryOkHttpInterceptor::intercept now throws IOException. This is a source-only and Java-only breaking change (#​5654)
Fixes
  • Fix fragment tracing not working with detach/attach navigation (#​5660)
  • Don't start a redundant UI interaction transaction when a transaction is already bound to the Scope (#​5491)
    • Previously, SentryGestureListener always started a UI transaction and only afterwards skipped binding it to the Scope when a manually-bound transaction already existed, leaving the new transaction to be dropped as an idle transaction without children.
  • Fix potential NPE within Scope.endSession() (#​5657)
  • Fix memory leak in ReplayIntegration due to persisting executor not being shut down (#​5627)
  • Fix AbstractMethodError when compose-ui 1.11+ is used in combination with Modifier.sentryTag() or the Sentry Kotlin compiler plugin (#​5672)
Performance
  • Speed up touch gesture target detection on deeply nested view hierarchies by hit-testing in local coordinates instead of calling getLocationOnScreen per view (#​5595)
  • Probe class availability without initializing the class during SDK init (#​5635)
  • Avoid constructing an exception per view when resolving view ids during view-hierarchy and gesture capture (#​5631)
  • Start the frame metrics thread lazily on first collection instead of during SDK init (#​5641)
  • Reduce SentryId and SpanId allocation overhead by replacing their per-instance LazyEvaluator (and its lock) with a lightweight lazily-generated String. (#​5645)
  • Lazily allocate the ReentrantLock backing AutoClosableReentrantLock to avoid eager lock allocations for SDK objects that never contend during SentryAndroid.init (#​5643)

v8.46.0

Compare Source

Fixes
  • Session Replay: Fix network detail response body size being unknown for gzip-compressed responses (#​5592)
Behavioral Changes
  • Collections returned by scope (e.g. getBreadcrumbs, getTags, getAttachments) are shared state and should not be mutated. (#​5541)
    • Previously, when going through CombinedScopeView, we were returning a copy where mutations didn't show up in the underlying scopes.
    • This has now changed in order to reduce SDK overhead.
  • Date objects returned by SDK data model getters are shared state and should not be mutated. (#​5603)
    • Previously, these getters returned defensive copies for some date fields.
    • This has now changed in order to reduce SDK overhead.
Performance
  • Reduce writer buffer size from 8192 to 512 (#​5544)
  • Remove redundant event map copies (#​5536)
  • Optimize combined scope by adding an early return if only one scope has data (#​5541)
  • Reduce model access overhead by avoiding defensive Date copies in SDK data model getters. (#​5603)
  • Reduce timestamp parsing and formatting overhead with Sentry-specific ISO-8601 handling. (#​5602)
  • Reduce JSON serialization overhead by creating the reflection serializer only when unknown-object fallback serialization is needed. (#​5601)
  • Reduce JSON serialization overhead by allocating reflection cycle-tracking state only when reflection serialization is used. (#​5600)
  • Reduce context serialization overhead by sorting key snapshots with arrays instead of temporary lists. (#​5599)
  • Reduce breadcrumb allocation overhead by creating the Breadcrumb data map only when data is added. (#​5598)
  • Reduce JSON serialization overhead by lowering the initial JsonWriter nesting stack size while preserving on-demand growth. (#​5591)
  • Reduce timestamp helper overhead by replacing unnecessary Calendar usage in DateUtils with direct Date creation. (#​5589)
  • Reduce Android startup overhead by using the default timezone directly on older devices or when no timezone info is available in the locale. (#​5587)

v8.45.0

Compare Source

Features
  • On Android 15+ (API 35), the standalone app.start transaction now reports why the OS started the process via app.vitals.start.reason trace data (e.g. launcher, broadcast, service, content_provider), derived from ApplicationStartInfo.getReason(). You can search and group by this attribute in the Trace Explorer. (#​5552)
Fixes
  • Use System.nanoTime() for cron check-in duration measurement to avoid incorrect durations from wall-clock adjustments (#​5611)
  • Fix crash when getHistoricalProcessStartReasons is called from an isolated or wrong-userId process (#​5597)
  • Release MediaMuxer when a replay segment has no encodable frames to avoid a resource leak (#​5583)
Dependencies

v8.44.1

Compare Source

Fixes
  • Fix FirstDrawDoneListener leaking an OnGlobalLayoutListener per registration (#​5567)
Features
  • Add experimental SentrySQLiteDriver to sentry-android-sqlite for instrumenting androidx.sqlite.SQLiteDriver (#​5563)
    • To use it, pass SQLiteDriver to SentrySQLiteDriver.create(...)
    • Requires androidx.sqlite:sqlite (2.5.0+) on runtime classpath (typically provided by Room or SQLDelight)
Dependencies

v8.44.0

Compare Source

Features
  • Add enableStandaloneAppStartTracing option to send app start as a standalone transaction instead of attaching it as a child span of the first activity transaction (#​5342)
    • Disabled by default; opt in via options.isEnableStandaloneAppStartTracing = true or manifest meta-data io.sentry.standalone-app-start-tracing.enable
    • Emits a transaction named App Start with op app.start, carrying the existing app start measurements and phase spans (process.load, contentprovider.load, application.load, activity lifecycle spans) as direct children of the root
    • The standalone transaction shares the same traceId as the first ui.load activity transaction so they remain linked in the trace view
    • Also covers non-activity starts (broadcast receivers, services, content providers)
Improvements
  • Reduce boxing to improve performance (#​5523, #​5527, #​5551)
  • Replace Date with a unix timestamp in SentryNanotimeDate to improve performance (#​5550)
    • SentryNanotimeDate is now marked @ApiStatus.Internal. A new (long unixDateMillis, long nanos) constructor was added, where unixDateMillis is milliseconds since the epoch. The existing (Date, long) constructor is retained but deprecated.
Dependencies
Fixes
  • Fix attachments being duplicated on native events that carry scope attachments (#​5548)
  • Fix performance collector scheduling many tasks in a row (#​5524)

v8.43.3

Compare Source

Fixes
  • Fix crash when getHistoricalProcessStartReasons is called from an isolated or wrong-userId process (#​5597)

v8.43.2

Compare Source

Improvements
  • Improve SDK init performance by replacing java.net.URI with custom string parsing for DSN (#​5448)
  • Remove unnecessary boxing to improve performance (#​5520)
Fixes
  • Session Replay: Fix VerifyError in Compose masking under DexGuard/R8 obfuscation (#​5507)
  • Session Replay: Fix Compose view masking not working on obfuscated/minified builds (#​5503)

v8.43.1

Compare Source

Fixes
  • Session Replay: Fix replay recording freezing on screens with continuous animations ([#&#

Important

✂ PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 47a662e to d392281 Compare February 12, 2025 19:41
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from d392281 to 77f3e20 Compare February 26, 2025 16:30
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from cb73d5f to 77554ee Compare March 18, 2025 22:00
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 77554ee to fc9273f Compare April 1, 2025 12:19
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from 53460ec to 5930245 Compare April 14, 2025 18:34
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 3 times, most recently from 0be52ea to f82c62e Compare April 29, 2025 14:48
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from f82c62e to 7c4eb5f Compare April 30, 2025 20:21
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 7c4eb5f to ce7d1b4 Compare May 13, 2025 17:24
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 3 times, most recently from 9a1fb7a to 7f36e06 Compare May 27, 2025 19:49
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from b8503a4 to e38d448 Compare June 17, 2025 22:01
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 3 times, most recently from 629a08a to 51be52f Compare June 27, 2025 13:13
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 51be52f to 4c8150f Compare July 8, 2025 17:47
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 4c8150f to fa265ed Compare July 30, 2025 20:34
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from b4b4a8b to 12b7820 Compare August 12, 2025 13:58
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 12b7820 to f08f990 Compare August 25, 2025 14:14
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from c923e35 to dd10d19 Compare September 9, 2025 18:32
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from dd10d19 to cd771ba Compare September 22, 2025 12:24
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from cd771ba to 67234f6 Compare October 1, 2025 20:26
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from 851b679 to d237cbb Compare March 17, 2026 18:13
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from 2dc7d43 to dd9f051 Compare March 26, 2026 13:25
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from dd9f051 to 0ffc32a Compare April 8, 2026 19:03
@renovate renovate Bot changed the title fix(deps): update dependency io.sentry:sentry to v8 Update dependency io.sentry:sentry to v8 Apr 8, 2026
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 3 times, most recently from b69d3ca to 5467461 Compare April 22, 2026 20:03
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 5467461 to 7ac4057 Compare May 7, 2026 01:16
@sonarqubecloud

sonarqubecloud Bot commented May 7, 2026

Copy link
Copy Markdown

@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 7ac4057 to 9e50005 Compare May 20, 2026 14:04
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 9e50005 to 8826afc Compare May 27, 2026 16:46
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from c26a4f7 to 6d166a3 Compare June 10, 2026 18:08
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 3 times, most recently from 9901445 to 9117c43 Compare June 24, 2026 17:03
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from 898bcdb to bb9f5f3 Compare July 2, 2026 12:45
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from bb9f5f3 to 6a34574 Compare July 8, 2026 15:45
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 3 times, most recently from c760063 to abbf00f Compare July 23, 2026 15:46
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch 2 times, most recently from 9f10b22 to 42b60a6 Compare August 5, 2026 19:58
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 42b60a6 to 5523e54 Compare August 12, 2026 17:52
@renovate
renovate Bot force-pushed the renovate/io.sentry-sentry-8.x branch from 5523e54 to accbdee Compare August 27, 2026 12:39
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants