3.12.1.3
What's changed
Binding-only release. The native SDK is unchanged — still
dd-sdk-android 3.12.1 — and so
are the package ids, namespaces and API. The fourth component advances for the changes below,
which came out of a full ergonomics review of the four DatadogNet repositories.
Release builds stop losing Datadog classes to R8
DatadogNet.WebView.Android and DatadogNet.Ndk.Android now ship consumer R8/ProGuard
keep-rules under buildTransitive/, imported into the consuming app automatically. Their entry
points — WebViewTracking, NdkCrashReports — are reached from .NET through JNI alone, which a
Java shrinker cannot see, so a shrunk Release build removed them and Enable threw
ClassNotFoundException at runtime from a package that was correctly installed. If you carried a
manual -keep for either, or disabled shrinking to work around this, you can remove the
workaround. New package-layout tests assert the rules stay in the packages.
Supply-chain pins for every Maven artifact
Java dependency verification always checked completeness — that every linked Java type is
provided by some referenced package. It said nothing about authenticity. Now every artifact
this repository resolves has a SHA-256 pinned in build/maven-checksums.txt (18 pins: the
thirteen dd-sdk modules plus Kronos, JCTools, RE2/J and androidx.metrics), and the
VerifyDatadogMavenArtifactHashes target checks the bytes actually resolved — on both the
@(AndroidMavenLibrary) path and the direct-download fallback — on every build. A hash that
changes for an unchanged version fails the build instead of shipping.
build/UpdateMavenChecksums.sh regenerates the pins on upgrade.
The upgrade ritual's sharpest steps are now a script
build/verify-transitive-deps.py re-derives every module's real runtime dependencies from its
Gradle .module metadata — the .pom is polluted by the flattened test-fixtures variant — and
checks them against what the projects declare, and checks the @(AndroidIgnoredJavaDependency)
list against the .pom pollution it neutralises. CI runs it before packing, so a dependency
upstream adds is a named failing coordinate rather than a NoClassDefFoundError in somebody's
app, and an ignore entry upstream retires is a warning rather than a place a real missing
dependency can hide.
Smaller improvements
- nuget.org now shows these notes:
docs/release-notes/<version>.mdis packed into
PackageReleaseNotes, with the releases page as fallback. - README versions can no longer go stale silently — the install snippets sat at
3.12.1.1
while3.12.1.2shipped;build/CheckReadmeVersions.shnow fails CI on drift. - The jctools/re2j versions, previously hand-synchronised across three projects, live once in
Directory.Build.props. - The README states plainly why the generated tier has no IntelliSense (upstream's sources jars
are Kotlin-only, and the binding toolchain's Javadoc import parses Java sources) and where the
documentation therefore lives.
net8 sunset
Stated policy, so the trade-off does not persist by inertia: the net8.0-android34.0 head —
past its platform support window since MAUI 8 left support on 14 May 2025, and the reason the
whole AndroidX/Kotlin dependency set is held below current — is dropped, and the held-back
versions unpinned, in the first release after .NET 8 itself leaves support on
10 November 2026.
Upgrading from 3.12.1.2
Nothing to change. A Release build with R8 enabled may now keep classes that previously
vanished — which is the fix, not a regression.
Full changelog: v3.12.1.2...v3.12.1.3
Packages
Bound against dd-sdk-android 3.12.1, targeting net8.0-android34.0, net9.0-android35.0 and net10.0-android36.0.
The first three components of
3.12.1.3are the dd-sdk-android version; the fourth is this
repository's binding revision, which advances when the bindings or packaging change while
the native binaries stay put.
| Package | Wraps | NuGet |
|---|---|---|
DatadogNet.Internal.Android |
dd-sdk-android-internal |
3.12.1.3 |
DatadogNet.Core.Android |
dd-sdk-android-core |
3.12.1.3 |
DatadogNet.Logs.Android |
dd-sdk-android-logs |
3.12.1.3 |
DatadogNet.TraceApi.Android |
dd-sdk-android-trace-api |
3.12.1.3 |
DatadogNet.TraceInternal.Android |
dd-sdk-android-trace-internal |
3.12.1.3 |
DatadogNet.Trace.Android |
dd-sdk-android-trace |
3.12.1.3 |
DatadogNet.RUM.Android |
dd-sdk-android-rum |
3.12.1.3 |
DatadogNet.SessionReplay.Android |
dd-sdk-android-session-replay |
3.12.1.3 |
DatadogNet.SessionReplayMaterial.Android |
dd-sdk-android-session-replay-material |
3.12.1.3 |
DatadogNet.SessionReplayCompose.Android |
dd-sdk-android-session-replay-compose |
3.12.1.3 |
DatadogNet.Ndk.Android |
dd-sdk-android-ndk |
3.12.1.3 |
DatadogNet.WebView.Android |
dd-sdk-android-webview |
3.12.1.3 |
DatadogNet.OkHttp.Android |
dd-sdk-android-okhttp |
3.12.1.3 |
dotnet add package DatadogNet.RUM.Android --version 3.12.1.3
Licensing
The binding code is MIT; the bundled native binaries are Apache-2.0, as built and
published by Datadog. Each package ships both texts under licenses/.