Skip to content

RUM Android SDK release notes

Jun 9, 2026

Android SDK 2.16.0

  • Added view_number and isNavigationEvent to every RUM event under cx_rum for product analytics. view_number is a 0-based counter of distinct view changes in the session (first view = 0); isNavigationEvent is true on navigation spans. Mirrors iOS and Browser SDK additions.
2026

Android SDK 2.15.1

  • Gradle Plugin versioning aligned with the SDK — all three artifacts now ship under the same version number.
Jun 8, 2026

Android SDK 2.15.0

  • The SDK now emits a session_replay_init internal event when SessionReplay.initialize() succeeds (the session was not dropped by SessionReplayOptions.sessionRecordingSampleRate), carrying the resolved session-replay configuration under internal_event_data so the backend can observe how each session was configured. The payload includes captureScale, captureCompressQuality, sessionRecordingSampleRate, autoStartSessionRecording, maskAllTexts, textsToMask, maskInputFieldsOfTypes, maskAllImages, and a hasFlutterViewBitmapProvider presence flag. Mirrors the existing SDK init log emitted on CoralogixRum.initialize() (internal_event_type = "init"). Learn more
Jun 7, 2026

Android SDK 2.14.1

  • beforeSend modifications now land on both serialization destinations a span produces: text.cx_rum.* (the RUM payload) and instrumentation_data.otelSpan.attributes."cx_rum.*" (the OTLP attribute mirror used by the tracing pipeline). Previously the OTLP mirror was built once at span construction from the pre-beforeSend struct, so customer redactions (for example, network_request_context.url) showed up in text.cx_rum only. The rebuild is gated on beforeSend != null, so customers who don't set a callback keep the struct-driven init-time attribute build.
  • CxRum.applyBeforeSendLogic now ignores spanId, traceId, parentSpanId, and isSnapshotEvent from the customer's EditableCxRum return value and restores them from the original. These are identity / SDK-owned signals and a beforeSend callback must not be able to forge them. Mirrors the read-only set on iOS.
  • Parity tightening between the init-time and beforeSend-rebuild attribute paths: a customer's editable.copy(labels = null) is now coerced to an empty JsonObject, and cx_rum.session_creation_date is now omitted from the OTLP attribute mirror when the underlying value is 0L (the unset sentinel) on both paths.
Jun 7, 2026

Android SDK 2.14.0

  • Fixed a session replay mask-skew bug where mask rects drifted 16–80+ px behind text during scroll. For classic Views, View.draw() is now called synchronously on the main thread in the same pass as collectFrozenMaskRects, guaranteeing pixel/mask alignment.
  • Fixed Flutter session replay masking: FlutterSurfaceView renders outside the View hierarchy, so the previous PixelCopy + region-pull approach produced misaligned masks. The new flutterViewBitmapProvider path asks the Flutter plugin's Dart side to rasterise and mask in a single synchronous frame slice and return a finished RGBA8888 bitmap.
  • Fixed a thread-safety violation: the containsCompose() View-hierarchy walk ran on Dispatchers.Default instead of the main thread, and is now computed via withContext(Dispatchers.Main).
  • Fixed frameCapturer.cleanup() (which removes ViewTreeObserver.OnDrawListener entries) never being called from SessionReplayInternal.shutdown(), which caused listeners to fire indefinitely after session replay was shut down.
  • Fixed a bitmap not being recycled if copyPixelsFromBuffer throws (OEM stride mismatch); it is now wrapped in try/finally.
  • NetworkConnectivityMonitor no longer crashes with ConcurrentModificationException when listeners are registered or unregistered while a connectivity callback (onAvailable/onLost) is iterating the listener list. The callback now snapshots the list under the monitor's lock before iterating.
  • New optional SessionReplayOptions.flutterViewBitmapProvider suspend callback for Flutter hosts. When set, the SDK composites the pre-masked Dart bitmap into each captured frame instead of using the legacy region-pull path. Learn more
Jun 3, 2026

