Skip to content

Commit 4264654

Browse files
stepangoClaw
andauthored
F-019: Gradle 9.6.1 + Kotlin 2.3.21 + AGP 9.3.0 toolchain (#193)
Ship Phase 1 of the 9.x ladder after explicit OK: - All wrappers → Gradle 9.6.1 (embedded Kotlin 2.3.21) - AGP 9.3.0 lockstep, aapt2-proto 9.3.0-15703166, KSP 2.3.10, Compose compiler 2.3.21, Dagger 2.60.1 (metadata 2.3) - Gradle 9 / AGP 9 API fixes: ProjectDependency.path, compilerOptions, public LibraryExtension/CommonExtension, drop context-receivers - Sample keeps android.builtInKotlin=false + android.newDsl=false while kapt/Dagger remains (Phase 2: built-in Kotlin + KSP) - includer TestKit JVM 17 + foojay-resolver 1.0.0 Verified host builds: plugins, application, jvm-application, includer, depgen. Co-authored-by: Claw <claw@Claws-MacBook-Pro.local>
1 parent 85a74e6 commit 4264654

76 files changed

Lines changed: 269 additions & 149 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ buildscript {
8585
minSdk = 21,
8686
targetSdk = 33,
8787
compileSdk = 34,
88-
agpVersion = "8.13.2",
88+
agpVersion = "9.3.0",
8989
// extraPlugins = buildscript classpath only (jars for AGP, safe-args, etc.).
9090
// Actual plugin apply to targets is type-owned — see docs/TARGET-PLUGINS.md.
9191
extraPlugins = listOf(

TICKETS.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ Canonical write-up: `docs/VISION.md` § Root principles. Plugins design: `docs/T
2222
| F-002 | done | Audit build graph: plugins, sample app, CI workflows | Map modules → forma-core candidates; capture in `docs/ARCHITECTURE.md` |
2323
| F-003 | done | Get plugins + sample `application/` building on modern toolchain | Plugins compile AGP 8.1.2 matches sample; Gradle 8.3 (plugins) / 8.4 (app); host builds green |
2424
| F-004 | done | CI green on GitHub Actions for plugins + application | Temurin 17 all jobs + Android SDK 33 for app; PR #153 GHA green |
25-
| F-018 | done | JDK 21 + Gradle/AGP staged modernization | **Shipped on `v2`:** Gradle **8.14.5**, AGP **8.13.2**, Kotlin **2.0.21**, KSP **2.0.21-1.0.28**, Compose **1.9.4**/compiler **2.0.21**, JDK **21** host/CI, sample SDK min23/target35/compile35 + deps at AGP-8.13 ceiling. PRs **#179#182**. AGP 9 / absolute-latest AndroidX = **F-019** (explicit OK only). |
25+
| F-018 | done | JDK 21 + Gradle/AGP staged modernization | **Shipped on `v2`:** Gradle **8.14.5**, AGP **8.13.2**, Kotlin **2.0.21**, KSP **2.0.21-1.0.28**, Compose **1.9.4**/compiler **2.0.21**, JDK **21** host/CI, sample SDK min23/target35/compile35 + deps at AGP-8.13 ceiling. PRs **#179#182**. Superseded by **F-019** for 9.x. |
26+
| F-019 | done | Gradle 9 + Kotlin 2.3 + AGP 9 toolchain | **Shipped Phase 1:** Gradle **9.6.1** (embedded Kotlin **2.3.21**), AGP **9.3.0**, KSP **2.3.10**, Compose compiler **2.3.21**, aapt2-proto **9.3.0-15703166**, Dagger **2.60.1**. Sample uses `android.builtInKotlin=false` + `android.newDsl=false` (kapt/Dagger still). **Phase 2 backlog:** built-in Kotlin + kapt→KSP + AndroidX ceiling. |
2627

2728
## P1 — Android working product
2829

@@ -98,8 +99,8 @@ Close the biggest call-site / multi-way gap: chain `withPlugin`. Design:
9899
## P8 — Principle alignment (implementation matches goals)
99100

100101
Close remaining gaps where code/docs still allow **multiple ways**, **fat call
101-
sites**, or **missing fleet tooling**. P7 (F-070–F-073) and F-081–F-082 are **done**;
102-
next coding priority is **F-083**.
102+
sites**, or **missing fleet tooling**. P7 (F-070–F-073) and F-081–F-082 are **done**; **F-019 Phase 1 done**.
103+
**Next coding:** **F-083**.
103104

104105
| ID | Status | Title | Notes |
105106
|----|--------|-------|-------|
@@ -127,7 +128,7 @@ Keep for reference; do not start unless higher tickets done or user prioritizes:
127128
- GH #126 Target features configuration options → consider under **F-081**
128129
- GH #111 Gradle project as buildscript classpath
129130
- GH #103 Java 8+ API on Android API ≤26
130-
- **F-019** AGP 9 / absolute-latest AndroidX **explicit OK only** (not on board until requested)
131+
- F-019 Phase 2: AGP built-in Kotlin migration + absolute-latest AndroidX / compileSdk bump (after Phase 1 green)
131132

132133
## How workers update this file
133134

application/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ buildscript {
55
targetSdk = 35,
66
// compileSdk 35+ required by Compose 1.11 / modern AndroidX AAR metadata
77
compileSdk = 35,
8-
agpVersion = "8.13.2",
8+
agpVersion = "9.3.0",
99
extraPlugins =
1010
listOf(
1111
libs.plugins.toolsFormaDemoDependencies,

application/feature/characters/favorite/impl/src/main/java/tools/forma/sample/feature/characters/favorite/impl/ui/CharacterFavoriteFragment.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import tools.forma.sample.core.di.library.BaseComponentProvider
2727
import tools.forma.sample.core.mvvm.library.ui.BaseViewBindingFragment
2828
import tools.forma.sample.core.mvvm.library.viewModels
2929
import tools.forma.sample.feature.characters.core.api.domain.model.ICharacter
30+
import tools.forma.sample.feature.characters.favorite.impl.presentation.CharacterFavoriteViewModel
3031
import tools.forma.sample.feature.characters.favorite.viewbinding.presentation.ICharacterFavoriteViewModel
3132
import tools.forma.sample.feature.characters.favorite.viewbinding.presentation.ICharacterFavoriteViewState
3233
import tools.forma.sample.feature.characters.favorite.impl.R
@@ -39,7 +40,7 @@ class CharacterFavoriteFragment : BaseViewBindingFragment(
3940
layoutId = tools.forma.sample.feature.characters.favorite.viewbinding.R.layout.fragment_character_favorite_list
4041
) {
4142

42-
private val viewModel: ICharacterFavoriteViewModel by viewModels()
43+
private val viewModel: ICharacterFavoriteViewModel by viewModels<CharacterFavoriteViewModel>()
4344
private val viewBinding: FragmentCharacterFavoriteListBinding by viewBinding(FragmentCharacterFavoriteListBinding::bind)
4445

4546
private val viewAdapter = CharacterFavoriteAdapter()

application/gradle.properties

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,8 @@ org.gradle.unsafe.configuration-cache=true
2626
org.gradle.unsafe.configuration-cache-problems=warn
2727
org.gradle.unsafe.configuration-cache.max-problems=5
2828
# TODO apply via forma
29-
android.defaults.buildfeatures.buildconfig=false
3029
android.nonTransitiveRClass=true
30+
# F-019 Phase 1: AGP 9 + Gradle 9 while sample still uses kapt (Dagger).
31+
# Built-in Kotlin + new DSL require kapt→KSP migration (Phase 2).
32+
android.builtInKotlin=false
33+
android.newDsl=false

application/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

application/settings.gradle.kts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,36 @@ buildscript {
3838
"org.checkerframework:checker-qual:3.43.0",
3939
"com.google.errorprone:error_prone_annotations:2.28.0",
4040
"commons-codec:commons-codec:1.17.1",
41-
"com.android.tools.build:aapt2-proto:8.13.2-14304508",
42-
// Gradle 8.14.5 embeds Kotlin 2.0.21 — force stdlib family lockstep under failOnVersionConflict
41+
"com.android.tools.build:aapt2-proto:9.3.0-15703166",
42+
// Gradle 9.6.1 embeds Kotlin 2.3.21 — force stdlib + KGP family lockstep under failOnVersionConflict
43+
// (AGP 9.3 pulls kotlin-stdlib 2.2.10 transitively)
4344
"org.jetbrains.kotlin:kotlin-stdlib:$embeddedKotlinVersion",
4445
"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$embeddedKotlinVersion",
4546
"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$embeddedKotlinVersion",
4647
"org.jetbrains.kotlin:kotlin-stdlib-common:$embeddedKotlinVersion",
4748
"org.jetbrains.kotlin:kotlin-reflect:$embeddedKotlinVersion",
49+
"org.jetbrains.kotlin:kotlin-gradle-plugin:$embeddedKotlinVersion",
50+
"org.jetbrains.kotlin:kotlin-gradle-plugin-api:$embeddedKotlinVersion",
51+
"org.jetbrains.kotlin:kotlin-gradle-plugins-bom:$embeddedKotlinVersion",
52+
"org.jetbrains.kotlin:fus-statistics-gradle-plugin:$embeddedKotlinVersion",
53+
"org.jetbrains.kotlin:kotlin-compiler-embeddable:$embeddedKotlinVersion",
54+
"org.jetbrains.kotlin:kotlin-android-extensions-runtime:$embeddedKotlinVersion",
55+
"org.jetbrains.kotlin:kotlin-build-tools-api:$embeddedKotlinVersion",
56+
"org.jetbrains.kotlin:kotlin-build-tools-impl:$embeddedKotlinVersion",
57+
"org.jetbrains.kotlin:kotlin-build-tools-compat:$embeddedKotlinVersion",
58+
"org.jetbrains.kotlin:kotlin-native-utils:$embeddedKotlinVersion",
59+
"org.jetbrains.kotlin:kotlin-util-klib:$embeddedKotlinVersion",
60+
"org.jetbrains.kotlin:kotlin-util-io:$embeddedKotlinVersion",
61+
"org.jetbrains.kotlin:kotlin-daemon-embeddable:$embeddedKotlinVersion",
62+
"org.jetbrains.kotlin:kotlin-script-runtime:$embeddedKotlinVersion",
63+
"org.jetbrains.kotlin:kotlin-scripting-common:$embeddedKotlinVersion",
64+
"org.jetbrains.kotlin:kotlin-scripting-jvm:$embeddedKotlinVersion",
65+
"org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:$embeddedKotlinVersion",
66+
"org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:$embeddedKotlinVersion",
4867
"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2",
4968
"org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.10.2",
5069
"org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2",
51-
"com.android.tools.build:gradle:8.13.2",
52-
"org.jetbrains.kotlin:kotlin-gradle-plugin:$embeddedKotlinVersion",
70+
"com.android.tools.build:gradle:9.3.0",
5371
"com.squareup:javapoet:1.13.0"
5472
)
5573
failOnVersionConflict()
@@ -101,8 +119,8 @@ projectDependencies(
101119
plugin("com.google.firebase:firebase-crashlytics-gradle", "3.0.7"),
102120
plugin(
103121
id = "com.google.devtools.ksp:symbol-processing-gradle-plugin",
104-
// Gradle 8.14.5 embeds Kotlin 2.0.21; KSP must match
105-
version = "2.0.21-1.0.28",
122+
// Gradle 9.6.1 embeds Kotlin 2.3.21; KSP 2.3.x line (standalone numbering)
123+
version = "2.3.10",
106124
configuration = ksp,
107125
"androidx.room:room-compiler:$roomVersion"
108126
)

bazel-adapter/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

bazel-adapter/settings.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ pluginManagement {
88
gradlePluginPortal()
99
mavenCentral()
1010
}
11-
// Match Gradle 8.14.5 embedded Kotlin
11+
// Match Gradle 9.6.1 embedded Kotlin
1212
plugins {
13-
id("org.jetbrains.kotlin.jvm") version "2.0.21"
13+
id("org.jetbrains.kotlin.jvm") version "2.3.21"
1414
}
1515
}
1616

build-dependencies/dependencies/src/main/kotlin/Androidx.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ object androidx {
302302
/**
303303
* Jetpack Compose runtime + UI + foundation + material (pinned versions).
304304
* Pair with `compose = true` / `composeWidget` targets (F-013).
305-
* Versions match Compose Compiler **2.0.21** / Kotlin **2.0.21** (Gradle 8.14.5).
305+
* Versions match Compose Compiler **2.3.21** / Kotlin **2.3.21** (Gradle 9.6.1).
306306
* Uses [transitiveDeps] so Compose UI unit/graphics transitively resolve.
307307
* Does not include activity-compose (pulls emoji2 requiring compileSdk 34);
308308
* add that separately when hosting Compose in Activities on SDK 34+.

0 commit comments

Comments
 (0)