Breaking change: the minimum supported Kotlin version has increased from 1.8 to 2.0.
- Mark the
android-api, which contains theOpenTelemetryRuminterface, as stable. #1612 - Bump the minimum supported Kotlin version to 2.0. #1489
- Multiple instrumentation modules have been converted from Java to Kotlin, including ANR, activity, fragment, websocket, and network instrumentation. (#1551, #1552, #1553, #1554, #1557, #1570, #1571, #1572)
- Added metadata file for integration with the Google Play Console. (#1578)
- Increase test coverage for sessions. (#1583)
- Fix clock baseline computation to correctly use nanosecond offsets. (#1574)
- Adding support for patch and rc version bump during a release. (#1538)
This is a regular monthly release that builds on the following OpenTelemetry dependencies:
- OpenTelemetry java instrumentation 2.24.0.
- OpenTelemetry java contrib 1.53.0.
- OpenTelemetry java 1.58.0.
- The OpenTelemetry Resource now contains
android.os.api_level. The value is set to the Android API level used by the application build. (#1455) - Add the ability to customize the OpenTelemetry resource via the OpenTelemetryRumInitializer DSL (#1476)
- The OpenTelemetry Resource now contains the
app.installation.idattribute. The value is set a random UUID which is persisted in SharedPreferences across launches. (#1488) - The OpenTelemetryRumInitializer now exposes a means of setting the OpenTelemetry clock. Please note that most users will never need to do this, and an enhanced clock implementation is provided as an internal detail. (#1486)
- New OpenTelemetry clock implementation that is no longer impacted by deep sleeps. This yields more accurate elapsed time semantics for timeouts and background tasks. (#1487)
- Retry exporting unsuccessfully exported batches (#1493)
- Fix a concurrency issue in the Session Manager (#1419)
- Add missing default method override in compose click instrumentation. (#1464)
- Don't obfuscate fragment names (#1490)
- Leverage detekt type resolution for enahanced static analysis. (#1463)
- Patch release to drop
-alphasuffix for the agent module. Sorry for any confusion this may have caused.
โญ Promote rc.1 to v1.0.0.
This release promotes v1.0.0-rc1 to v1.0.0 without any additional changes. This release also denotes the first stable version of the OpenTelemetry Android Agent!
Going forward, we will prevent breaking changes to the agent API until the next major version. Other modules, including instrumentation, are still marked as alpha and will each have an individual trajectory toward stability.
Thanks to everyone involved in making this stable release a success!
Good news, everyone! This denotes the first "stable" release candidate (rc.1)
of OpenTelemetry Android. In a future release, after we have concluded that
there are no significant issues or changes to the android-agent API,
we will drop the rc (release candidate) designation and consider the
android-agent a "stable" release.
Take note that even after the rc designation is removed, most modules
will still contain an -alpha suffix to indicate that they are a future
stability target.
Please note that, as part of our stabilization effort, we have introduced
a few breaking changes in this release. The OpenTelemetryRumInitializer API,
which we expect most users to be leveraging, should not have breaking
changes in this release (with one exception noted below).
Users who may have been utilizing the OpenTelemetryRumBuilder class directly
through a transitive dependency from the android-agent module, without declaring
a direct dependency on the core module, will have compilation errors.
These errors can be resolved by declaring a direct gradle dependency on the
core module.
By default, the agent now enables gzip compression for exported data.
Most users should benefit from this, but if gzip is not desired it may
be disabled by setting compression = Compression.NONE in the httpExport
block of the agent configuration.
- The OpenTelemetryRumBuilder is now a Kotlin class. (#1372)
- Gzip compression is now enabled by default for exporters. (#1360)
- Drop
RUM_SDK_VERSIONin favour ofTELEMETRY_SDK_VERSION(#1365) - Move OpenTelemetryRum to a new API module. (#1387)
- New instrumentation that reports screen orientation changes. (#1333)
- Activity and Fragment instrumentation may now be uninstalled. (#1369)
- Add compat fix for obtaining the thread id on versions >=
BAKLAVA(36). (#1346) - Rename event name
event.app.widget.clicktoapp.widget.click(#1391) - Add
openTelemetrygetter toOpenTelemetryRumto fix breaking API change (#1373) - Fix metrics aggregation temporality when using disk buffering. (#1405)
- Fix instrumentation ordering problem, which could prevent
session.startevent from firing in some cases. (#1413) - Enable disk buffering by default. (#1416)
- Remove final remaining usages of mockito in favor of mockk. (#1362)
Note: This version is not the first release candidate. We had previously announced that the October 2025 release would be our first release candidate, but this effort is temporarily paused.
We are still soliciting feedback from users as we approach a 1.0.0 milestone and
mark the android-agent and OpenTelemetryRumInitializer api stable. Please see
#1257
to join the discussion.
The full list of commits included in this release may be viewed here.
- Removing OTelRumConfig from initializer (#1272)
SessionStorageandSessionIdGeneratorare now internal interfaces. (#1278)
- The agent initializer now uses a typesafe DSL for configuration parameters. Existing users of the initialization API may need to made some modifications, but we think this is a nice extensible pattern for the initializer.
- Unstable APIs now leverage a new
@Incubatingannotation, which leverages the kotlin compiler to emit warnings about use of unstable APIs (#1238)
- Add functional interfaces to support config DSL via agent initializer. (#1275)
- Config for disabling default instrumentations via agent initializer. (#1273)
- Enhanced detection of
service.namewhen the application label is populated with build placeholders. (#1302)
- Testing now uses Marshmallow as a lower bound. (#1230)
- Improve PR code coverage reporting by running codecov on main branch (#1236)
- Update main CI build from Java 17 to Java 21. (#1317)
- Drop volley instrumentation. (#1228)
- Introduce configuration DSL for
OpenTelemetryRumInitializer(#1198) - Refactor jank to use events instead of zero-duration spans
(#1175) - Add experimental ability to close Services (#1196)
- Add more warning logs in Network detection
(#1205)
- Drop API 21 (Lollipop) test automation with Robolectric. (#1189)
- Volley HTTP instrumentation is now marked as deprecated and will be removed in 0.20.0.
Volley has not seen a release in about 4 years
and it is unlikely that it has much adoption. As a result, we have chosen to halt development
of the instrumentation in
opentelemetry-android. #1145
- Allow empty global attributes from empty Supplier at startup (#1102)
- Fix build warning for duplicate module namespace in manifest (#1136)
- Updated ANR data model from span to log event (#1101)
- Experimental OpenTelemetryRum.shutdown() and instrumentation uninstall (#1109)
- build: bump compileSdkVersion to 36 (#1122)
- Remove READ_PHONE_STATE permission and update docs (#1129)
- Okhttp jvm android resolution (#1155)
- Update network fetch - Use relevant APIs and permissions across different API Levels (#1147)
- Alter FilteringSpanExporter to leverage common code from contrib (#1043)
- Instrumentation docs now include installation instructions (#1068)
- OpenTelemetry Android BOM now includes upstream components (instrumentation, sdk, api) (#1075)
- Update docs to reflect that desugaring is required for minSdk < 26 (#1085)
- Include service.version in the default AndroidResource (#1087)
- Agent initialization api (#945)
- Enable disk buffering by default in the demo app (#988)
- Exposing SessionProvider setter (#979)
- Exposing instrumentation api as agent api (#1007)
- Use semantic conventions in click instrumentation (#1008)
- add convenience event emitting api to OpenTelemetryRum (#892)
- Move SessionConfig up (#959)
- Remove runtime dep on androidx fragment navigiation from modules that don't strictly need it (#961)
- Agent default instrumentation config (#976)
- update sonatype urls (#999)
Please be aware that the maven coordinates for many instrumentation modules have changed. Details can be found here.
- Remove
setSessionTimeout()onOtelRumConfigin favor of newsetSessionConfig().(#887) - Update Fragment and Activity attribute names. (#920)
- Generate events for OkHttp Websocket events (#863)**
- Add build-time
android.util.Logcall-site substitutions (#911)
- Support custom attribute extractors to auto-http instrumentations (#867)
- Allow users to configure suppression of some instrumentations. (#883)
- Use event name for crash event (instead of attr) (#894)
- Migrate network change event from zero-duration span to (log-based) event. (#895)
- Fix instrumentation publication collisions (#926)
- This version builds on opentelemetry-java-instrumentation v2.13.3.
- New maven coordinates for http client instrumentations (#791)
okhttp-3.0-library->instrumentation-okhttp-3.0-libraryokhttp-3.0-agent->instrumentation-okhttp-3.0-agenthttpurlconnection-library->instrumentation-httpurlconnection-libraryhttpurlconnection-agent->instrumentation-httpurlconnection-agent
- Remove deprecated
exception.escapedattribute from crash events (#796) DiskBufferingConfigurationrenamed toDiskBufferingConfig(#753)- Remove
ServiceManagerinstance fromInstallationContext(#763) - Remove hard-coded
exception.escapedattribute from crashes (#796) - Drop support for Kotlin 1.7 (#869)
- The android-agent module now publishes a Bill of Materials (BOM). This BOM can be used to coordinate platform dependency versions across the various modules contained in opentelemetry-android (#809)
- Add ability to enable verbose debug for disk buffering config (#753)
- Ensure current screen attribute is included in logs, when configured (#785)
- Default max cache size for disk buffering reduced from 60MB to 10MB (#822)
- Improve concurrency/threading for initialization events (#836)
- Remove minimum disk buffering cache size requirement and pre-allocation (#828)
- Add ability to customize the directory used for disk buffering (#871)
- This version builds on opentelemetry-java-instrumentation v2.11.0.
A reminder that this project is still alpha and may contain breaking changes from release-to-release prior to v1.0.0.
- The
AndroidInstrumentation.install()method signature has changed. Any 3rd-party instrumentation written to this interface will need to be updated. (#671)
- Add the current screen name to crash events. (#704)
- Add R8 consumer rules. (#685)
- Append the session id attribute to all LogRecords. (#697)
- Add support for wired network types in the network detector. (#673)
- Add ability to generate session start/end events. This feature is currently opt-in. (#717, #719)
- Support newer Android network APIs for API >=29. (#736)
- HttpURLConnection instrumentation migration to AutoService API (#592)
- Make HttpURLConnection connection inactivity timeout configurable and add test for harvester code (#569)
- Expose additional disk buffering configuration (#596)
- Many enhancements to the Android demo-app. #545, #554, #568, #570, #577, #584, #598, #604, #605, #627, #634
- Ending "Paused" span for a fragment. (#591)
- start AppStart span when installing activity instrumentation (#578)
- Implementing an instrumentation API to handle auto instrumentations.
(#396) This change included:
- The old module
android-agentwas renamed tocoreand a newandroid-agentmodule was created to bring together the core functionalities plus the default instrumentations. - The following modules were refactored to implement the new
AndroidInstrumentationapi and to invert their dependency with thecoremodule so that thecoreisn't aware of them:activity,anr,crash,fragment,network,slowrendering,startup. - (Breaking) The config options related to auto instrumentations that used to live
in
OtelRumConfigwere move to each instrumentation'sAndroidInstrumentationimplementation. This means that the way to configure auto instrumentations now must be done via theAndroidInstrumentationLoader.getInstrumentation(AndroidInstrumentationImpl::class.java)method whereAndroidInstrumentationImplmust be replaced by the implementation type that will be configured. Each implementation should contain helper functions (setters, adders, etc) to allow configuring itself whenever needed.
- The old module
- Http/sURLConnection auto instrumentation. (#133)
- Logs are now exported to stdout by default. (#424)
- New method to customize log exporter: addLogRecordExporterCustomizer() (#424)
- Adding RUM initialization events. (#397)
- Upgrading Kotlin to 2.0.0 (#388)
- Adding Hanson and Manoel as approvers. (#413)
- Not adding artifacts to the GH release page. (#385)
- Populating the session id on screen for the demo app. (#402)
- Setting up docker compose files for the demo app. (#426)
- Running android tests as part of daily checks. (#509)
- Adding a cart to the demo app. (#518)
- Demo app improvements. (#497, #507, #414)
This version of OpenTelemetry Android is built on:
- OpenTelemetry Java Instrumentation 2.4.0
- OpenTelemetry Java Contrib 1.34.0-alpha
- OpenTelemetry SDK 1.38.0
- Experimental Volley http client instrumentation #291.
- There is now an initial version of an OpenTelemetry Android demo app. #338
- Session timeout duration is now configurable beyond the 15 minute default #330
- Scheduled components now use fixed delay instead of fixed rate #332.
- A variety of small tweaks to the build process to make it smoother and more consistent with other OpenTelemetry Java repos.
Breaking changes include considerable restructuring of the overall project layout. This provides a
much more modularized project that publishes more granular instrumentation modules. Note that as a
result of this, the topmost dependency is changing its name
to io.opentelemetry.android:android-agent.
- Append global attributes to logs signal. (#266)
- Change crash reporting to send a LogRecord instead of Span. (#237)
- Restructure modules (#267, #269, and #276)
- Update upstream deps (#301 and #304)
- Update README re: desugaring (#309)
- Ensure that services are initialized via ServiceManager when
OpenTelemetryRumis built. (#272) - Start the
ServiceManageritself whenOpenTelemetryRumis built. (#278)
- Update to opentelemetry-java-instrumentation 1.32.1
- Update to opentelemetry-java sdk 1.35.0
- Wire up support for ANRs, crash reporting, and slow rendering detection, with configurability support (#192)
- Fix okhttp instrumentation to include known http methods (#215)
- Finish adding initial implementation of through-disk buffering support (#194, #221)
- Update to opentelemetry-java-instrumentation 1.32.0
- Update to opentelemetry-java sdk 1.33.0
- Stabilizing support for okhttp automatic build-time instrumentation (#159)
This is a regular monthly cadence release, which follows the releases of opentelemetry-java-instrumentation and opentelemetry-java (core/sdk).
- Update to opentelemetry-java-instrumentation 1.31.0
- Update to opentelemetry-java sdk 1.31.0
- BREAKING - Update to latest java semantic conventions (#114)
net.host.connection.type->network.connection.typenet.host.carrier.icc->network.carrier.iccnet.host.carrier.mcc->network.carrier.mccnet.host.carrier.mnc->network.carrier.mncnet.host.carrier.name->network.carrier.namenet.host.connection.type->network.connection.typenet.host.connection.subtype->network.connection.subtype
- Add experimental support for okhttp automatic build-time instrumentation (#64, #110)
This version marks the first baseline release of opentelemetry-android instrumentation.
This project is classified as experimental.
- Update to upstream otel sdk 1.29.0 (#75)
- Add
OpenTelemetryRumBuilder.addPropagatorCustomizer()to allow user to customize trace propagation (#71)