Android SDK 2.13.0

  • Added an optional customAttributes: Map<String, Any?>? parameter to CoralogixErrorDecorator, matching the iOS SDK naming. Callers of CoralogixRum.reportError(decorator) can now attach custom attributes that are emitted on the resulting RUM error event under errorContext.data, JSON-encoded in the same shape iOS uses. Existing call sites are unaffected — the new parameter defaults to null.
Jun 2, 2026

Android SDK 2.12.2

  • Fixed RUM sessions appearing as 20–24h long in the Coralogix UI. When an app resumed from a long background (~24h), spans could be created before SessionManager rotated the session, stamping them with the stale session ID from the previous day. SessionManager.getSessionId() now checks shouldRefreshSession() before returning, guaranteeing that any span created after the 1-hour session lifetime always receives a fresh session ID regardless of listener ordering.
May 24, 2026

Android SDK 2.12.1

  • Fixed an IllegalArgumentException: invalid pointerIndex -1 crash in TouchEventDispatcher. Multi-touch actions (ACTION_POINTER_DOWN/ACTION_POINTER_UP) are now filtered out before being forwarded to GestureDetector, which only handles single-pointer gestures.
  • instrumentation_data.otelSpan.attributes now includes cx_rum.session_context.session_creation_date (Long, milliseconds) and cx_rum.session_context.hasRecording (Bool), matching the iOS SDK. Downstream tracing consumers that join sessions via tracing can now correlate session start time and recording state from the tracing block.
May 7, 2026

Android SDK 2.12.0

  • Added a Custom Time Measurement API: call CoralogixRum.startTimeMeasure(name, labels) to begin timing an operation and CoralogixRum.endTimeMeasure(name) to stop it. The elapsed duration (in milliseconds) is emitted as a Measurement event with the measurement_name attribute set to name and the optional labels merged with SDK-level labels. Duplicate starts are ignored (the original start time is preserved), and in-flight measurements are automatically discarded when the session goes idle. Learn more
  • Added excludeFromSampling: List<ExcludableInstrumentation> to CoralogixOptions. Instrumentation categories listed here are exported at 100% even when the current session has been sampled out by sessionSampleRate. An empty list (the default) preserves legacy behavior — the sample rate gates the entire SDK. Supported categories: Errors, Logs, Network, UserInteractions, MobileVitals, CustomSpan, CustomMeasurement, Navigation, and Lifecycle.
  • The session-sampling decision moved into SessionManager, so the sampling result is re-rolled on every session rotation (matching web SDK behavior).
  • Added the public ExcludableInstrumentation enum to the com.coralogix.android.sdk.model package.
May 5, 2026

Android SDK 2.11.2

  • Fixed Flutter session replay capturing black frames on Android. FlutterSurfaceView renders in a separate hardware compositor layer that window-level PixelCopy cannot see. A new FlutterSurfaceViewPatchingStrategy decorator now runs a per-surface PixelCopy.request(surfaceView, ...) pass after the main window capture, patching the Flutter content directly into the frame. Only FlutterSurfaceView is targeted — other SurfaceView subclasses (video, camera) are intentionally skipped to avoid expensive GPU readbacks.
Apr 26, 2026

Android SDK 2.11.1

  • getCustomTracer(ignoredInstruments) now accepts a Set<CoralogixIgnoredInstrument> instead of List, eliminating accidental duplicate entries.
  • CoralogixGlobalSpan.runInSpanContext renamed to withContext (generic return: fun <R> withContext(block: () -> R): R) — matches the iOS, Browser, and React Native naming.
  • CoralogixCustomSpan.addEvent now accepts an optional timestamp and TimeUnit, aligning with the iOS overload that takes an explicit event time.
  • startGlobalSpan now returns null immediately when a global span is already active (a pre-check before creating the OTel span), preventing orphaned spans.
  • Custom spans are now exported through the RUM log pipeline as InstrumentationData (the same path as network requests), with correct parentSpanId linking child spans to their parent.
  • Added a toJson() convenience method to CoralogixTraceExporterData. Learn more
