Skip to content

Android SDK

The Bitdrift Capture SDK offers developers a straightforward method to seamlessly integrate the Capture platform into their Android applications.

This release page lists releases for the following libraries:

Info

The Android SDK requires a minimum API level of 21.

Info

It's strongly recommended that you keep the versions of all the bitdrift Capture libraries in sync. For instance, if your application uses Capture SDK version 0.9.115, you should also use CaptureTimber version 0.9.115.

Releases

0.17.29

Changelog:

  • Timeout Matcher is now available in the SDK. See Timeout Matcher for more details.

0.17.28

Changelog:

  • Symbol upload for fatal issue reports can be done now via gradle tasks. For more details on setup please refer to Fatal Issues and Crashes
  • Automatic OkHttp instrumentation is now disabled by default. It can be enabled via custom DSL at the bottom of your build.gradle file. See Integration Guide for more details on setup.
  • Remove com.michael-bull.kotlin-result:kotlin-result-jvm dependency
  • Revert running Logger.start on a dedicated background thread
  • Prevent potential issue on native layer for metric changes

0.17.27

Changelog:

  • Fix fatal issue classification logic for background ANRs
  • Capture nested stack traces for JVM crashes

0.17.26

Changelog:

  • Automatically capture timeline and replay logs when a fatal issue is detected.
  • Added an accessor for bitdrift Capture SDK Version.
  • Improved the accuracy of durations for Slow Rendering logs.

0.17.25

Changelog:

  • Fatal issue reports setup is now part of Logger.start call. See Fatal Issues and Crashes for more details on setup.
  • Offloaded Logger.start() internals to a dedicated background thread to reduce launch-time overhead.

0.17.24

Changelog:

  • Fix potential deadlock situation that could occur upon internal blocking logger calls.

0.17.23

Changelog:

  • Beta support for reporting of Fatal Issues and Crashes can now be enabled via Logger.initFatalIssueReporting()
  • Started reporting installation source in the Capture SDK Started log

0.17.22

Changelog:

0.17.21

Changelog:

0.17.20

Changelog:

  • Report the thread name where Logger.start() is called.

0.17.19

Changelog:

  • This release is identical to 0.17.18 release.

0.17.18

Changelog:

  • This release is identical to 0.17.17 release.

0.17.17

Changelog:

  • Added experimental API which collects fatal issues (Crashes, ANRs) when configured.

0.17.16

Changelog:

  • Consolidate prior "Dropped Frames"/Application Not Responding" OOTB events into "Slow Rendering" event.
  • Improve low memory detection mechanism: replaced _trim_level with _is_memory_low, which compares actual app memory usage against ActivityManager.MemoryInfo.threshold for more accurate and reliable low memory detection.
  • Remove unreliable memory fields from AppExit event.
  • Fixes a low volume crash when using modern PixelCopy.
  • Improved the reliability of client metrics.

0.17.15

Changelog:

  • Support optional context in fatal issue reporting initialization to allow setup with a content provider.

0.17.14

Changelog:

  • This is an invalid release, it's our general suggestion to skip this version.

0.17.13

Changelog:

  • Check ring buffer file CRC before reading it. This should prevent the SDK from reading a corrupted file.

0.17.12

Changelog:

  • Fixed typo on the span API used to create child spans

0.17.11

Changelog:

  • Fixed issue that would send larger payloads than needed for the logs that are used to signal app crashes.

0.17.10

Changelog:

  • Enhanced crash integration capabilities
  • Added protocol information to the automatic networking instrumentation
  • Included dontwarn proguard rule for android.app.ApplicationStartInfo

0.17.9

Changelog:

  • Spans with custom start and/or end times are now placed at the provided time in the timeline view
  • Added support for the Measure Duration action, allowing the duration between two log lines to be measured using a workflow

0.17.8

Changelog:

  • Added error reporting for cases where JankStats API returns unexpected duration
  • Changed span interface to include the ability to specify a parent span ID and custom start/end times

0.17.7

Changelog:

  • Include bazel common fix for proper pom packaging
  • Updated Rust version from 1.83 to 1.85
  • Log screen name as part of the dropped frames payload

0.17.6

Changelog:

  • Fixed potential memory leak caused by the automatic tracking of Slow/Frozen Frames and ANR events added in v0.17.3.
  • libcapture.so artifacts now include build-id.

0.17.5

Changelog:

  • Add additional timing metrics to network responses. See HTTP Response Fields section for more details.
  • Enrich existing App Launch event with additional metadata collected from ApplicationStartInfo

