RUM Android SDK release notes
Jun 9, 2026
Android SDK 2.16.0
- Added
view_numberandisNavigationEventto every RUM event undercx_rumfor product analytics.view_numberis a 0-based counter of distinct view changes in the session (first view = 0);isNavigationEventistrueon 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_initinternal event whenSessionReplay.initialize()succeeds (the session was not dropped bySessionReplayOptions.sessionRecordingSampleRate), carrying the resolved session-replay configuration underinternal_event_dataso the backend can observe how each session was configured. The payload includescaptureScale,captureCompressQuality,sessionRecordingSampleRate,autoStartSessionRecording,maskAllTexts,textsToMask,maskInputFieldsOfTypes,maskAllImages, and ahasFlutterViewBitmapProviderpresence flag. Mirrors the existing SDK init log emitted onCoralogixRum.initialize()(internal_event_type = "init"). Learn more
Jun 7, 2026
Android SDK 2.14.1
beforeSendmodifications now land on both serialization destinations a span produces:text.cx_rum.*(the RUM payload) andinstrumentation_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-beforeSendstruct, so customer redactions (for example,network_request_context.url) showed up intext.cx_rumonly. The rebuild is gated onbeforeSend != null, so customers who don't set a callback keep the struct-driven init-time attribute build.CxRum.applyBeforeSendLogicnow ignoresspanId,traceId,parentSpanId, andisSnapshotEventfrom the customer'sEditableCxRumreturn value and restores them from the original. These are identity / SDK-owned signals and abeforeSendcallback 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'seditable.copy(labels = null)is now coerced to an emptyJsonObject, andcx_rum.session_creation_dateis now omitted from the OTLP attribute mirror when the underlying value is0L(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 ascollectFrozenMaskRects, guaranteeing pixel/mask alignment. - Fixed Flutter session replay masking:
FlutterSurfaceViewrenders outside the View hierarchy, so the previousPixelCopy+ region-pull approach produced misaligned masks. The newflutterViewBitmapProviderpath 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 onDispatchers.Defaultinstead of the main thread, and is now computed viawithContext(Dispatchers.Main). - Fixed
frameCapturer.cleanup()(which removesViewTreeObserver.OnDrawListenerentries) never being called fromSessionReplayInternal.shutdown(), which caused listeners to fire indefinitely after session replay was shut down. - Fixed a bitmap not being recycled if
copyPixelsFromBufferthrows (OEM stride mismatch); it is now wrapped intry/finally. NetworkConnectivityMonitorno longer crashes withConcurrentModificationExceptionwhen 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.flutterViewBitmapProvidersuspendcallback 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 toCoralogixErrorDecorator, matching the iOS SDK naming. Callers ofCoralogixRum.reportError(decorator)can now attach custom attributes that are emitted on the resulting RUM error event undererrorContext.data, JSON-encoded in the same shape iOS uses. Existing call sites are unaffected — the new parameter defaults tonull.
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
SessionManagerrotated the session, stamping them with the stale session ID from the previous day.SessionManager.getSessionId()now checksshouldRefreshSession()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 -1crash inTouchEventDispatcher. Multi-touch actions (ACTION_POINTER_DOWN/ACTION_POINTER_UP) are now filtered out before being forwarded toGestureDetector, which only handles single-pointer gestures. instrumentation_data.otelSpan.attributesnow includescx_rum.session_context.session_creation_date(Long, milliseconds) andcx_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 andCoralogixRum.endTimeMeasure(name)to stop it. The elapsed duration (in milliseconds) is emitted as aMeasurementevent with themeasurement_nameattribute set tonameand the optionallabelsmerged 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>toCoralogixOptions. Instrumentation categories listed here are exported at 100% even when the current session has been sampled out bysessionSampleRate. 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, andLifecycle. - 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
ExcludableInstrumentationenum to thecom.coralogix.android.sdk.modelpackage.
May 5, 2026
Android SDK 2.11.2
- Fixed Flutter session replay capturing black frames on Android.
FlutterSurfaceViewrenders in a separate hardware compositor layer that window-levelPixelCopycannot see. A newFlutterSurfaceViewPatchingStrategydecorator now runs a per-surfacePixelCopy.request(surfaceView, ...)pass after the main window capture, patching the Flutter content directly into the frame. OnlyFlutterSurfaceViewis targeted — otherSurfaceViewsubclasses (video, camera) are intentionally skipped to avoid expensive GPU readbacks.
Apr 26, 2026
Android SDK 2.11.1
getCustomTracer(ignoredInstruments)now accepts aSet<CoralogixIgnoredInstrument>instead ofList, eliminating accidental duplicate entries.CoralogixGlobalSpan.runInSpanContextrenamed towithContext(generic return:fun <R> withContext(block: () -> R): R) — matches the iOS, Browser, and React Native naming.CoralogixCustomSpan.addEventnow accepts an optionaltimestampandTimeUnit, aligning with the iOS overload that takes an explicit event time.startGlobalSpannow returnsnullimmediately 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 correctparentSpanIdlinking child spans to their parent. - Added a
toJson()convenience method toCoralogixTraceExporterData. Learn more
Apr 16, 2026
Android SDK 2.11.0
- Added a Custom Spans API: obtain a tracer via
CoralogixRum.getCustomTracer(), then callstartGlobalSpan(name)to open a root trace andCoralogixGlobalSpan.startCustomSpan(name)to attach child spans. All spans appear in the Coralogix RUM trace view, are automatically correlated with the active session, and propagate thetraceparentheader to outgoing network requests while the global span is active. Learn more - Added a
tracesExporteroption inCoralogixOptions: 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
ConcurrentModificationExceptioncrash inActivityLifecycleMonitor.reportLifecycleEventwhen lifecycle events fire concurrently with listener add/remove operations.monitorListenersis now aCopyOnWriteArrayList, so iteration always works on a snapshot and is unaffected by concurrent modifications.
Apr 15, 2026
Android SDK 2.10.1
- Fixed
android-sdk-composefailing to publish to Maven Central — the generated POM was missing the<version>element for thecom.coralogix:android-sdkdependency, 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-composeartifact. 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+:
DefaultViewHierarchyRendererusesPixelCopy.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.US3for the US3 region (ingress.us3.rum-ingress-coralogix.com). - Fixed session replay masking silently skipping all Compose nodes.
maskAllTexts,textsToMask, andModifier.coralogixMasked()now produce visual mask rectangles over Compose elements — the masking pass was previously gated onis ViewMetadataand did nothing forComposableViewParamsnodes. - Fixed
maskAllImagesnot masking Compose image composables. Image detection is now backed byModel.ViewParams.isImage; for Compose nodes this istruewhenRole.Imagesemantics are present. - Fixed
maskInputFieldsOfTypeswithEditTextType.PASSWORDnot masking Compose password fields. Compose nodes now detect password fields viaSemanticsProperties.Password. OnlyEditTextType.PASSWORDis evaluated for Compose nodes. Learn more
Apr 5, 2026
Android SDK 2.9.5
- Fixed a
ClassCastExceptioncrash on Android when using@shopify/react-native-skiaalongside the Coralogix SDK — the SDK was callingview.id = generatedIdon views withView.NO_ID(such as Skia'sSkiaTextureView), 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 singlevirtstring, used for obfuscated Dart stack traces from Flutter apps built with--obfuscate. - Added optional
arch,build_id, andstack_trace_typefields toErrorContextto 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
beforeSendcallback.
Mar 17, 2026
Android SDK 2.9.3
- Fixed an error count discrepancy between the RUM main grid and session drilldown — when
beforeSendchanges an event's severity from Error to non-Error (or drops the event entirely),SnapshotManager.errorCountand embeddedsnapshotContext.errorCountvalues are now correctly updated. - Fixed hybrid platforms (Flutter / React Native) without a
beforeSendCallbacksilently dropping all spans — events are now exported normally when no callback is configured. snapshotContextremoved fromEditableCxRum— this field is SDK-internal state and should not be user-editable viabeforeSend.
Mar 15, 2026
Android SDK 2.9.2
- Fixed the
request_payloadandresponse_payloadschema — 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
resolveNetworkCaptureRuleincorrectly usingRegex.matches()(which requires a full-string match) instead ofcontainsMatchIn()— URL patterns likeexample\.comnow correctly match against full URLs including scheme and path.
Mar 9, 2026
Android SDK 2.9.0
- Added a
networkCaptureConfigoption toCoralogixOptionsfor capturing request/response headers and payloads on matching network requests. - Introduced the
NetworkCaptureRulemodel, 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, andresponse_payloadattributes when capture rules are configured. - Fixed URL path encoding in network requests (
@Pathwithencoded = 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
reportUserInteractionpublic 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
reportUserInteractionpublic API for hybrid platforms (React Native, Flutter) to manually report user interaction events. - Fixed
inner_textnot being collected forButtonviews. - 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
StrictModeAPI. - 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
severityfield inbeforeSendare 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
MobileVitalsInstrumentationto 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
labelsmap to support any values; it is now of typeMap<String, Any?>. - The
logmethoddataandlabelsparameters are also of typeMap<String, Any?>now and are sent as JSON objects instead of escapedStringinstances.
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
maskAllImagesoption to mask all image views during recording. - Enhanced precision in mobile vitals metrics with rounded measurements. Learn more
Theme
Light