Skip to content

build: platform cluster bump - AGP 9.4, Kotlin 2.4.10, compileSdk 37, version catalog - #40

Merged
anasvhora284 merged 12 commits into
anasvhora284:masterfrom
guaje:maintenance/platform-deps
Sep 17, 2026
Merged

anasvhora284 merged 12 commits into
anasvhora284:masterfrom
guaje:maintenance/platform-deps

Conversation

@guaje

@guaje guaje commented Sep 4, 2026 •

Copy link
Copy Markdown
Collaborator

Platform dependency cluster: AGP 9.4, Kotlin 2.4.10, compileSdk 37, Gradle 9.6

Draft / maintenance PR — review whenever convenient; independent of #32 in content.

What this does

Bumps the platform cluster that can only move together, and centralizes all version declarations in a Gradle version catalog. Twelve commits, reviewable independently:

  1. build: centralize dependency declarations in a version catalog — pure migration, zero version changes. New gradle/libs.versions.toml becomes the single source of truth for plugin and library versions across the root, app, and uhid-server build files.
  2. build: platform cluster bump — the actual version/behavior changes.
  3. ci: android-36 — CI SDK/emulator images to match.
  4. fix: pin androidx generation that compiles against API 36 — first-round CheckAarMetadata fallout (see ceiling history below).
  5. build: compile against api 37 and restore the latest androidx generation — raises compileSdk to 37 (supported by AGP 9.4) and restores the true-latest androidx pins.
  6. fix: correct split-APK rename regex and wire dist staging to assemble — hyphenated ABIs now rename, and assemble<Variant> triggers the dist staging (verified by a new CI assertion step).
  7. docs: sync testing guide with platform 37 and api-36 emulator — docs/TESTING.md matches the build platform and the emulator.
  8. fix: install the android-37.0 platform package — API 37 ships only with minor-version package ids (see below).
  9. build: tie the built-in Kotlin version to the version catalog — the buildscript override reads its version from the catalog itself.
  10. build: pin the built-in Kotlin via the compose compiler plugin, drop the buildscript override — the buildscript block is gone entirely: the compose-compiler plugin's POM depends on the same-version KGP, so the catalog alone pins the built-in compiler.
  11. build: drop explanatory comments from build files — the migration rationale lives in this description instead of the build scripts.
  12. build: replace deprecated isTestCoverageEnabled with enableAndroidTestCoverage — AGP 9 splits the old unified coverage flag; the androidTest half's replacement is enableAndroidTestCoverage (flagged by @anasvhora284 in review).

Rebased onto master after #41–#43 landed; master's new JVM-test dependencies (org.json, Robolectric, androidx.test:core) were ported into the catalog during the rebase.

Version changes (all in gradle/libs.versions.toml)