Apr 16, 2026

Android SDK 2.11.0

  • Added a Custom Spans API: obtain a tracer via CoralogixRum.getCustomTracer(), then call startGlobalSpan(name) to open a root trace and CoralogixGlobalSpan.startCustomSpan(name) to attach child spans. All spans appear in the Coralogix RUM trace view, are automatically correlated with the active session, and propagate the traceparent header to outgoing network requests while the global span is active. Learn more
  • Added a tracesExporter option in CoralogixOptions: it accepts a ((CoralogixTraceExporterData) -> Unit) callback that receives the raw OTLP span payload alongside the normal RUM export, enabling full distributed-tracing integration without a separate OpenTelemetry collector. Learn more
Apr 15, 2026

Android SDK 2.10.2

  • Fixed a ConcurrentModificationException crash in ActivityLifecycleMonitor.reportLifecycleEvent when lifecycle events fire concurrently with listener add/remove operations. monitorListeners is now a CopyOnWriteArrayList, so iteration always works on a snapshot and is unaffected by concurrent modifications.
Apr 15, 2026

Android SDK 2.10.1

  • Fixed android-sdk-compose failing to publish to Maven Central — the generated POM was missing the <version> element for the com.coralogix:android-sdk dependency, which caused Sonatype staging validation to reject the close.
Apr 14, 2026

Android SDK 2.10.0

  • Added Jetpack Compose support via the new android-sdk-compose artifact. It auto-initializes via AndroidX Startup — no manual initialization code is required beyond adding the dependency.
  • Session replay now works correctly for Compose apps on API 26+: DefaultViewHierarchyRenderer uses PixelCopy.request(window, ...) to read the GPU framebuffer directly, resolving blank frames caused by hardware-backed bitmaps (Coil, Glide). view.draw() is used as a fallback on API < 26.
  • Added CoralogixDomain.US3 for the US3 region (ingress.us3.rum-ingress-coralogix.com).
  • Fixed session replay masking silently skipping all Compose nodes. maskAllTexts, textsToMask, and Modifier.coralogixMasked() now produce visual mask rectangles over Compose elements — the masking pass was previously gated on is ViewMetadata and did nothing for ComposableViewParams nodes.
  • Fixed maskAllImages not masking Compose image composables. Image detection is now backed by Model.ViewParams.isImage; for Compose nodes this is true when Role.Image semantics are present.
  • Fixed maskInputFieldsOfTypes with EditTextType.PASSWORD not masking Compose password fields. Compose nodes now detect password fields via SemanticsProperties.Password. Only EditTextType.PASSWORD is evaluated for Compose nodes. Learn more
Apr 5, 2026

