RUM-16470: Support Android API 37 - #3550
Draft
kikoveiga wants to merge 1 commit into
Draft
Conversation
🎉 All green!🧪 All tests passed 🔄 Datadog retried 4 tests - 4 passed on retry 🎯 Code Coverage (details) 🔗 Commit SHA: cb9b8f9 | Docs | Datadog PR Page | Give us feedback! |
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
14 times, most recently
from
June 19, 2026 10:38
52436b6 to
77a48f1
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
4 times, most recently
from
June 19, 2026 13:45
657b11e to
2325560
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
from
June 19, 2026 13:46
2325560 to
d4b6be3
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
4 times, most recently
from
June 19, 2026 18:18
2b83c9b to
ddf8ae2
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
2 times, most recently
from
June 19, 2026 19:31
84e7652 to
2db1d19
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
5 times, most recently
from
June 28, 2026 18:50
c9b8b17 to
52d8bd8
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
from
June 29, 2026 13:31
52d8bd8 to
b47d85e
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
2 times, most recently
from
July 9, 2026 09:19
14b252e to
dc2f4d1
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
4 times, most recently
from
July 20, 2026 14:09
0e5e076 to
bc19009
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
2 times, most recently
from
July 26, 2026 17:18
b8dee64 to
3d227c4
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
2 times, most recently
from
July 29, 2026 10:23
01a7ce9 to
84d8e17
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
10 times, most recently
from
August 10, 2026 15:06
670bf2d to
5543e9c
Compare
kikoveiga
force-pushed
the
kikoveiga/rum-16470/target-api-37
branch
from
August 13, 2026 13:08
5543e9c to
cb9b8f9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Targets Android API 37 and pulls the whole toolchain forward to match: AGP
8.13.2→9.2.1, Kotlin2.0.21→2.3.20(language/API level pinned to2.1for now), detekt1.23.8→2.0.0-alpha.6(newdev.detektcoordinates), Gradle9.4.0→9.5.1, and Android Build Tools/Lint/compileSdk/targetSdk36→37.Key changes:
sourceCompatibility/targetCompatibility17(previously11); dropped the now-unusedjava11()helper.sourceSets.srcDir/androidLintconfig with the newLibraryAndroidComponentsExtension/HostTestBuildervariant APIs; unit tests are now explicitly enabled per-variant since AGP 9 no longer enables them by default.dev.detekt:*artifacts,detekt.ymlschema changes (threshold→allowed*, with a value-shift), and a full rewrite of our custom rules from the old K1BindingContextAPI to the Kotlin Analysis API (KaType-based instead ofKotlinType-based).0.9.0→0.11.0(required for detekt 2.x task classpath compatibility).1.5.5(com.squareup.sqldelight) →2.3.2(app.cash.sqldelight), including the new SQLite 3.24 dialect dependency; updated all generated extension/transaction call sites.141.7340.3→143.7445.0, which givescronet-apiandcronet-shareddistinct manifest packages — this removes the R8-dontwarn/detached-configuration workarounds that were previously needed to avoid duplicate-class conflicts between the two AARs.kotlin-compile-testing-ksptodev.zacsweers.kctfork:ksp(0.12.1), needed for Kotlin 2.3 support.spektest engine (long unused) from the JUnit Platform config.4.3.3→4.4.3, coroutines1.4.2→1.10.2,jUnitMockitoExt5.4.0→5.12.0(now pinned in lockstep withmockitoAndroid, see note below), androidLint31.0.2→32.2.1.GRADLE_USER_HOMEacross all GitLab jobs to$CI_PROJECT_DIR/cacheso every Gradle invocation shares one cacheable location.Motivation
Google requires new Play Store submissions/updates to target a recent API level; API 37 support needs to land before that deadline. Since AGP 9 is a prerequisite for API 37 support, and AGP 9 drops several deprecated APIs we relied on, this became a combined toolchain upgrade (AGP, Kotlin, detekt, Gradle, and the libraries whose old versions were incompatible with the new stack).
Additional Notes
jUnitMockitoExtandmockitoAndroidmust be kept in the same version: both pull inmockito-core, Gradle resolves to the higher of the two, andmockito-androidships the on-deviceMockMakermatched to that exactmockito-coreversion. A drift here doesn't fail the build — it silently breaks mocking at runtime on-device, which manifests as every batch upload getting dropped inreliability:core-ituntil tests time out. This was root-caused during this migration and is now called out inline inlibs.versions.toml.languageVersion/apiVersionare pinned at2.1rather than jumping straight to2.3— this cushions the migration and is a safe intermediate step.kotlinAndroidPluginclasspath alias was removed from the rootbuild.gradle.kts(dead code, AGP already brings it in viabuildSrc).ThreadSafety,UnsafeThirdPartyFunctionCall,InvalidStringFormat, etc.) were rewritten against the Kotlin Analysis API — behavior should be equivalent, but the underlying type-resolution mechanism changed, so these are worth a closer look in review.