From 707bc5f8a2f4bfb3a5792767577e8abb73a6bee0 Mon Sep 17 00:00:00 2001 From: Marco Saia Date: Mon, 31 Aug 2026 11:58:52 +0200 Subject: [PATCH 1/4] Bump Android SDK version to v3.13.1 --- benchmarks/android/app/build.gradle | 4 ++-- packages/core/android/build.gradle | 16 ++++++++-------- .../internal-testing-tools/android/build.gradle | 2 +- .../android/build.gradle | 4 ++-- .../react-native-webview/android/build.gradle | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/benchmarks/android/app/build.gradle b/benchmarks/android/app/build.gradle index 7c6724b7b..af90679f6 100644 --- a/benchmarks/android/app/build.gradle +++ b/benchmarks/android/app/build.gradle @@ -129,7 +129,7 @@ dependencies { // Benchmark tools from dd-sdk-android are used for vitals recording // Remember to bump this alongside the main dd-sdk-android dependencies - implementation("com.datadoghq:dd-sdk-android-benchmark-internal:3.12.1") + implementation("com.datadoghq:dd-sdk-android-benchmark-internal:3.13.1") // Required for compile-time access to Datadog.getInstance() required by BenchmarkVitalsModuleImpl - implementation("com.datadoghq:dd-sdk-android-core:3.12.1") + implementation("com.datadoghq:dd-sdk-android-core:3.13.1") } diff --git a/packages/core/android/build.gradle b/packages/core/android/build.gradle index 46e6be6a8..1b3238fa2 100644 --- a/packages/core/android/build.gradle +++ b/packages/core/android/build.gradle @@ -213,7 +213,7 @@ dependencies { // This breaks builds if the React Native target is below 0.76.0. as it relies on Gradle 8.5.0. // To avoid this, we enforce 1.0.0-beta01 on RN < 0.76.0 if (reactNativeMinorVersion < 76) { - implementation("com.datadoghq:dd-sdk-android-rum:3.12.1") { + implementation("com.datadoghq:dd-sdk-android-rum:3.13.1") { exclude group: "androidx.metrics", module: "metrics-performance" } implementation "androidx.metrics:metrics-performance:1.0.0-beta01" @@ -233,14 +233,14 @@ dependencies { } } } else { - implementation "com.datadoghq:dd-sdk-android-rum:3.12.1" + implementation "com.datadoghq:dd-sdk-android-rum:3.13.1" } - implementation "com.datadoghq:dd-sdk-android-logs:3.12.1" - implementation "com.datadoghq:dd-sdk-android-trace:3.12.1" - implementation "com.datadoghq:dd-sdk-android-webview:3.12.1" - implementation "com.datadoghq:dd-sdk-android-ndk:3.12.1" - implementation "com.datadoghq:dd-sdk-android-flags:3.12.1" - implementation "com.datadoghq:dd-sdk-android-internal:3.12.1" + implementation "com.datadoghq:dd-sdk-android-logs:3.13.1" + implementation "com.datadoghq:dd-sdk-android-trace:3.13.1" + implementation "com.datadoghq:dd-sdk-android-webview:3.13.1" + implementation "com.datadoghq:dd-sdk-android-ndk:3.13.1" + implementation "com.datadoghq:dd-sdk-android-flags:3.13.1" + implementation "com.datadoghq:dd-sdk-android-internal:3.13.1" implementation "com.google.code.gson:gson:2.11.0" testImplementation "org.junit.platform:junit-platform-launcher:1.6.2" testImplementation "org.junit.jupiter:junit-jupiter-api:5.6.2" diff --git a/packages/internal-testing-tools/android/build.gradle b/packages/internal-testing-tools/android/build.gradle index 7a10f232d..276d3e508 100644 --- a/packages/internal-testing-tools/android/build.gradle +++ b/packages/internal-testing-tools/android/build.gradle @@ -188,7 +188,7 @@ dependencies { } implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation project(path: ':datadog_mobile-react-native') - implementation "com.datadoghq:dd-sdk-android-core:3.12.1" + implementation "com.datadoghq:dd-sdk-android-core:3.13.1" implementation "com.google.code.gson:gson:2.11.0" testImplementation "org.junit.platform:junit-platform-launcher:1.6.2" diff --git a/packages/react-native-session-replay/android/build.gradle b/packages/react-native-session-replay/android/build.gradle index cdd0506b2..f9f1b3da3 100644 --- a/packages/react-native-session-replay/android/build.gradle +++ b/packages/react-native-session-replay/android/build.gradle @@ -216,8 +216,8 @@ dependencies { api "com.facebook.react:react-android:$reactNativeVersion" } implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation "com.datadoghq:dd-sdk-android-session-replay:3.12.1" - implementation "com.datadoghq:dd-sdk-android-internal:3.12.1" + implementation "com.datadoghq:dd-sdk-android-session-replay:3.13.1" + implementation "com.datadoghq:dd-sdk-android-internal:3.13.1" implementation project(path: ':datadog_mobile-react-native') testImplementation "org.junit.platform:junit-platform-launcher:1.6.2" diff --git a/packages/react-native-webview/android/build.gradle b/packages/react-native-webview/android/build.gradle index 2461334b2..e145fb2cd 100644 --- a/packages/react-native-webview/android/build.gradle +++ b/packages/react-native-webview/android/build.gradle @@ -196,7 +196,7 @@ dependencies { implementation "com.facebook.react:react-android:$reactNativeVersion" } - implementation "com.datadoghq:dd-sdk-android-webview:3.12.1" + implementation "com.datadoghq:dd-sdk-android-webview:3.13.1" implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation project(path: ':datadog_mobile-react-native') From 32f5b4222fd33dff2cc6780b00a63a0caa854444 Mon Sep 17 00:00:00 2001 From: Marco Saia Date: Mon, 31 Aug 2026 12:13:28 +0200 Subject: [PATCH 2/4] fix: UnparsedFlag breaking change --- .../kotlin/com/datadog/reactnative/DdFlagsImplementation.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdFlagsImplementation.kt b/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdFlagsImplementation.kt index 7d8d4e3b4..3882d53d1 100644 --- a/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdFlagsImplementation.kt +++ b/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdFlagsImplementation.kt @@ -222,6 +222,8 @@ private fun convertUnparsedFlagToMap( "reason" to flag.reason, "doLog" to flag.doLog, "extraLogging" to flag.extraLogging.toMap(), + // Serialized as a String because the React Native bridge converts Long values to Double + "serialId" to flag.serialId?.toString() ) } @@ -237,4 +239,7 @@ private fun convertMapToUnparsedFlag(map: Map): UnparsedFlag = (map["extraLogging"] as? Map)?.toJSONObject() ?: JSONObject() override val reason: String = map["reason"] as? String ?: "" + override val serialId: Long? = + (map["serialId"] as? String)?.toLongOrNull() + ?: (map["serialId"] as? Number)?.toLong() } From 9a6c9c5bd698892fdbef00b05f9511a242bfcd18 Mon Sep 17 00:00:00 2001 From: Marco Saia Date: Mon, 31 Aug 2026 12:28:56 +0200 Subject: [PATCH 3/4] fix: internal-testing-tools breaking changes --- .../internaltesting/DdInternalTestingImplementation.kt | 2 -- .../DdInternalTestingImplementationTest.kt | 9 +++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/internal-testing-tools/android/src/main/kotlin/com/datadog/reactnative/internaltesting/DdInternalTestingImplementation.kt b/packages/internal-testing-tools/android/src/main/kotlin/com/datadog/reactnative/internaltesting/DdInternalTestingImplementation.kt index ce9d1e840..6f7cfe512 100644 --- a/packages/internal-testing-tools/android/src/main/kotlin/com/datadog/reactnative/internaltesting/DdInternalTestingImplementation.kt +++ b/packages/internal-testing-tools/android/src/main/kotlin/com/datadog/reactnative/internaltesting/DdInternalTestingImplementation.kt @@ -187,8 +187,6 @@ internal class EventWriteScopeInterceptor : EventWriteScope { } private val writer = object : EventBatchWriter { - override fun currentMetadata(): ByteArray? = null - override fun write( event: RawBatchEvent, batchMetadata: ByteArray?, diff --git a/packages/internal-testing-tools/android/src/test/kotlin/com/datadog/reactnative/internaltesting/DdInternalTestingImplementationTest.kt b/packages/internal-testing-tools/android/src/test/kotlin/com/datadog/reactnative/internaltesting/DdInternalTestingImplementationTest.kt index d25db9274..f691a735b 100644 --- a/packages/internal-testing-tools/android/src/test/kotlin/com/datadog/reactnative/internaltesting/DdInternalTestingImplementationTest.kt +++ b/packages/internal-testing-tools/android/src/test/kotlin/com/datadog/reactnative/internaltesting/DdInternalTestingImplementationTest.kt @@ -132,10 +132,11 @@ internal class MockFeatureScope(private val feature: Feature) : FeatureScope { ) { } - override fun getWriteContextSync( - withFeatureContexts: Set - ): Pair? { - return TODO("Provide the return value") + override fun withWriteContextSync( + withFeatureContexts: Set, + callback: (datadogContext: DatadogContext, write: EventWriteScope) -> Unit + ): Boolean { + return false } } From b995509caede3911c341105089981d216ed7668b Mon Sep 17 00:00:00 2001 From: Marco Saia Date: Mon, 31 Aug 2026 13:12:08 +0200 Subject: [PATCH 4/4] fix: detekt DdFlagsImplementation issue --- .../com/datadog/reactnative/DdFlagsImplementation.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdFlagsImplementation.kt b/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdFlagsImplementation.kt index 3882d53d1..1920af4b8 100644 --- a/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdFlagsImplementation.kt +++ b/packages/core/android/src/main/kotlin/com/datadog/reactnative/DdFlagsImplementation.kt @@ -182,6 +182,8 @@ private fun buildEvaluationContext( return EvaluationContext(targetingKey, parsed) } +private const val SERIAL_ID_KEY = "serialId" + private fun convertUnparsedFlagToMap( flagKey: String, flag: UnparsedFlag, @@ -223,7 +225,7 @@ private fun convertUnparsedFlagToMap( "doLog" to flag.doLog, "extraLogging" to flag.extraLogging.toMap(), // Serialized as a String because the React Native bridge converts Long values to Double - "serialId" to flag.serialId?.toString() + SERIAL_ID_KEY to flag.serialId?.toString() ) } @@ -240,6 +242,6 @@ private fun convertMapToUnparsedFlag(map: Map): UnparsedFlag = ?: JSONObject() override val reason: String = map["reason"] as? String ?: "" override val serialId: Long? = - (map["serialId"] as? String)?.toLongOrNull() - ?: (map["serialId"] as? Number)?.toLong() + (map[SERIAL_ID_KEY] as? String)?.toLongOrNull() + ?: (map[SERIAL_ID_KEY] as? Number)?.toLong() }