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:
what 3.12.1.3 started for two packages, this release finishes for all thirteen.
Complete R8 keep-rules, in every package
3.12.1.3 shipped consumer keep-rules for WebView and Ndk. That covered two of the thirteen
JNI-only entry surfaces — and none of upstream's own rules, because .NET for Android never feeds
an .aar's embedded proguard.txt to R8 the way Gradle would. Every package now ships a
generated buildTransitive/<PackageId>.pro with both halves:
- upstream's consumer rules, recovered verbatim from the
.aar— the
-keepattributes SourceFile,LineNumberTablethat Error Tracking needs, the Session Replay
recorder's-keepnames, and the rest that was silently dropped before; - curated keeps for the JNI-only entry surface:
Datadog,Rum/GlobalRumMonitorand the
RumMonitorinterface,LogsandLogger,Trace/DatadogTracing/GlobalDatadogTracer
and the tracer/span/scope/propagation interfaces,SessionReplay, every*Configurationand
itsBuilder, the enums whose constants C# reads, the OkHttp interceptors, and each module's
equivalents. All of it is reached from C# through JNI alone, which a Java shrinker cannot see.
If you enable Java shrinking (AndroidLinkTool=r8) you no longer need hand-written -keep
rules for Datadog classes, and workarounds can be deleted. The rules are generated by
build/generate-r8-rules.sh from the pinned .aars, CI fails on drift, and one emulator leg
now runs the smoke suite against a genuinely shrunk build — so a keep-rule regression fails CI
functionally instead of surfacing as a ClassNotFoundException in your Release build.
IntelliSense from upstream's KDoc
Every binding project now feeds upstream's -sources.jar to the binding generator
(@(JavaSourceJar)), which imports API documentation into the generated XML docs — on all three
target frameworks, downloaded and pinned like every other artifact. Expectations calibrated:
the importer parses Java sources and dd-sdk-android is Kotlin, so coverage is thin rather than
complete — but what it can extract now reaches your editor, and the hand-written convenience
layer remains fully documented.
The supply chain is PGP-verified
The SHA-256 pin list (now 30 pins, sources jars included) anchored what Maven Central served
on the day of pinning. It now also anchors that Datadog signed it:
build/UpdateMavenChecksums.sh downloads each Datadog artifact's detached .asc and verifies
it against Datadog's release signing key, pinned by full fingerprint
(CAF18D4EC00CA4450C6725A59333D4EF32A49F0A). A bad signature is a hard failure; a machine
without gpg skips loudly. The build itself gained a completeness guard — a declared artifact
whose pin is missing fails the build by name instead of slipping past unverified — and CI
regenerates both the pins and the keep-rules on every run and fails on any diff.
Smaller improvements
- New Troubleshooting entry for the
NU1107onXamarin.AndroidX.SavedStatethat every
net8 consumer hits: the direct1.4.0reference that settles it, and why it must not be
applied to net9/net10. - The unbound-artifact roster is complete and watched:
build/packages.tsvnow accounts
for all 41dd-sdk-android*artifacts on Maven Central with a reason per exclusion —
-flags,-flags-openfeatureand-profilingare recorded as binding candidates — and a
weeklyupstream-watchworkflow opens an issue when upstream releases a newer line or
publishes an artifact the roster has never met. - Releases cannot lie about their native version: the release workflow refuses a tag whose
native prefix disagrees withDirectory.Build.props(a documented override exists for the
deliberate case). build/BumpNativeVersion.shscripts the mechanical half of a native upgrade: props,
checksum pins, keep-rules, dependency verification, README versions and a release-notes
scaffold, in one command.
net8 sunset
Unchanged policy: the net8.0-android34.0 head is dropped, and the held-back dependency
versions unpinned, in the first release after .NET 8 leaves support on 10 November 2026.
Upgrading from 3.12.1.3
Nothing to change. A Release build with R8 enabled may keep more classes than before — that is
the point — and binaries are byte-for-byte the same native SDK.
Full changelog: v3.12.1.3...v3.12.1.4
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.4are 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.4 |
DatadogNet.Core.Android |
dd-sdk-android-core |
3.12.1.4 |
DatadogNet.Logs.Android |
dd-sdk-android-logs |
3.12.1.4 |
DatadogNet.TraceApi.Android |
dd-sdk-android-trace-api |
3.12.1.4 |
DatadogNet.TraceInternal.Android |
dd-sdk-android-trace-internal |
3.12.1.4 |
DatadogNet.Trace.Android |
dd-sdk-android-trace |
3.12.1.4 |
DatadogNet.RUM.Android |
dd-sdk-android-rum |
3.12.1.4 |
DatadogNet.SessionReplay.Android |
dd-sdk-android-session-replay |
3.12.1.4 |
DatadogNet.SessionReplayMaterial.Android |
dd-sdk-android-session-replay-material |
3.12.1.4 |
DatadogNet.SessionReplayCompose.Android |
dd-sdk-android-session-replay-compose |
3.12.1.4 |
DatadogNet.Ndk.Android |
dd-sdk-android-ndk |
3.12.1.4 |
DatadogNet.WebView.Android |
dd-sdk-android-webview |
3.12.1.4 |
DatadogNet.OkHttp.Android |
dd-sdk-android-okhttp |
3.12.1.4 |
dotnet add package DatadogNet.RUM.Android --version 3.12.1.4
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/.