Dependency Before After
Android Gradle Plugin 8.7.0 9.4.0
Gradle wrapper 8.13 9.6.0 (AGP 9.4 minimum)
Kotlin 2.0.0 2.4.10 (see built-in Kotlin below)
compileSdk 34 37
compose-bom 2024.09.00 2026.08.00 (latest; its artifacts require compileSdk 37 — see ceiling history below)
core-ktx 1.12.0 1.19.0
lifecycle 2.7.0 2.11.0
activity-compose 1.8.2 1.13.0
datastore-preferences 1.0.0 1.2.1
coroutines (android + test) 1.7.3 1.11.0
mockito-core – 5.23.0 (aligns with #32)
androidx.test core/rules 1.6.1 1.7.0
androidx.test ext:junit 1.2.1 1.3.0
androidx.test runner 1.6.2 1.7.0
Robolectric – 4.14.1 (from master's #43)
org.json (test) – 20240303 (from master's #43)
build-tools (CI + uhid d8) 34.0.0 36.0.0 (AGP 9 default)
CI SDK platform 34 37.0
Emulator api-level 34 36
targetSdk 34 34 — unchanged

targetSdk deliberately stays on 34. SDK 35+ enforces edge-to-edge, which is a product/design decision, not a dependency bump. It is set explicitly so AGP 9's new android.sdk.defaultTargetSdkToCompileSdkIfUnset default never silently moves it.

Coroutines 1.11.0 ships Kotlin 2.2 metadata, which is why #32 pins 1.10.2 (consumable by the 2.0 compiler); here the compiler is 2.4.10, so 1.11.0 is consumable again.

Ceiling history: the road to compileSdk 37 (CI rounds taught this)

Round 1 failed CheckAarMetadata: the then-latest androidx generation — compose 1.12.0 (compose-bom 2026.08.00), core-ktx 1.19.0, and lifecycle 2.11.0 — all require minCompileSdk 37. That round responded by pinning compileSdk 36 and dropping to the newest API-36-compatible generation instead (verified per artifact via each AAR's aar-metadata.properties: compose ui 1.11.4 / material3 1.4.0 → 35, core-ktx 1.18.0 → 36, lifecycle 2.10.0 → 34/35). That ceiling was self-imposed, not an AGP limit: AGP 9.4 supports API level 37 (its release notes' compatibility table; the CheckAarMetadata error itself recommended "compileSdk of at least 37, for example 37.2").

Later rounds restored the true-latest generation on compileSdk 37. Two findings worth recording for future bumps:

  • API 37 has no flat platform id. The SDK repository ships it only as platforms;android-37.0 / 37.1 / 37.2 — sdkmanager "platforms;android-37" fails with "Failed to find package". The correct install is platforms;android-37.0.
  • compileSdk = 37 (minor 0 default) maps to that android-37.0 package: the 37-generation AARs carry minCompileSdk=37, minCompileMinorSdk=0, and the green head run compiles against it.

The final pins, AAR-metadata-verified: compose ui 1.12.0 / material3 1.4.0 (BOM 2026.08.00) and core-ktx 1.19.0 and lifecycle 2.11.0 — all minCompileSdk 37, minCompileMinorSdk 0. activity-compose 1.13.0 and datastore 1.2.1 stay — neither appeared in the violations. Build-tools stay 36.0.0 (AGP 9.4 default) and the emulator stays on API 36.

The AGP 9 migration details

Built-in Kotlin. AGP 9 removes compatibility with the external org.jetbrains.kotlin.android plugin — it compiles Kotlin itself, running with whatever Kotlin Gradle plugin version wins on the plugin classpath. The catalog pins that to Kotlin 2.4.10 with no extra machinery: versions.kotlin versions the compose-compiler plugin, whose POM depends on the same-version KGP, so alias(libs.plugins.compose.compiler) transitively places KGP 2.4.10 above AGP's bundled version — the built-in compiler follows. (The Google-documented buildscript-classpath recipe remains the fallback if the compose plugin is ever removed.) Consequences in the build files:

  • kotlin-android plugin declarations are gone (root + app), and the root file has no buildscript block at all.
  • The kotlinOptions { jvmTarget = "17" } block is deleted; built-in Kotlin derives jvmTarget from compileOptions.targetCompatibility (17).
  • org.jetbrains.kotlin.plugin.compose stays: under AGP 9 the Compose compiler is supplied by AGP itself, and applying the JetBrains plugin simply overrides its coordinates with the Kotlin-matched 2.4.10 compiler (per the JetBrains compose-compiler migration guide).
  • Single source of truth for the Kotlin version: versions.kotlin is the only Kotlin declaration in the repository — it versions the compose-compiler plugin, which transitively pins the built-in compiler's KGP. No buildscript block, no duplicate literal, no regex parsing.

Legacy variant API removal. AGP 9 deletes applicationVariants/BaseVariantOutputImpl, which the app used to rename APKs in place. The public VariantOutput API does not expose outputFileName, so the historical input-leaf_<version>_<abi>.apk scheme is reproduced with the public variant API: a Copy task per variant that stages renamed APKs under build/dist/<variant>/ (copyDebugApksToDist / copyReleaseApksToDist), now wired into the matching assemble<Variant> task so every assemble run also produces the staged copies. The rename pattern covers hyphenated ABIs (armeabi-v7a, arm64-v8a), and the android-coverage job gained an Assert renamed APK staging step that fails if unrenamed APKs are staged or any of the five expected per-ABI files is missing. Default AGP output names in app/build/outputs/apk/… are unchanged.

Other AGP 9 adjustments.

  • The deprecated isTestCoverageEnabled (AGP 9 splits the old unified flag) is replaced by enableAndroidTestCoverage = true on the debug build type — same JaCoCo offline instrumentation of the androidTest APK feeding the android-coverage Codecov session. AGP's unit-test half (enableUnitTestCoverage) is deliberately not enabled: JVM unit-test coverage is owned by the Kover debugJvm pipeline below.
  • The generated uhid assets dir is now passed to sourceSets as a resolved File instead of a Provider (AGP 9 sets android.sourceset.disallowProvider=true).
  • testInstrumentationRunner was already explicit (AGP 9 changes the default); ABI splits are unaffected (only density splits were removed).

CI outcome (head 6a53e8739b1b2d6c19540e35108672dcda606238)

  • fast-jvm ✓ — catalog + built-in Kotlin 2.4.10 (catalog-tied, no buildscript block) + compose plugin + Kover on Gradle 9.6 all compile and run against compileSdk 37 / BOM 2026.08.00; Codecov jvm upload ✓; no coverage-flag deprecation warnings.
  • android-coverage ✓ — api-36 emulator, debug+test APKs assembled (including the new Assert renamed APK staging step ✓), connected suite green, JaCoCo report ✓.
  • codecov/patch ✓ — the PR touches build files only, so the patch gate reports no misses.
  • Run: https://github.com/anasvhora284/input-leaf/actions/runs/35236278448 (35236278448).
  • History: round 1 failed the API-37 CheckAarMetadata; the API-36 pin round went green; round 3 failed installing platforms;android-37 (no flat id); intermediate rounds validated compileSdk 37 against android-37.0, the restored latest androidx generation, and the catalog-tied compiler override; the head run adds the switch from the deprecated isTestCoverageEnabled to enableAndroidTestCoverage (caught by @anasvhora284 in review — the AGP 9.4 compiler itself deprecates the old unified flag in favor of the split pair) on top of the docs: optimize repository for search discovery #41–ci(codecov): fix master coverage report and UpdateService gaps #43 rebase.

Risks and fallbacks (CI is the validator)

  • android.enableAppCompileTimeRClass=true (new AGP 9 default): fails compilation if app code requires constant R fields (e.g. when on R.id). The app has no such usages. Fallback: set the flag to false in gradle.properties.
  • Built-in Kotlin ↔ compose plugin interplay: if the compose plugin rejects a project without kotlin-android, the fallback is to drop the plugin entirely (AGP then supplies its bundled Compose compiler); if the transitive KGP pin ever needs replacing, the Google-documented buildscript-classpath recipe is the fallback.
  • Kover 0.9.9 on Gradle 9.6: expected compatible; if not, Kover is the first suspect for fast-jvm failures.
  • compileSdk 37 / platform naming: API 37 platforms only exist as minor-suffixed packages (android-37.0+); future bumps must follow the same scheme (the CompileSdkReleaseSpec.minorApiLevel DSL exists if a minor > 0 is ever needed).
  • api-36 emulator image: google_apis/x86_64 images are published for API 36; if the emulator job gets flaky, pinning it back to api 34 is acceptable (instrumented tests only require ≥ minSdk 26).
  • Kotlin stdlib version skew (built-in Kotlin adds its bundled stdlib while the compiler is 2.4.10): watch for metadata/resolution errors; an explicit kotlin-stdlib:2.4.10 dependency would resolve it.

Summary by Sourcery

Modernize the Android build platform and centralize dependency management while preserving the existing target SDK and test coverage workflows.

Enhancements:

  • Centralize build, plugin, and library version declarations in a shared Gradle version catalog.
  • Upgrade the Android build platform and dependencies to AGP 9.4, Gradle 9.6, Kotlin 2.4.10, and compileSdk 37 while keeping targetSdk at 34.
  • Adapt Android build configuration and APK distribution handling for AGP 9 APIs and built-in Kotlin, including hyphenated-ABI rename support and assemble-wired dist staging with a CI assertion.
  • Remove JVM coverage exclusions so coverage reports include all classes.

Build:

  • Update the UHID DEX build to use Android platform 37.0 and build tools 36.0.0.

CI:

  • Run Android CI builds against SDK platform 37.0 with build-tools 36.0.0, run the emulator on API level 36, and assert renamed APK staging after the debug build.

Docs:

  • Sync the testing guide with build platform 37.0, build tools 36.0.0, and the API 36 emulator.

@sourcery-ai

sourcery-ai Bot commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Migrates the build to a catalog-driven AGP 9.4/Gradle 9.6 platform with Kotlin 2.4.10, compileSdk 37, and updated AndroidX dependencies, while adapting built-in Kotlin and variant APIs, preserving targetSdk 34, modernizing APK staging, and aligning CI and documentation.

Sequence diagram for AGP 9 APK staging

sequenceDiagram
    participant Gradle
    participant VariantAPI as AndroidComponents
    participant CopyTask as Copy task
    participant Dist as Dist staging

    Gradle->>VariantAPI: onVariants
    VariantAPI->>CopyTask: register copy<Variant>ApksToDist
    Gradle->>CopyTask: assemble<Variant>
    CopyTask->>Dist: Copy APK artifacts
    CopyTask->>Dist: rename APKs with ABI-aware pattern
Loading

Sequence diagram for the updated Android CI validation

sequenceDiagram
    participant CI
    participant SDK as Android SDK
    participant Gradle
    participant Staging as APK dist staging
    participant Emulator

    CI->>SDK: Install platforms&#59;android-37.0 and build-tools&#59;36.0.0
    CI->>Gradle: assembleDebug and assembleDebugAndroidTest
    Gradle->>Staging: Stage renamed ABI APKs
    CI->>Staging: Assert expected renamed APK files
    CI->>Emulator: Run connected smoke tests on API 36
Loading

File-Level Changes

Change Details Files
Centralize plugin and dependency coordinates in a shared Gradle version catalog.
  • Add aliases for AGP, Compose compiler, Kover, AndroidX, Compose, test, coroutine, and UHID dependencies.
  • Replace hard-coded declarations across the root, app, and UHID server build scripts.
  • Tie Kotlin 2.4.10 to the Compose compiler plugin and remove the external Kotlin Android plugin/buildscript override.
gradle/libs.versions.toml
build.gradle.kts
app/build.gradle.kts
uhid-server/build.gradle.kts
Upgrade the Android build platform and dependency generation for AGP 9 compatibility.
  • Upgrade AGP to 9.4.0, Gradle to 9.6.0, Kotlin to 2.4.10, compileSdk to 37, and the catalog-managed libraries.
  • Preserve targetSdk 34 and Java 17 compatibility while relying on built-in Kotlin JVM target derivation.
  • Update AGP 9 DSL usage for test coverage and resolve the UHID asset source directory as a File.
  • Update UHID DEX compilation to Android platform 37.0 and build-tools 36.0.0.
gradle/libs.versions.toml
gradle/wrapper/gradle-wrapper.properties
app/build.gradle.kts
uhid-server/build.gradle.kts
Replace removed AGP legacy APK output mutation with public variant APIs and staged distribution copies.
  • Register a Copy task per variant using SingleArtifact.APK and stage outputs under build/dist/.
  • Rename ABI outputs to the existing input-leaf__.apk convention, including hyphenated ABI names.
  • Wire staging tasks to matching assemble tasks without changing default AGP output names.
app/build.gradle.kts
Align CI and testing documentation with the new SDK platform and emulator matrix.
  • Install platforms;android-37.0 and build-tools 36.0.0 in both CI jobs.
  • Run connected tests on the API 36 Google APIs x86_64 emulator.
  • Assert that all five expected renamed APKs are staged and reject unrenamed APKs.
  • Document the updated SDK, build-tools, emulator, and coverage baseline requirements.
.github/workflows/ci.yml
docs/TESTING.md
Expand JVM coverage reporting to include previously excluded application classes and packages.
  • Remove the Kover package and class exclusion filters from the debugJvm report configuration.
build.gradle.kts

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@codecov

codecov Bot commented Sep 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@guaje guaje self-assigned this Sep 4, 2026
@guaje
guaje marked this pull request as ready for review September 4, 2026 17:17

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 4 issues

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="app/build.gradle.kts" line_range="109" />
<code_context>
+        ) {
+            from(variant.artifacts.get(SingleArtifact.APK))
+            into(layout.buildDirectory.dir("dist/${variant.name}"))
+            rename { fileName ->
+                Regex("app-([A-Za-z0-9_]+)-(debug|release)\\.apk").find(fileName)
+                    ?.let { "input-leaf_${versionName}_${it.groupValues[1]}.apk" }
+                    ?: fileName
+            }
         }
</code_context>
<issue_to_address>
**issue (bug_risk):** The APK rename pattern does not match ABI names containing hyphens, including `arm64-v8a` and `armeabi-v7a`, so those copied APKs retain AGP's `app-...apk` names instead of the historical `input-leaf_<version>_<abi>.apk` names.

**Triggers:** When the arm64-v8a or armeabi-v7a split APKs are staged.

**Suggested fix:** Allow hyphens in the ABI capture group, for example with `[A-Za-z0-9_-]+`.

```suggestion
                Regex("app-([A-Za-z0-9_-]+)-(debug|release)\\.apk").find(fileName)
```
</issue_to_address>

### Comment 2
<location path="app/build.gradle.kts" line_range="103-106" />
<code_context>
+    onVariants { variant ->
+        val versionName = android.defaultConfig.versionName
+            ?: error("versionName is required for the APK naming scheme")
+        tasks.register<Copy>(
+            "copy${variant.name.replaceFirstChar { it.uppercase() }}ApksToDist"
+        ) {
+            from(variant.artifacts.get(SingleArtifact.APK))
+            into(layout.buildDirectory.dir("dist/${variant.name}"))
+            rename { fileName ->
</code_context>
<issue_to_address>
**issue (bug_risk):** The new `Copy` tasks are registered but are not wired to any assemble or package task, so running the normal `assembleDebug` or `assembleRelease` commands does not create `build/dist/<variant>` or produce the replacement filenames.

**Triggers:** When callers expect the normal APK build to provide the staged, historically named APKs.

**Suggested fix:** Make each copy task a dependency of the corresponding assemble/package task, or explicitly invoke the copy task in every build workflow that requires the staged outputs.
</issue_to_address>

### Comment 3
<location path="uhid-server/build.gradle.kts" line_range="56-65" />
<code_context>
+    val d8Path = if (sdkRoot.isNotBlank()) "$sdkRoot/build-tools/36.0.0/d8" else ""
</code_context>
<issue_to_address>
**issue:** The UHID build now requires Android platform 36 and build-tools 36.0.0, while `docs/TESTING.md` still instructs developers that platform 34 and build-tools 34.0.0 are required; following the documented setup with only those packages causes `buildDex` to fail its existence checks.

**Triggers:** When a developer follows the generated-asset setup instructions on a machine that has only the documented API 34 SDK packages.

**Suggested fix:** Update `docs/TESTING.md` to require platform 36 and build-tools 36.0.0.
</issue_to_address>

### Comment 4
<location path="build.gradle.kts" line_range="13" />
<code_context>
+        mavenCentral()
+    }
+    dependencies {
+        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.10")
+    }
+}
</code_context>
<issue_to_address>
**nitpick:** The actual Kotlin Gradle plugin version is hardcoded as `2.4.10` outside the version catalog, so changing `versions.kotlin` does not update the compiler override and the catalog is not the single source of truth claimed by this migration.

**Triggers:** When the Kotlin version is changed through `gradle/libs.versions.toml` without also editing the root build script.

**Suggested fix:** Expose the Kotlin version to the buildscript through a shared property or otherwise keep the compiler classpath dependency mechanically tied to the catalog value.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Comment thread app/build.gradle.kts Outdated
Comment thread app/build.gradle.kts Outdated
Comment thread uhid-server/build.gradle.kts Outdated
Comment thread build.gradle.kts Outdated
@guaje guaje changed the title build: platform cluster bump - AGP 9.4, Kotlin 2.4.10, compileSdk 36, version catalog build: platform cluster bump - AGP 9.4, Kotlin 2.4.10, compileSdk 37, version catalog Sep 4, 2026
@guaje
guaje marked this pull request as draft September 4, 2026 20:57
Introduce gradle/libs.versions.toml as the single source of truth for
plugin and library versions across the root, app, and uhid-server build
files. Versions are carried over verbatim - this commit is a pure
migration with no behavior change, so version bumps can be reviewed on
their own.
… Gradle 9.6

- AGP 8.7.0 -> 9.4.0 (new DSL interfaces; legacy variant API removed):
  migrate to built-in Kotlin (kotlin-android plugin dropped) and override
  the built-in compiler to Kotlin 2.4.10 via the documented KGP classpath
  mechanism; compose-compiler plugin kept (it overrides AGP's supplied
  Compose compiler, per the JetBrains migration guide).
- compileSdk 34 -> 36; targetSdk deliberately stays 34 (SDK 35+ enforces
  edge-to-edge - a product decision, not a dependency bump).
- enableAndroidTestCoverage -> isTestCoverageEnabled (AGP 9 DSL).
- kotlinOptions deleted: built-in Kotlin derives jvmTarget from
  compileOptions.targetCompatibility (17).
- APK renaming: applicationVariants/BaseVariantOutputImpl is gone; the
  input-leaf_<version>_<abi>.apk scheme is reproduced with the public
  variant API via a Copy task staging APKs under build/dist/<variant>/
  (public VariantOutput has no outputFileName).
- Generated uhid assets: pass a resolved File to sourceSets (AGP 9
  disallows providers there via android.sourceset.disallowProvider).
- Version bumps carried by the catalog: compose-bom 2026.08.00,
  core-ktx 1.19.0, lifecycle 2.11.0, activity-compose 1.13.0,
  datastore 1.2.1, coroutines 1.11.0 (requires the Kotlin 2.4 compiler
  for its 2.2 metadata), mockito 5.23.0, androidx.test quartet 1.7.0.
- Gradle wrapper 8.13 -> 9.6.0 (AGP 9.4 minimum) and uhid-server d8
  switched to build-tools 36.0.0 / android-36.
CI failed CheckAarMetadata: compose 1.12.0 (compose-bom 2026.08.00),
core/core-ktx 1.19.0, and lifecycle 2.11.0 all require compileSdk 37,
which AGP 9.4 does not support yet. AAR metadata inspection pins the
newest API-36-compatible generation instead:

- compose-bom 2026.08.00 -> 2026.06.01 (ui 1.11.4: minCompileSdk 35,
  material3 1.4.0: minCompileSdk 35)
- core-ktx 1.19.0 -> 1.18.0 (minCompileSdk 36; also what
  activity-compose 1.13.0 itself targets)
- lifecycle 2.11.0 -> 2.10.0 (minCompileSdk 34/35)

activity-compose 1.13.0 and datastore 1.2.1 stay: neither appeared in
the CheckAarMetadata violations.
@guaje
guaje force-pushed the maintenance/platform-deps branch from ff5329c to 7a152e6 Compare September 16, 2026 13:01
@guaje
guaje marked this pull request as ready for review September 16, 2026 14:16

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 1 issue

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="app/build.gradle.kts" line_range="19" />
<code_context>
 android {
     namespace = "com.inputleaf.android"
-    compileSdk = 34
+    compileSdk = 37

     defaultConfig {
</code_context>
<issue_to_address>
**nitpick:** The Android SDK platform and build-tools versions remain duplicated as hardcoded literals across the app, CI, and `uhid-server`; changing the platform cluster in one place does not update the other declarations, so the UHID DEX build and app/CI can compile against different SDK installations or fail because the separately hardcoded package is absent.

**Triggers:** When a future platform bump updates `compileSdk` or the CI SDK packages without manually updating `uhid-server/build.gradle.kts`.

**Suggested fix:** Define the compile SDK, platform minor version, and build-tools version in shared Gradle properties or the version catalog, and have CI and `buildDex` consume those values.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Comment thread app/build.gradle.kts
@guaje

guaje commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator Author

Hi @anasvhora284!

This PR should be ready for review. PTAL.

@guaje
guaje requested a review from anasvhora284 September 16, 2026 17:32
Comment thread app/build.gradle.kts Outdated

@anasvhora284 anasvhora284 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@anasvhora284
anasvhora284 merged commit f18b7ea into anasvhora284:master Sep 17, 2026
5 checks passed
@anasvhora284

Copy link
Copy Markdown
Owner

Thanks for your efforts @guaje

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants