|
| 1 | +# Embrace Android SDK versioning strategy |
| 2 | + |
| 3 | +The Embrace Android SDK is built to evolve with the Android ecosystem while maintaining a stable integration experience. |
| 4 | +This document explains how we choose which versions of Android build tools and technologies to support, and what guarantees you can expect when upgrading. |
| 5 | + |
| 6 | +--- |
| 7 | + |
| 8 | +## Minimum supported versions |
| 9 | + |
| 10 | +For versions **8.0.0 and newer**, the Embrace Android SDK requires the following minimum tool and platform versions: |
| 11 | + |
| 12 | +| **Technology** | **Minimum Version** | |
| 13 | +| --- | --- | |
| 14 | +| **Kotlin** | 2.0.21 | |
| 15 | +| **Gradle** | 8.0.2 | |
| 16 | +| **Android Gradle Plugin (AGP)** | 8.0.2 | |
| 17 | +| **minSdk** | 26 * | |
| 18 | +| **minCompileSdk** | 34 | |
| 19 | +| **Build JDK version** | 17 | |
| 20 | +| **sourceCompatibility** | 11 | |
| 21 | + |
| 22 | +\* Due to a dependency in **opentelemetry-java** that requires a Java 11 class, **desugaring is required** to use Embrace with a lower `minSdk`. |
| 23 | +With desugaring enabled, Embrace supports `minSdk 21`, though Gradle should be updated to 8.4 and AGP to 8.3.0. |
| 24 | + |
| 25 | +--- |
| 26 | + |
| 27 | +## Why we don’t support every version |
| 28 | + |
| 29 | +Supporting very old versions of build tools and libraries has an ongoing maintenance cost. |
| 30 | +Outdated toolchains often prevent us from adopting newer Android APIs and features. |
| 31 | + |
| 32 | +To provide the best experience — modern APIs, better performance, and faster support — we intentionally follow the evolution of the Android toolchain. |
| 33 | +While we aim to minimize disruption and support a reasonable range of versions, we expect occasional updates to be necessary. |
| 34 | + |
| 35 | +--- |
| 36 | + |
| 37 | +## Our versioning principles |
| 38 | + |
| 39 | +We follow these principles to stay aligned with the Android ecosystem: |
| 40 | + |
| 41 | +### **Kotlin** |
| 42 | + |
| 43 | +We build with the latest Kotlin version and target up to four versions behind it. |
| 44 | +Dropping support for older Kotlin versions only happens in a major SDK release. |
| 45 | + |
| 46 | +### **AGP and Gradle** |
| 47 | + |
| 48 | +We support the latest two major versions of AGP and Gradle, or higher if required by Kotlin. |
| 49 | +Because these tools don’t strictly follow semantic versioning, we may drop older versions when necessary to maintain compatibility or stability. |
| 50 | + |
| 51 | +### **minSdk and minCompileSdk** |
| 52 | + |
| 53 | +We align our `minSdk` with the minimum required by Jetpack Compose, since most Android projects adopt new minimums when Compose does. |
| 54 | + |
| 55 | +### **Build-time JDK** |
| 56 | + |
| 57 | +We require the JDK version needed by the minimum supported version of Gradle. |
| 58 | + |
| 59 | +### **sourceCompatibility** |
| 60 | + |
| 61 | +We set `sourceCompatibility = 11` and rely on **desugaring**, which allows apps with lower `minSdk` values to use modern Java 11+ language features. |
| 62 | +More info: [Java 8+ desugaring in Android Studio](https://developer.android.com/studio/write/java8-support) |
| 63 | + |
| 64 | +### **OpenTelemetry API** |
| 65 | + |
| 66 | +We track the latest stable OpenTelemetry Java and Kotlin APIs. |
| 67 | +Breaking changes in these projects are rare; if they occur, we will assess whether they require a major SDK release. |
| 68 | + |
| 69 | +### **NDK** |
| 70 | + |
| 71 | +We always build with the latest stable NDK, since apps don’t link against our native libraries directly. |
0 commit comments