Skip to content

chore(deps): update Java SDK to v8.64.0 - #357

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
deps/scripts/update-java.ps1/8.64.0
Open

github-actions[bot] wants to merge 1 commit into
mainfrom
deps/scripts/update-java.ps1/8.64.0

Conversation

@github-actions

Copy link
Copy Markdown

Bumps scripts/update-java.ps1 from 6.24.0 to 8.64.0.

Auto-generated by a dependency updater.

Changelog

8.64.0

Breaking Changes

  • Android: AnrV2Integration, AnrProfilingIntegration, WindowContentChangedCallback, the deprecated SentryUserFeedbackButton and SentryUserFeedbackDialog.Builder, and the internal sentry-android-core classes are now final, and ActivityLifecycleCallbacksAdapter is now abstract (#6494)

Features

  • Connect Android traces with web content in a WebView using SentryWebViewTracing.addTracePropagation(webView, "example.com") (#6395)
    • Requires the androidx.webkit:webkit dependency. Only list hosts whose content you control.
    • Call it on the main thread before each page load you want connected.
    • Set options.webViewTracing.allowedHosts, or the io.sentry.webview-tracing.allowed-hosts manifest entry, to call addTracePropagation(webView) without passing hosts (#6516)
    • See the WebView docs for details.
  • Monitor every Spring Scheduled method with Sentry Crons by setting sentry.monitor-scheduled-tasks=true, without adding SentryCheckIn to each method. Sentry creates each monitor from the method's Scheduled schedule. Exclude methods with sentry.exclude-scheduled-tasks (#6275, #6276, #6277)
  • Quartz SentryJobListener can send a monitor config derived from the trigger with check-ins, so Sentry creates or updates the monitor from code. Set the sentry-upsert-monitor-config job or trigger data key to "true" to send the schedule (#6216)
  • Send a monitor config derived from Spring Scheduled with SentryCheckIn check-ins, so Sentry creates or updates the monitor from code. Set SentryCheckIn(upsertMonitorConfig = true) to send the schedule (#6215)
  • Sentry OpenTelemetry integrations now honor OTEL_BSP_SCHEDULE_DELAY (otel.bsp.schedule.delay) for how often spans are sent to Sentry, instead of always waiting 5 seconds (#6388)
  • Add experimental, opt-in out-of-process crash reporting on Android (#6347)
    • To enable it, add the sentry-android-ndk-outproc dependency and exclude sentry-native-ndk. Requires Android 11 (API level 30) or later.
    • See the NDK docs for details.

Behavioral Changes

  • Gradle builds now resolve all Sentry SDK modules to the same version, the highest one present, because every module depends on sentry-bom as a platform (#6466)
    • Before, a build could mix module versions, for example a newer sentry-android-core with an older sentry-android-fragment, which failed at runtime. Maven builds resolve as before.
    • sentry-bom now also includes sentry-android-distribution.

Fixes

  • Capture scroll breadcrumbs for LazyColumn, LazyRow, lazy grids, and Pager on Jetpack Compose foundation 1.10+ (#6548)
  • Prevent the main thread from potentially hanging during app start or when returning to the foreground if Android is slow to register the SDK's network or telephony listeners. Sentry.init, Session Replay, and capturing events no longer wait for that registration (#6537)
  • Add opt-in support for matching GraphQL ignored error types against classification specifications via sentry.graphql.enable-specification-error-type-filtering (#6092)
  • Session Replay: Fix SentryOkHttpInterceptor hanging forever on responses whose body has no known length, such as Server-Sent Events or a gzipped response, when network details are enabled for the URL (#6231)
  • Session Replay: SentryOkHttpInterceptor now captures network request and response details only while Session Replay is recording or buffering (#6486)
  • Stop marking an OkHttp call span as failed when a connection attempt to one of the host's addresses fails but OkHttp connects on another (#6472)
  • Stop blocking the main thread while the frame metrics thread starts when the first activity transaction begins (#6500)
    • On a busy device during cold start this could stall the launcher activity's onCreate for hundreds of milliseconds.
  • Do not inspect the response body of streaming Apollo 3 and 4 responses (multipart/mixed, text/event-stream) for failed requests, which blocked defer and stream (#6432)
  • Session Replay: Measure how long touch moves are batched on a monotonic clock, so a device time change during a swipe no longer drops its positions, delays them, or stretches their timing (#6538)

8.63.0

Features

  • Added Environment to the Scope, allowing you to overwrite the Environment set on the options (#5772)
    • The scope Environment is also applied to the trace envelope header (DSC), logs, metrics and profiles, so all telemetry of a trace reports the same environment
  • Add an attachTracingHeaders flag to SentryApolloInterceptor to stop attaching sentry-trace and baggage headers to Apollo v2 requests (#6414)
    • Apollo v2 has no request URL in the interceptor, so these headers are attached without checking tracePropagationTargets. Pass attachTracingHeaders = false to opt out.

Improvements

  • Speed up Session Replay and screenshot masking for large maskViewClasses/unmaskViewClasses lists by using constant-time class lookups (#6410)
  • Skip ANR profiling while a debugger is connected (#6389)

Behavioral Changes

  • Idle spans, including those produced by SentryTraced, now let any idle parent transaction finish after the idle timeout (3s by default) with status ok, rather than waiting for the deadline (30s by default) and reporting deadline_exceeded (#6396)
    • If you use SentryTraced, expect shorter durations and lower failure rates for affected ui.load and navigation transactions, plus changes to metrics measured over the transaction's lifetime, such as slow and frozen frames.
    • Cold and warm app start, TTID, and TTFD remain unchanged.

Fixes

  • Fix missing Navigation 3 transactions for preloaded ViewPager2 pages and destinations reached while another Activity or Fragment owns navigation tracking (#6400)
  • Keep UI profiling running when startProfiler is called before a requested stop takes effect at the end of the current chunk (#6291)
    • Before, the start call was ignored and the profiler still stopped at the end of the chunk, even in TRACE mode while sampled spans were active. On API 34 and lower, every later profile also stopped after one chunk.
  • Refuse to send data to servers whose certificate was issued by one of the leaked eMudhra intermediates (CVE-2026-111943) (#6336)
  • Stop sending the whole release as dist on ANR and app-exit events when the release has no +versionCode (#6450)
    • Relay rejected these values (e.g. invalid character ''). dist is now left empty unless options.dist is set or the release contains a version code.
  • Accept profiling traces directories whose path contains a . on the JVM, and keep profiling disabled after its first start rejects the options instead of starting on the next one (#6334)

Dependencies

  • Bump epitaph (Android tombstone parsing) from 0.1.1 to 0.2.0 (#6402)
    • Reject malformed protobuf tags, oversized lengths, invalid varints, and invalid reader bounds instead of silently accepting partial/corrupt tombstone data.
  • Bump Native SDK from v0.17.4 to v0.17.6 (#6409, #6460)

Internal

  • Measure ANR detection and ANR profiling durations on the internal MonotonicTicker (#6041)

Known Issues

  • On Android, the main thread may hang or trigger an ANR if the system is slow to register network or telephony callbacks during SDK initialization or when the app returns to the foreground. Fixed by #6537.

8.62.0

Improvements

  • Support Navigation 3 integration for multi-Activity and multi-Fragment applications, where each Activity or Fragment has its own SentryNavEffect (#6305)

Fixes

  • Fix a D8 crash (NullPointerException: Cannot invoke "String.length()") when dexing the SDK with AGP 8.0 and older, a regression from 8.61.1 (#6356)
  • Always remove the first-draw listener after the first frame, even if no layout pass follows it (#6152)
  • Prevent Reactor pool maintenance tasks from retaining unbounded Sentry scope chains (#6283)

Known Issues

  • On Android, the main thread may hang or trigger an ANR if the system is slow to register network or telephony callbacks during SDK initialization or when the app returns to the foreground. Fixed by #6537.

8.61.1

Fixes

  • Session Replay: Fix a native crash (SIGABRT on the RenderThread) when stopping a replay that uses the canvas screenshot strategy (#6342)
  • Session Replay: Keep the segment videos of a replay that stopped before the startup cleanup of previous replays ran (#6343)
  • Report the number of dropped spans in client reports when a batched span envelope item is discarded, instead of a quantity of 1 (e.g. for Flutter span streaming) (#6265)
  • Session Replay: Keep the flushed video and do not reuse its segment id when stop() is called right after flush() in buffer mode (#6340)
  • Keep sending events from Android 7.1.0 and older devices after Sentry changes its TLS certificate authority (#6227)
    • In February 2027, Sentry moves its TLS certificates from DigiCert to Let's Encrypt and Google Trust Services (announcement).
    • Android 7.1.0 (API 25) and older don't trust the Let's Encrypt root certificate (ISRG Root X1), so without this fix, the SDK on those devices can no longer send events to Sentry after the switch.
    • The SDK now bundles ISRG Root X1 and trusts it in addition to the device's root certificates on API 25 and lower. This only applies to the SDK's own uploads to Sentry SaaS (DSNs on sentry.io), not to self-hosted Sentry, not to any other connection your app makes, and not if you set your own SentryOptions.setSslSocketFactory.
    • Apps need to update to an SDK version with this fix to keep sending events from these devices.
  • Session Replay: Use a software canvas for video encoding on the Android Emulator to avoid a native crash in eglDestroySurface (#6282)

Internal

  • Measure the hostname cache TTL on the monotonic ticker the options provide, so that a device time change no longer shortens or extends it (#6100)
  • Measure Session Replay's 1h recording cap and its touch-move debounce on a monotonic clock, so a device time change no longer stops a healthy recording early, keeps a finished one alive, or suppresses gesture events (#6090)
  • Add ScreenshotUtils.takeMaskedScreenshot so Hybrid SDKs can capture screenshots masked according to SentryAndroidOptions.getScreenshot() (#6281)

Dependencies

Known Issues

  • On Android, the main thread may hang or trigger an ANR if the system is slow to register network or telephony callbacks during SDK initialization or when the app returns to the foreground. Fixed by #6537.

8.61.0

Fixes

  • Session Replay: Backfill release, environment and SDK info for replays sent on the next launch after the app was killed or crashed (#6253)
  • Fix SDK callback error handling (#6140)
    • Drop telemetry when a beforeSend* callback throws and report it using DiscardReason.CALLBACK_ERROR.
    • Drop transactions when tracesSampler throws instead of inheriting the parent sampling decision or falling back to tracesSampleRate (#6163).
    • Drop spans when beforeSpan throws without disrupting requests, covering OkHttp, OpenFeign, GraphQL, Ktor, and Apollo—including Apollo 5 (#6167, #6238).
    • Drop telemetry and record callback_error when a customer event processor throws instead of continuing with a potentially partially processed item. SDK-owned processor failures are logged and processing continues.
    • Drop breadcrumbs when beforeBreadcrumb throws instead of storing exception details on the breadcrumb.
    • No longer fail Spring requests when a TransactionNameProvider throws, falling back to <unlabeled transaction> (#6241).
    • No longer fail Spring requests when a SentryUserProvider throws and overwrite the user with an empty user object (#6240).
    • Disable profiling when profilesSampler throws instead of falling back to profilesSampleRate or inheriting the parent profiling decision (#6164).
    • Report attached profiles dropped by transaction callback errors as callback_error in client reports and OnDiscardCallback (#6166).
    • Skip replay capture when beforeErrorSampling throws while retaining the error event (#6165).
    • Skip Android screenshots or view hierarchies when their capture callbacks throw while retaining the error event (#6167).
    • Keep the Android feedback form available when its options configurator throws (#6239).
    • Isolate nonfatal callback throwables while continuing to propagate fatal JVM errors (#6251).

Internal

  • Hold the hostname cache on SentryOptions instead of a static singleton (#6117)

Dependencies

Known Issues

  • On Android, the main thread may hang or trigger an ANR if the system is slow to register network or telephony callbacks during SDK initialization or when the app returns to the foreground. Fixed by #6537.

8.60.0

Features

  • Add support for Android Navigation 3 through the new sentry-android-navigation3 library (#6233)
    • Use SentryNavEffect to record navigation transactions, breadcrumbs, screen names, and additional context as your nav back stack changes.
    • See the Navigation for Android docs for additional details.
  • Report the cellular network technology generation in device.connection_effective_type, for example 4g or 5g (#6146)

Dependencies

Known Issues

  • On Android, the main thread may hang or trigger an ANR if the system is slow to register network or telephony callbacks during SDK initialization or when the app returns to the foreground. Fixed by #6537.

8.59.0

Breaking Changes

  • Capture direct Sentry.logger() and Sentry.metrics() calls regardless of options.getLogs().isEnabled() and options.getMetrics().isEnabled() (#6184)
    • Automatic logging integrations still only capture logs when options.getLogs().isEnabled() is true. options.getMetrics().setEnabled(...) currently has no effect because there are no automatic Metrics integrations. Both enable options will be removed in the upcoming major release, and each logging integration will then have a separate opt-in flag.
    • Use options.getLogs().setBeforeSend(...) and options.getMetrics().setBeforeSend(...) to filter manually emitted telemetry. Return null from either callback to drop it.

Fixes

  • Keep the videos of already captured session replay segments when the replay stops, so segments that are still queued are no longer sent without their video (#6177)

Features

  • Deprecate sendDefaultPii in favor of dataCollection ahead of its removal in 9.0 (#6158)
  • Make the tombstone merge time threshold configurable via SentryAndroidOptions.setTombstoneMergeTimeThresholdMillis and the io.sentry.tombstone.merge-time-threshold-millis manifest option (#6154)
  • Add sentry-apollo-5 integration for Apollo Kotlin 5, providing HTTP tracing and failed GraphQL request reporting (#6074)
  • Add OkHttp autoconfiguration for Spring Boot (#5797)

Fixes

  • Prevent infinite loops when capturing exceptions with cyclic cause chains (#6073)

Improvements

  • Recover Android 17 MemoryLimiter app exits recorded as ApplicationExitInfo.REASON_MEMORY_LIMITER (#6174)

Dependencies

8.58.0

Features

Warning

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

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)

8.57.0

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)

8.56.0

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

8.55.0

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)
  • Clear the persisted replay id on SDK init, so a replay id from a previous process is no longer attached to ANR events from the current one (#6033)
  • 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

8.54.0

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

8.53.0

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

8.52.0

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

8.51.0

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

8.50.1

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)

8.50.0

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

  • Bump Native SDK from v0.15.3 to v0.15.4 (#5793)
  • The SDK is now compiled with Android Gradle Plugin 9.2.1 (#5779)

8.49.0

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)

8.48.0

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

8.47.0

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)

⚠️ Changelog content truncated by 222634 characters because it was over the limit (60000) and wouldn't fit into PR description.

@github-actions
github-actions Bot force-pushed the deps/scripts/update-java.ps1/8.64.0 branch from 301986b to 9a2cf91 Compare November 12, 2026 03:02
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.

1 participant