Step 1 of openspec/changes/upgrade-agp-9-1-1 calls for the first
staged AGP minor bump: 8.12.3 → 8.13.x. The latest 8.13 patch
published on dl.google.com/android/maven2/com/android/tools/build/gradle
is 8.13.2 (newer than the placeholder 8.13.0 referenced in the spec).
Goal of this PR: bump the version-catalog agp ref, run the
--warning-mode=all gate, fix any new AGP-attributed deprecations
introduced by 8.13.2 versus the Step 0 baseline, keep the test gate +
release build green.
The repo was running AGP 8.12.3 — three minor versions and a major
version behind the spec target of 9.1.1. The plan deliberately stages
the upgrade one minor at a time so any deprecation that 9.0 promotes to
a hard error is fixed at the minor that introduces the warning, not at
the major-version cliff. The 8.13 bump is the cheapest of the four
hops (no Variant API surface changes vs. 8.14, no plugin-removal cliff
vs. 9.0).
gradle/libs.versions.toml — single edit, agp = "8.12.3" →
agp = "8.13.2". No other bumps were required: Compose Multiplatform
plugin (1.10.3), Kotlin (2.3.21), Compose runtime/material3
versions, ProGuard Gradle (7.9.1), Roborazzi (1.48.0), and the
Google Services plugin (4.4.4) all keep working against AGP 8.13.2.
docs/lessons/2026-05-04-agp-baseline-step-0.md already documents the
two AGP-internal multi-string-notation warnings (lint-gradle,
aapt2:…:linux); on 8.13.2 they re-appear with bumped classifiers
(lint-gradle:31.13.2, aapt2:8.13.2-14304508:linux) but no new
AGP-attributed warning surfaced — i.e. the bump introduced zero new
deprecations in our build files.
Verification (all run with JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64,
per the per-user feedback that JDK 25 is the system default but the
project targets JDK 21):
./gradlew --warning-mode=all :androidApp:assembleDebug
:composeApp:tasks :composeApp:desktopJar — BUILD SUCCESSFUL. The
full deprecation diff against the Step 0 inventory is just the
classifier-version bumps inside the two AGP-internal warnings; no
new offenders attributed to our own code../gradlew :shared:jvmTest :server:jvmTest :composeApp:desktopTest
:androidApp:testDebugUnitTest — BUILD SUCCESSFUL (:composeApp:desktopTest
is SKIPPED by the existing screenshotMode != null gate, the
project-wide convention for Roborazzi). Note: tasks.md 2.7
references :shared:test, but :shared is a KMP module with no
aggregate test task — :shared:jvmTest is what Step 0’s task 1.3
used and what we use here. (Will fix the typo in tasks.md as part
of this PR so Step 2 doesn’t repeat the trip.)./gradlew :androidApp:assembleRelease — BUILD SUCCESSFUL. R8
minify, lint-vital, and the proguardGradle = "7.9.1" integration
all stay green; no proguardGradle bump needed at this hop.8.13.0 was the latest patch;
by the time this PR landed, 8.13.2 was the latest. Always re-check
dl.google.com/android/maven2/com/android/tools/build/gradle/maven-metadata.xml
immediately before editing the catalog — every step of tasks.md
that says “8.13.x” / “8.14.x” / “9.0.x” applies the same rule.--warning-mode=all log until AGP fixes
them upstream. Don’t waste a triage cycle treating them as new
regressions; their classifier values are the only thing that
changes (lint-gradle:31.<minor>.<patch>,
aapt2:<agp-version>-<build>:linux). The
“AGP-attributed-but-fixable-in-our-tree” set stays empty across
8.12.3 → 8.13.2; if the 8.14 or 9.0 step ever surfaces a new
warning whose source path is our build.gradle.kts or
libs.versions.toml, that’s the signal to fix it at that step’s
PR before merging — exactly the pattern the staging plan is built
around.:shared:jvmTest, not :shared:test. The KMP convention
propagates to every step that reuses task 2.7’s command — the
typo in tasks.md is corrected in this PR so Step 2/3/4 don’t
re-bump into it.