From 16a22316b2d94dee5f9a3bca41f31d40ca80a1fa Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Tue, 11 Aug 2026 20:42:26 +0200 Subject: [PATCH] Disable nondeterministic Compose group mapping --- app/build.gradle.kts | 7 +++++++ docs/reproducible-builds.md | 11 +++++++---- wear/build.gradle.kts | 7 +++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e1fa4131..26042d6e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -111,6 +111,13 @@ android { } } +composeCompiler { + // Kotlin 2.4.10's optional Compose group-key mapping depends on unspecified + // class-file iteration order. Keep the normal R8 mapping, but omit that + // augmentation until its producer is deterministic across clean builds. + includeComposeMappingFile.set(false) +} + kotlin { jvmToolchain(21) compilerOptions { diff --git a/docs/reproducible-builds.md b/docs/reproducible-builds.md index f536df0b..348b201f 100644 --- a/docs/reproducible-builds.md +++ b/docs/reproducible-builds.md @@ -33,10 +33,13 @@ The build uses a clean source tree, an isolated Gradle user home, UTC, a stable locale, `SOURCE_DATE_EPOCH` from the Git commit, no Gradle build or configuration cache, fresh tasks, a non-incremental in-process Kotlin compiler, and R8's deterministic-debugging mode. The R8 mode uses one compiler thread and disables -randomized input shuffling so the ProGuard map embedded in each AAB is stable. -Native builds remap source paths and release validation rejects host paths in -packaged libraries. The container overlays a canonical `local.properties`, so -an ignored Android Studio file cannot redirect Gradle to a host-specific SDK. +randomized input shuffling. The regular R8 ProGuard map remains embedded in each +AAB. Kotlin 2.4.10's optional Compose group-key mapping augmentation is disabled +because its duplicate-key selection depends on unspecified class-file iteration +order across clean builds. Native builds remap source paths and release +validation rejects host paths in packaged libraries. The container overlays a +canonical `local.properties`, so an ignored Android Studio file cannot redirect +Gradle to a host-specific SDK. AGP's embedded VCS record is disabled because its Git discovery depends on the host checkout layout. The canonical `BUILDINFO.json` and GitHub provenance diff --git a/wear/build.gradle.kts b/wear/build.gradle.kts index 62f61845..e177c3e2 100644 --- a/wear/build.gradle.kts +++ b/wear/build.gradle.kts @@ -65,6 +65,13 @@ android { } } +composeCompiler { + // Kotlin 2.4.10's optional Compose group-key mapping depends on unspecified + // class-file iteration order. Keep the normal R8 mapping, but omit that + // augmentation until its producer is deterministic across clean builds. + includeComposeMappingFile.set(false) +} + // Shared bitchat protocol stack: compiled from :app sources in place (never moved/copied by hand). // AGP's source directory sets no longer support include/exclude filters, so a Sync task // materializes a filtered mirror into build/sharedSrc and that directory is added as a source