0.17.4

Changelog:

  • Made the latency threshold values for the reporting of Slow Frame, Frozen Frame, and ANR events remotely configurable.

0.17.3

Changelog:

0.17.2

Changelog:

  • Improved performance of start() operation by moving non-critical tasks to a background thread

0.17.1

Changelog:

  • This release is identical to the 0.17.0 release.

0.17.0

Changelog:

  • Added more memory-related attributes to 'App Crash' and 'App Termination' events.
  • 'Memory Class' attribute is now reported in megabytes instead of kilobytes, to be consistent with the Android API.
  • Event tracking used for User Journey Sankey charts has been made more reliable.

0.16.12

Changelog:

  • This release is identical to the 0.16.11 release.

0.16.11

Changelog:

  • Added a way for emitting a "Screen View" event. Refer to the Screen Views section for more details.
  • Downgraded dependency on androidx.core to 1.13.1 from 1.15.0 to avoid forcing consumers to compileSdk 35.

0.16.10

Changelog:

  • Set Kotlin version from 2.1.0 to 2.0.0 to prevent build errors on apps targeting 1.9.0

0.16.9

Changelog:

  • Support added for apps targetting Android 15 (API Level 35). This required compiling our native portion to support 16 KB page sizes. You might need to force the androidx.core dependency to target 1.13.1 if you're still on compileSdk 34 or below by adding this to your gradle configuration:
    Kotlin
    configurations.configureEach {
        resolutionStrategy {
            force "androidx.core:core:1.13.1"
        }
    }
    
  • Now targetting Kotlin 2.1. You might need to use the -Xskip-metadata-version-check kotlin compiler flag if you encounter incompatible version of Kotlin when building your app with a Kotlin version of 1.9.0 or below.
    Kotlin
    android {    
      kotlinOptions {
        freeCompilerArgs += listOf("-Xskip-metadata-version-check")
      }
    }
    

0.16.8

Changelog:

  • This release is identical to the 0.16.7 release.

0.16.7

Changelog:

0.16.6

Changelog:

Warning

Workflows with conditions using float numbers will be ignored in previous versions of the SDK.

  • Fixed a bug causing internal timers to fire more often than expected after returning from suspension.
  • Reduced the amount of log messages sent to logcat when parsing invalid Compose views.

0.16.5

Changelog:

  • This release is identical to the 0.16.4 release.

0.16.4

Changelog:

0.16.3

Changelog:

  • Added support for ignoring Compose elements via Modifiers.
  • Fixed an issue where third party libraries would interfere with the OkHttp client used by the Capture SDK.

0.16.2

Changelog:

  • Added a 'Take Screenshot' workflow action, allowing users to capture a screenshot for a specific log or after a designated series of logs.
  • Fixed an issue with Session Replays for Compose where nested legacy AndroidViews were not being rendered correctly.

0.16.1

Changelog:

  • Fixed the implementation of the 'User Journey' workflow action introduced in version 0.16.0 of the SDK to ensure reliable registration of user journeys.

0.16.0

Changelog:

  • Added a 'User Journey' workflow action, enabling users to capture Sankey diagrams to visualize user flows of interest.
  • Reworked the SessionReplayConfiguration APIs by removing the option to disable the session replay screen capture feature or control the screen capture rate. Instead, this feature is now controlled through a remote runtime configuration that can be updated at any time.

0.15.2

Changelog:

  • Fixed a potential issue with an unhandled exception for when another 3rd party SDK injects an interceptor into Capture SDK OkHttp client.

0.15.1

Changelog:

  • This release is identical to 0.15.0 release.

0.15.0

Changelog:

  • Renamed the Logger.configure(...) method to Logger.start(...). To migrate, simply replace Logger.configure(...) with Logger.start(...).
  • Handled cases where the SDK cannot be started due to unexpected reasons.
  • Added exponential backoff and jittering to the logic responsible for establishing connections with the bitdrift control plane.
  • Introduced jittering to the logic handling remote bitdrift control plane configuration updates to prevent the synchronization of all connected SDK clients.

0.14.5

Changelog:

  • This release is identical to 0.14.4 release.

0.14.4

Changelog:

  • Added a remote configurable mechanism to limit the lookback window using during buffer flush. This allows limiting the amount of data sent per flush.
  • Added further compression improvements to the data sent and received to the server, reducing the amount of memory required to process the data server-side.

0.14.3

Changelog:

  • Small improvements to the documentation of the public APIs.

0.14.2