Android SDK 2.9.5

  • Fixed a ClassCastException crash on Android when using @shopify/react-native-skia alongside the Coralogix SDK — the SDK was calling view.id = generatedId on views with View.NO_ID (such as Skia's SkiaTextureView), corrupting React Native's internal view tag registry. Generated IDs are now stored in a view tag instead, leaving the view's actual Android ID untouched.
Mar 23, 2026

Android SDK 2.9.4

  • Added CoralogixDartObfuscatedStackFrame, a new stack frame type carrying a single virt string, used for obfuscated Dart stack traces from Flutter apps built with --obfuscate.
  • Added optional arch, build_id, and stack_trace_type fields to ErrorContext to carry Flutter-specific symbolication metadata alongside obfuscated frames.
  • Added span attribute constants for the new fields so they round-trip correctly through the OpenTelemetry pipeline and survive the beforeSend callback.
Mar 17, 2026

Android SDK 2.9.3

  • Fixed an error count discrepancy between the RUM main grid and session drilldown — when beforeSend changes an event's severity from Error to non-Error (or drops the event entirely), SnapshotManager.errorCount and embedded snapshotContext.errorCount values are now correctly updated.
  • Fixed hybrid platforms (Flutter / React Native) without a beforeSendCallback silently dropping all spans — events are now exported normally when no callback is configured.
  • snapshotContext removed from EditableCxRum — this field is SDK-internal state and should not be user-editable via beforeSend.
Mar 15, 2026

Android SDK 2.9.2

  • Fixed the request_payload and response_payload schema — both fields are now serialized as plain strings instead of JSON elements, ensuring correct cross-platform schema compatibility.
Mar 11, 2026

Android SDK 2.9.1

  • Fixed resolveNetworkCaptureRule incorrectly using Regex.matches() (which requires a full-string match) instead of containsMatchIn() — URL patterns like example\.com now correctly match against full URLs including scheme and path.
Mar 9, 2026

Android SDK 2.9.0

  • Added a networkCaptureConfig option to CoralogixOptions for capturing request/response headers and payloads on matching network requests.
  • Introduced the NetworkCaptureRule model, supporting exact URL or regex pattern matching, with per-rule control over request/response header and payload collection.
  • Network spans now include request_headers, response_headers, request_payload, and response_payload attributes when capture rules are configured.
  • Fixed URL path encoding in network requests (@Path with encoded = true).
  • Fixed payload serialization: payloads are now surfaced as proper JSON elements rather than escaped strings; non-JSON text payloads (for example, text/plain) are preserved as JSON primitives. Learn more
Mar 8, 2026

Android SDK 2.8.1

  • Native user interaction monitoring (tap, scroll, swipe detection) is now automatically disabled on hybrid platforms (React Native, Flutter). Hybrid SDKs should use the reportUserInteraction public API instead.
Mar 2, 2026

Android SDK 2.8.0

  • Added scroll gesture detection: automatically tracks scroll direction (up, down, left, right) on scrollable views.
  • Added swipe/fling gesture detection: automatically tracks swipe direction (up, down, left, right) on any view.
  • Added the reportUserInteraction public API for hybrid platforms (React Native, Flutter) to manually report user interaction events.
  • Fixed inner_text not being collected for Button views.
  • Network span attributes now conform to the cross-platform cx_rum.* schema, replacing the previous raw attribute dump.
Feb 10, 2026

Android SDK 2.7.2

  • Fixed severity synchronizing for non-native frameworks.
  • Fixed serialization issues.
Feb 8, 2026

Android SDK 2.7.0

  • Added support for Flutter Session Replay.
  • Added configurable Trace-Parent header injection for distributed tracing.
Jan 29, 2026

Android SDK 2.6.4

  • Fixed some issues reported by Android's StrictMode API.
  • Fixed an issue where events were sent with wrong session details (the session was refreshed before the event was sent).
  • Fixed cold and warm start time calculations.
  • Changes to the severity field in beforeSend are now properly updated on the resulting log JSON sent.
Dec 9, 2025

Android SDK 2.6.3

  • Log Context now converts the data into a string instead of a JSON object.
Dec 7, 2025

Android SDK 2.6.2

  • Network Context duration is now reported in milliseconds.
Nov 20, 2025

Android SDK 2.6.1

  • Fixed the MobileVitalsInstrumentation to clear measurement windows on detectors in case of a navigation event.
  • Improved threading support where needed in the detector implementations.
  • Fixed a bug with the idle mobile vitals event; it is now triggered every 15 seconds as per business rules.
  • Fixed incorrect validation of enabled/disabled detectors when deciding whether to start the MobileVitalsInstrumentation.
Nov 18, 2025

Android SDK 2.6.0

  • Changed the labels map to support any values; it is now of type Map<String, Any?>.
  • The log method data and labels parameters are also of type Map<String, Any?> now and are sent as JSON objects instead of escaped String instances.
Nov 3, 2025

Android SDK 2.5.7

  • Session Replay masking now supports custom text patterns and regex expressions via textsToMask.
  • Session Replay includes a maskAllImages option to mask all image views during recording.
  • Enhanced precision in mobile vitals metrics with rounded measurements. Learn more