Skip to content

chore(deps): Gradle 9.9.1, AGP 9.5.1, plugins; fix two 2.7.56 crashes - #182

Merged
pasichDev merged 4 commits into
masterfrom
chore/upgrade-gradle-agp-plugins
Nov 13, 2026
Merged

pasichDev merged 4 commits into
masterfrom
chore/upgrade-gradle-agp-plugins

Conversation

@pasichDev

@pasichDev pasichDev commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner

What

Build tooling upgrade plus minor/patch library bumps, and fixes for two Play Console crashes in 2.7.56.

Component From To
Gradle wrapper 9.2.1 9.9.1
Android Gradle Plugin 9.0.1 9.5.1
Hilt (plugin + library) 2.57.2 2.60.1
Spotless 8.10.1 8.11.0
google-services 4.4.4 4.6.0
Room 2.8.4 2.8.5
appcompat 1.7.1 1.8.0
work-runtime 2.10.1 2.12.0
credentials / credentials-play-services-auth 1.5.0 1.6.0
googleid 1.2.0 1.2.1
gson 2.14.0 2.15.0
mockito-core / mockito-android 5.23.0 5.24.0
truth (unit tests) 1.4.2 1.4.5
robolectric 4.16.1 4.17

The wrapper scripts and jar were regenerated with ./gradlew wrapper --gradle-version 9.9.1.

Crash fixes (Play Console, 2.7.56)

  • IndexOutOfBoundsException: setSpan (-1 ... -1) starts before 0 in EditableLinkMovementMethod.onTouchEvent (note editor). In selecting mode (Shift on a hardware keyboard) ArrowKeyMovementMethod extends the selection from the offset it recorded on the down; when the down came before selecting started, it selects from -1. Reproduced in a Robolectric test (EditableLinkMovementMethodTest, SDK 28 and 35), which fails without the fix.
  • SecurityException: Not allowed to change Do Not Disturb state in MediaSettingsFragment (volume slider, Android 10 with DND on). The refusal is caught and the slider snaps back to the real volume.

Not fixable from the app (no app frames in the trace):

  • ArrayIndexOutOfBoundsException in DynamicLayout.getBlockIndex during Editor.onDraw: a known Android 8.x platform bug.
  • SIGSEGV in libart.so ThreadList::RunEmptyCheckpoint during GC: an ART runtime crash on one Android 9 device.

Not included (separate PR)

Major bumps that need code changes or a reformat:

  • Play Billing 8.3.0 -> 9.1.0 (BillingManager, SupportActivity)
  • play-services-auth 21.4.0 -> 22.0.0
  • Firebase BoM 34.18.0 -> 35.2.0
  • google-java-format 1.22.0 -> 2.0.0 (reformats the whole codebase)

Verification

./gradlew spotlessCheck test lint assembleRelease passes locally (JDK 17), including the new test.

- Gradle wrapper 9.2.1 -> 9.9.1
- AGP 9.0.1 -> 9.5.1
- Hilt 2.57.2 -> 2.60.1
- Spotless 8.10.1 -> 8.11.0
- google-services 4.4.4 -> 4.6.0
- Minor library bumps: Room 2.8.5, appcompat 1.8.0, work-runtime 2.12.0,
  credentials 1.6.0, googleid 1.2.1, gson 2.15.0, mockito 5.24.0,
  truth 1.4.5, robolectric 4.17
@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

Test coverage (unit + instrumentation)

Overall Project 18.01% -0.03% 🍏
Files changed 0% 🍏

Module Coverage
debug 19.65% -0.03% 🍏
debug 16.36% -0.03% 🍏
Files
Module File Coverage
debug MediaSettingsFragment.java 0% -6.03% 🍏
EditableLinkMovementMethod.java 0% -8.14% 🍏
debug MediaSettingsFragment.java 0% -6.03% 🍏
EditableLinkMovementMethod.java 0% -8.14% 🍏

In selecting mode (Shift held on a hardware keyboard) ArrowKeyMovementMethod
extends the selection from the offset it recorded on the down. When the down
came before selecting started nothing was recorded, it selected from -1 and
crashed with "setSpan (-1 ... -1) starts before 0" (Play Console, 2.7.56).
The selection now stays as it was.
On Android 10 with Do Not Disturb on, AudioManager.setStreamVolume throws
"Not allowed to change Do Not Disturb state" without notification policy
access (Play Console, 2.7.56). The refusal is caught and the slider goes back
to the volume actually in effect.
@pasichDev pasichDev changed the title chore(deps): upgrade Gradle 9.9.1, AGP 9.5.1 and build plugins chore(deps): Gradle 9.9.1, AGP 9.5.1, plugins; fix two 2.7.56 crashes Nov 13, 2026
Clears the advisories that fail the CI audit step (--audit-level=high):
source-map-js (high), colord, postcss-selector-parser and serialize-javascript.
Only build tooling changes; the generated editor bundles are byte-identical.
Two low-severity deepmerge advisories remain: their fix would downgrade
@rollup/plugin-node-resolve to 7.x.
@pasichDev
pasichDev merged commit 024e07f into master Nov 13, 2026
4 checks passed
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.

1 participant