Changelog:

  • Treat responses with 3xx HTTP status codes as successes instead of failures. Previously, only the 304 HTTP status code was considered a success.
  • Fixed a rare crash caused by the PowerManager being returned as null from the application context, even though the API is expected to always return a non-null object.
  • Fixed an issue with the propagation of bitdrift remote configuration, which is responsible for log field manipulation and helps sanitize paths displayed in workflow charts.
  • Updated Rust version from 1.80.1 to 1.81.0.

0.14.1

Changelog:

  • Added an API for emitting the "App Launch TTI" event. Refer to Log Events for more details.
  • Added an option for bitdrift SaaS to control how the path template is extracted from the HTTP URL path.
  • Fixed an issue with out-of-the-box "App Updated" event not being emitted.

0.14.0

Changelog:

  • Added idiomatic kotlin support for tracking spans. Refer to Spans for more details.
  • Added a new out-of-the-box "Thermal State Change" log event that's emitted each time device's thermal state changes. Refer to Log Events for more details.
  • Removed the deprecated OkHttpInterceptor. Use CaptureOkHttpEventListenerFactory instead. For more details, refer to OkHttp integration.
  • Improved the reliability of stats delivery mechanism.
  • Updated NDK version from 25.2.9519653 to 27.0.12077973.

0.13.0

Changelog:

  • Added SDK version attribute to out-of-the-box "SDK Configured" log event.
  • Added support for new SET/NOT_SET matching conditions. More details will be provided once they are available to use in bitdrift frontend.
  • Modified the "App Updated" event logic so that the app installation size is calculated only if needed. This should reduce the number of disk operations the SDK performs.
  • Fixed an issue with fixed session strategy detecting prohibited re-entrance from within the generateSessionID closure.
  • Improved the overall performance of the Logger.configure method call.
  • Removed the option to disable session replay for Compose views. The skipReplayComposeViews parameter was removed from the initializer of SessionReplayConfiguration. Session replay for compose views is enabled by default and can be disabled with a bitdrift remote runtime update. Reach out to the bitdrift team if you want to disable it.

0.12.0

Changelog:

  • Added a new out-of-the-box "App Updated" log event that's emitted when the SDK runs after the app update. The log includes information about the app installation size. Refer to Log Events for more details.
  • Added a new out-of-the-box "SDK Configured" log event that's emitted immediately after the SDK configuration is complete. Refer to Log Events for more details.
  • Added a new out-of-the-box "App Termination" event that's emitted every time the OS reports process exit info. Refer to Log Events for more details.
  • Added a new out-of-the-box "App Version Code" attribute to emitted logs. Refer to Default Fields for more details.
  • Added an option to visualize the duration the SDK spends capturing screen session replay frames on the application's main thread.
  • Added fields to the existing "Resource utilization" log event with information about the amount of used disk space the SDK host app uses.
  • Added fields to the existing "Resource utilization" log event with information about the number of downloaded/uploaded bytes per minute.
  • Added information about the "memory class" to the out-of-the-box memory warnings log event.
  • Added an accessor for bitdrift Capture Identifier. Refer to Device Identifier for more details.
  • Removed the ResourceReportingConfiguration type and the option to configure the resource reporting polling rate. The feature is enabled by default with a polling rate of 6s, controllable remotely by bitdrift services as needed.
  • Significantly reduced the amount of space resource reporting logs take on disk and during over-the-wire transfer.
  • Treat responses with an HTTP status code of 304 as successes instead of failures.
  • Removed an unintended reflection method call from the release version of the SDK.

0.11.3

Changelog:

  • Added APIs for emitting span logs. Refer to Spans for more details.
  • Improved the reliability of logs and stats delivery by flushing the relevant state to disk when the SDK detects an event that may imply the app is about to be terminated or suspended.

0.11.2

Changelog:

  • Improved the logic used to derive path template from the path of HTTP Request. Refer to HTTP Traffic Log Fields for more details.
  • Fixed a potential bug with an infinite loop inside of a logic used to derive path template.

0.11.1

Changelog:

  • This release is identical to 0.11.0 release.

0.11.0

Changelog:

  • Deprecated CaptureOkHttpInterceptor used to instrument HTTP requests performed by the app. Use newly introduced CaptureOkHttpEventListenerFactory to integrate Capture with OkHttp networking stack. Refer to OkHttp (Android) for more details.
  • Added new out-of-the-box fields to HTTP request and HTTP response logs. Refer to HTTP Traffic Logs for more details.
  • Made Session Replay capable of distinguishing between off and on switches in Compose views.

0.10.0

