Files
mantra-kmp/gradle/libs.versions.toml
Kgothatso Ngako 546095b026 build: unify the composite on AGP 9.4.0 so Android Studio can sync
Android Studio refused to sync the project after the lightning-kmp-app bump in 4e939c4:

    Using multiple versions of the Android Gradle Plugin [9.1.1, 9.4.0] across Gradle builds is
    not allowed.
    Affected builds: [:, :lightning-kmp-app:lightning-kmp:bitcoin-kmp:secp256k1-kmp]

A composite build has to settle on a single AGP version across every build that applies the
plugin. Four builds in this tree do:

    :                                                        9.1.1  version catalog
    :lightning-kmp-app                                       9.1.1  version catalog
    :secp256k1-frost-kmp                                     9.1.1  version catalog
    :lightning-kmp-app:lightning-kmp:bitcoin-kmp:secp256k1-kmp  9.4.0  hardcoded

lightning-kmp and bitcoin-kmp apply no android plugin at all, which is why the message names
only the two ends of the chain rather than everything between them.

secp256k1-kmp pins 9.4.0 twice -- a buildscript classpath entry, and a pluginManagement
resolutionStrategy that rewrites every requested com.android plugin to that version -- so it
cannot be talked out of it from here. The three catalogs move up to meet it. Pinning it down to
9.1.1 instead would mean editing a build four submodules deep and then committing in bitcoin-kmp
and lightning-kmp purely to carry the pointer, for no gain. Moving up is also the direction the
chain already set: bbba08b's f22c30a moved every build in it onto Gradle 9.7.1 for the same
reason, and 4e939c4 followed.

Submodule commits carried here:

  lightning-kmp-app  bbba08b -> ce1ed01  build: move to AGP 9.4.0, matching the version the
                                         submodule chain pins
  secp256k1-frost-kmp  d3b294d -> 80a55b7  build: move to AGP 9.4.0 to match the rest of
                                           mantra-kmp's composite

Both sit on branches (build/agp-9.4.0 and build/gate-ios-targets-on-macos) rather than their
masters, and neither is pushed yet, so a fresh clone cannot resolve these two pointers until
they are.

9.4.0 is a minor bump inside the AGP 9.x line, so the DSL is unchanged and every android.* flag
in gradle.properties -- newDsl, builtInKotlin, the r8 settings -- keeps its meaning.
`:composeApp:compileDebugKotlinAndroid` passes clean.

Note that this is only what the IDE needs to sync, not everything worth knowing about the
chain. bitcoin-kmp's settings.gradle.kts substitutes secp256k1-kmp, -jni-jvm and the three
-jni-jvm-{linux,darwin,mingw} coordinates, but not -jni-android. So the android app still
resolves secp256k1-kmp-jni-android from maven central at stock 0.24.0, without the
FROST/prefractal native modules the threshold branch exists to provide, and a call into those
from android would fail with UnsatisfiedLinkError. Fixing that needs a substitution rule in
bitcoin-kmp. Untouched here because it is a runtime concern, not a sync one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 22:58:32 +02:00

6.7 KiB