From 657e71df08b7692630bf8e53f4c5561929591f45 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 1 Jun 2026 18:54:58 +0000 Subject: [PATCH 1/3] Lower JVM target from 21 to 17 across all modules Drops jvmToolchain, jvmTarget, source/targetCompatibility, and java-version in CI from 21 to 17 so the compiled bytecode is compatible with JDK 17 runtimes. Gradle 9.4.1 and AGP 9.x both require Java 17 minimum, so no tooling compatibility is lost. gradle-daemon-jvm.properties is reset to toolchainVersion=17 without hard-coded foojay URLs so the resolver picks the right distribution automatically. https://claude.ai/code/session_01P1LST5JR1hpYGdtGxZ5X23 --- .github/actions/setup-build-env/action.yml | 2 +- .github/workflows/ci.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/publish.yml | 2 +- core/build.gradle.kts | 2 +- featured-compose/build.gradle.kts | 4 ++-- featured-debug-ui/build.gradle.kts | 4 ++-- featured-detekt-rules/build.gradle.kts | 2 +- featured-gradle-plugin/build.gradle.kts | 2 +- featured-lint-rules/build.gradle.kts | 2 +- featured-platform/build.gradle.kts | 4 ++-- featured-shrinker-tests/build.gradle.kts | 2 +- featured-testing/build.gradle.kts | 4 ++-- gradle/gradle-daemon-jvm.properties | 12 +----------- providers/configcat/build.gradle.kts | 4 ++-- providers/datastore/build.gradle.kts | 4 ++-- providers/firebase/build.gradle.kts | 4 ++-- providers/javaprefs/build.gradle.kts | 4 ++-- providers/nsuserdefaults/build.gradle.kts | 2 +- providers/sharedpreferences/build.gradle.kts | 6 +++--- sample/android-app/build.gradle.kts | 4 ++-- sample/desktop/build.gradle.kts | 2 +- sample/feature-checkout/build.gradle.kts | 4 ++-- sample/feature-promotions/build.gradle.kts | 4 ++-- sample/feature-ui/build.gradle.kts | 4 ++-- sample/shared/build.gradle.kts | 4 ++-- 26 files changed, 41 insertions(+), 51 deletions(-) diff --git a/.github/actions/setup-build-env/action.yml b/.github/actions/setup-build-env/action.yml index 5b3f947..2e0c4d3 100644 --- a/.github/actions/setup-build-env/action.yml +++ b/.github/actions/setup-build-env/action.yml @@ -7,6 +7,6 @@ runs: - uses: actions/setup-java@v4 with: distribution: temurin - java-version: 21 + java-version: 17 - uses: gradle/actions/setup-gradle@v3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97d2b8b..e691028 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,7 +71,7 @@ jobs: - uses: actions/setup-java@v5 with: distribution: temurin - java-version: 21 + java-version: 17 - uses: gradle/actions/setup-gradle@v6 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 2f0b7ee..39c9d17 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-java@v5 with: distribution: temurin - java-version: 21 + java-version: 17 - uses: gradle/actions/setup-gradle@v6 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ee87f8f..a2d4cf7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -68,7 +68,7 @@ jobs: - uses: actions/setup-java@v5 with: distribution: temurin - java-version: 21 + java-version: 17 - uses: gradle/actions/setup-gradle@v6 diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 8e79fcf..41aaa89 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -29,7 +29,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/featured-compose/build.gradle.kts b/featured-compose/build.gradle.kts index aeedff4..aa0eaa8 100644 --- a/featured-compose/build.gradle.kts +++ b/featured-compose/build.gradle.kts @@ -12,7 +12,7 @@ plugins { kotlin { explicitApi() - jvmToolchain(21) + jvmToolchain(17) android { namespace = "dev.androidbroadcast.featured.compose" @@ -25,7 +25,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/featured-debug-ui/build.gradle.kts b/featured-debug-ui/build.gradle.kts index 7b2883f..641df95 100644 --- a/featured-debug-ui/build.gradle.kts +++ b/featured-debug-ui/build.gradle.kts @@ -11,7 +11,7 @@ plugins { kotlin { explicitApi() - jvmToolchain(21) + jvmToolchain(17) android { namespace = "dev.androidbroadcast.featured.debugui" @@ -24,7 +24,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/featured-detekt-rules/build.gradle.kts b/featured-detekt-rules/build.gradle.kts index 08c2e7f..1449f01 100644 --- a/featured-detekt-rules/build.gradle.kts +++ b/featured-detekt-rules/build.gradle.kts @@ -5,7 +5,7 @@ plugins { kotlin { explicitApi() - jvmToolchain(21) + jvmToolchain(17) } dependencies { diff --git a/featured-gradle-plugin/build.gradle.kts b/featured-gradle-plugin/build.gradle.kts index 83e60de..d8230ee 100644 --- a/featured-gradle-plugin/build.gradle.kts +++ b/featured-gradle-plugin/build.gradle.kts @@ -12,7 +12,7 @@ group = "dev.androidbroadcast.featured" kotlin { explicitApi() - jvmToolchain(21) + jvmToolchain(17) } gradlePlugin { diff --git a/featured-lint-rules/build.gradle.kts b/featured-lint-rules/build.gradle.kts index 168885c..525e262 100644 --- a/featured-lint-rules/build.gradle.kts +++ b/featured-lint-rules/build.gradle.kts @@ -5,7 +5,7 @@ plugins { kotlin { explicitApi() - jvmToolchain(21) + jvmToolchain(17) } dependencies { diff --git a/featured-platform/build.gradle.kts b/featured-platform/build.gradle.kts index 307f302..c4e25ed 100644 --- a/featured-platform/build.gradle.kts +++ b/featured-platform/build.gradle.kts @@ -9,7 +9,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) explicitApi() android { @@ -23,7 +23,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/featured-shrinker-tests/build.gradle.kts b/featured-shrinker-tests/build.gradle.kts index 2062b24..cb04ff7 100644 --- a/featured-shrinker-tests/build.gradle.kts +++ b/featured-shrinker-tests/build.gradle.kts @@ -3,7 +3,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) } dependencies { diff --git a/featured-testing/build.gradle.kts b/featured-testing/build.gradle.kts index c64eb15..28b8ae4 100644 --- a/featured-testing/build.gradle.kts +++ b/featured-testing/build.gradle.kts @@ -9,7 +9,7 @@ plugins { kotlin { explicitApi() - jvmToolchain(21) + jvmToolchain(17) android { namespace = "dev.androidbroadcast.featured.testing" @@ -22,7 +22,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties index 6c1139e..858feb7 100644 --- a/gradle/gradle-daemon-jvm.properties +++ b/gradle/gradle-daemon-jvm.properties @@ -1,12 +1,2 @@ #This file is generated by updateDaemonJvm -toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect -toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect -toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect -toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect -toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73bcfb608d1fde9fb62e462f834a3299/redirect -toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/846ee0d876d26a26f37aa1ce8de73224/redirect -toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect -toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect -toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/9482ddec596298c84656d31d16652665/redirect -toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/39701d92e1756bb2f141eb67cd4c660e/redirect -toolchainVersion=21 +toolchainVersion=17 diff --git a/providers/configcat/build.gradle.kts b/providers/configcat/build.gradle.kts index 47195bd..2d58083 100644 --- a/providers/configcat/build.gradle.kts +++ b/providers/configcat/build.gradle.kts @@ -9,7 +9,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) explicitApi() android { @@ -23,7 +23,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/providers/datastore/build.gradle.kts b/providers/datastore/build.gradle.kts index 2bb9d8c..612b4d1 100644 --- a/providers/datastore/build.gradle.kts +++ b/providers/datastore/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) explicitApi() android { @@ -24,7 +24,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/providers/firebase/build.gradle.kts b/providers/firebase/build.gradle.kts index 8fb611c..0f1dd74 100644 --- a/providers/firebase/build.gradle.kts +++ b/providers/firebase/build.gradle.kts @@ -26,8 +26,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } testOptions { diff --git a/providers/javaprefs/build.gradle.kts b/providers/javaprefs/build.gradle.kts index c35f54b..de75d17 100644 --- a/providers/javaprefs/build.gradle.kts +++ b/providers/javaprefs/build.gradle.kts @@ -8,9 +8,9 @@ plugins { kotlin { explicitApi() - jvmToolchain(21) + jvmToolchain(17) compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/providers/nsuserdefaults/build.gradle.kts b/providers/nsuserdefaults/build.gradle.kts index 47e714b..323bb32 100644 --- a/providers/nsuserdefaults/build.gradle.kts +++ b/providers/nsuserdefaults/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) explicitApi() listOf( diff --git a/providers/sharedpreferences/build.gradle.kts b/providers/sharedpreferences/build.gradle.kts index 5581f3b..66e0b19 100644 --- a/providers/sharedpreferences/build.gradle.kts +++ b/providers/sharedpreferences/build.gradle.kts @@ -33,8 +33,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } testOptions { @@ -46,7 +46,7 @@ android { java { toolchain { - languageVersion.set(JavaLanguageVersion.of(21)) + languageVersion.set(JavaLanguageVersion.of(17)) } } diff --git a/sample/android-app/build.gradle.kts b/sample/android-app/build.gradle.kts index d005a0a..faa9ba1 100644 --- a/sample/android-app/build.gradle.kts +++ b/sample/android-app/build.gradle.kts @@ -25,8 +25,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } buildFeatures { diff --git a/sample/desktop/build.gradle.kts b/sample/desktop/build.gradle.kts index f512a75..094eab8 100644 --- a/sample/desktop/build.gradle.kts +++ b/sample/desktop/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) jvm() sourceSets { diff --git a/sample/feature-checkout/build.gradle.kts b/sample/feature-checkout/build.gradle.kts index 4d4373b..7e479ef 100644 --- a/sample/feature-checkout/build.gradle.kts +++ b/sample/feature-checkout/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) android { namespace = "dev.androidbroadcast.featured.sample.checkout" @@ -20,7 +20,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/sample/feature-promotions/build.gradle.kts b/sample/feature-promotions/build.gradle.kts index 79824bd..e35f1b1 100644 --- a/sample/feature-promotions/build.gradle.kts +++ b/sample/feature-promotions/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) android { namespace = "dev.androidbroadcast.featured.sample.promotions" @@ -20,7 +20,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/sample/feature-ui/build.gradle.kts b/sample/feature-ui/build.gradle.kts index 5cb0be5..b0e7a59 100644 --- a/sample/feature-ui/build.gradle.kts +++ b/sample/feature-ui/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) android { namespace = "dev.androidbroadcast.featured.sample.ui" @@ -20,7 +20,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } diff --git a/sample/shared/build.gradle.kts b/sample/shared/build.gradle.kts index a6f4dcd..e9c00a9 100644 --- a/sample/shared/build.gradle.kts +++ b/sample/shared/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } kotlin { - jvmToolchain(21) + jvmToolchain(17) android { namespace = "dev.androidbroadcast.featured.sample" @@ -23,7 +23,7 @@ kotlin { .get() .toInt() compilerOptions { - jvmTarget.set(JvmTarget.JVM_21) + jvmTarget.set(JvmTarget.JVM_17) } } From 6e03094e688b92818bc29798e43868250ffc2eb1 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 1 Jun 2026 19:42:17 +0000 Subject: [PATCH 2/3] Pin Robolectric test to SDK 34 for JDK 17 compatibility Robolectric 4.16.1 requires JDK 21 to run tests against SDK 36. Without an explicit sdk in @Config, Robolectric picks compileSdk (36), which fails when the test JVM is JDK 17. Pinning to SDK 34 fixes the UnsupportedOperationException from DefaultSdkProvider and keeps tests consistent with JDK 17+. https://claude.ai/code/session_01P1LST5JR1hpYGdtGxZ5X23 --- .../sharedpreferences/SharedPreferencesProviderConfigTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/providers/sharedpreferences/src/test/kotlin/dev/androidbroadcast/featured/sharedpreferences/SharedPreferencesProviderConfigTest.kt b/providers/sharedpreferences/src/test/kotlin/dev/androidbroadcast/featured/sharedpreferences/SharedPreferencesProviderConfigTest.kt index 2e1f70a..374c426 100644 --- a/providers/sharedpreferences/src/test/kotlin/dev/androidbroadcast/featured/sharedpreferences/SharedPreferencesProviderConfigTest.kt +++ b/providers/sharedpreferences/src/test/kotlin/dev/androidbroadcast/featured/sharedpreferences/SharedPreferencesProviderConfigTest.kt @@ -27,7 +27,7 @@ import org.robolectric.annotation.Config enum class CheckoutVariant { LEGACY, NEW_SINGLE_PAGE, NEW_MULTI_STEP } @RunWith(AndroidJUnit4::class) -@Config(manifest = Config.NONE) +@Config(manifest = Config.NONE, sdk = [34]) class SharedPreferencesProviderConfigTest { private lateinit var provider: SharedPreferencesProviderConfig From 191032cd445ac365be4f8dc8f177587d7f475f32 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 1 Jun 2026 19:46:18 +0000 Subject: [PATCH 3/3] Update setup-build-env description to Java 17 The action description still advertised Java 21 after the JDK version was lowered to 17. https://claude.ai/code/session_01P1LST5JR1hpYGdtGxZ5X23 --- .github/actions/setup-build-env/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/setup-build-env/action.yml b/.github/actions/setup-build-env/action.yml index 2e0c4d3..16cba28 100644 --- a/.github/actions/setup-build-env/action.yml +++ b/.github/actions/setup-build-env/action.yml @@ -1,5 +1,5 @@ name: Setup Build Environment -description: Checkout code, configure Java 21 (Temurin), and set up Gradle with caching +description: Checkout code, configure Java 17 (Temurin), and set up Gradle with caching runs: using: composite