Changelog:

  • The Session Replay support for Jetpack Compose has been rewritten from the ground-up to improve performance and reliability. Additionally Compose is now enabled by default as part of the SessionReplayConfiguration. It is strongly recommended to update to this version if you're using Compose views in your applications.

0.9.118

Changelog:

  • The first release to support the collection of 'Workflow Insights,' a new feature that will add extra aggregated information to all workflow actions. A separate announcement will be made once the feature is available to the public, but we recommend that customers upgrade their SDK now so they can start benefiting from the new feature as soon as it's released.
  • Added a new out-of-the-box locale attribute that is collected as part of the emitted logs. Refer to Default Fields for more details.
  • Changed the type of path argument of HttpRequestInfo and HttpResponseInfo classes from String? to newly introduced HttpUrlPath.

0.9.117

Changelog:

  • This release is identical to 0.9.116 release.

0.9.116

Changelog:

  • Make the path argument of HTTPRequestInfo optional.
  • Revamped support for app and OS version matching. Refer to Version Matching for more details.

0.9.115

Changelog:

  • Released side libraries for integrating Capture SDK with Timber 3rd party logging library. See Log Forwarding for more details.

0.9.114

Changelog:

  • This release is identical to 0.9.113 release.

0.9.113

Changelog:

  • Add an optional argument of Throwable type to all methods from the log(...) family of methods. See custom logs for more details.

0.9.112

Changelog:

  • This release is identical to 0.9.111 release.

0.9.111

Changelog:

  • Add addField(...) and removeField(...) methods that can be used to add and remove fields to be attached to all logs emitted by the SDK.
  • Omit fields whose names start with _ and are provided via addField(...) or returned by FieldProviders registered with the SDK. See Field Additions and Removal methods for more details.
  • Drop fields whose names are on the the list of reserved log field names. See Fields for more details.

0.9.110

Changelog:

  • Fixed broken createTemporaryDeviceCode() method, which was returning an invalid code.

0.9.109

Changelog:

  • Added createTemporaryDeviceCode(completion:) method, which creates a temporary device code that can be used to stream logs from a given device in real-time. See bd cli for more details.

0.9.108

Changelog:

  • Introduced significant improvements to the way session logs are uploaded. With this update, users now have access to logs not only before the workflow's 'Record Session' action triggers but also after the trigger. This enhancement provides a more comprehensive view of session logs, empowering users to gain deeper insights into their workflows and troubleshoot issues more effectively.
  • Added Logger.log(level:message:info:) method that takes log severity level as one of its arguments. The existence of this method may help reduce the amount of boilerplate needed to forward logs from existing logging systems into bitdrift.

0.9.107

Changelog:

  • Exposed a convenience API method to retrieve a session permalink URL in the Logger.
  • Fixed a potential bug that may have caused a logger internal run loop to get stuck until the next app relaunch.

0.9.106

Changelog:

  • Improved support for Funnel Analysis. This update is recommended for customers interested in using funnels in their workflows.
  • Funnels improvements were accomplished partially by changes to workflows' traversal rules and have limited impact on session captures and stats emission actions in multi-steps workflows. The final result should be be more intuitive results of workflow actions.

0.9.105

Changelog:

  • Added support for on-demand log streaming, used to power real-time debugging tools.

0.9.104

Changelog:

  • Fixed a rare IllegalArgumentException related to the use of moshi serialization and kotlin.
  • Removed moshi as a dependency.

0.9.103

Changelog:

  • Made public APIs more Java friendly.
  • Changed the order the params in the configure() method to denote their importance.

0.9.102

Changelog:

  • This release is identical to 0.9.101 release.

0.9.101

Changelog:

  • This release is identical to 0.9.100 release.

0.9.100

Changelog:

  • Reduced the minimum required Android SDK to API level 21 (down from 24).

0.9.99

Changelog:

  • Update ProGuard rules, disable androidx related warnings.
  • Remove references to unused protobuf code. The change led to the reduction of the size of SDK binaries by around 4 KiB.

0.9.98

Changelog:

  • Make Java Native Interface (JNI) code more robust and resilient.
  • Update ProGuard rules, fix unexpected SDK errors reporting.

0.9.97

Changelog:

  • Disable internal debug and trace logs for improved performance and reduced binary size (~40 KiB smaller binary).

0.9.96

Changelog:

  • Fix ProGuard misconfiguration issue that caused the SDK to throw an exception during Logger.configure(...) method call.

0.9.95

Changelog:

  • First public release of the bitdrift Capture SDK.