Skip to content

Update the dependencies, and fix what a build was complaining about - #841

Merged
JingMatrix merged 2 commits into
masterfrom
deps-update-2026-08
Aug 2, 2026
Merged

Update the dependencies, and fix what a build was complaining about#841
JingMatrix merged 2 commits into
masterfrom
deps-update-2026-08

Conversation

@JingMatrix

@JingMatrix JingMatrix commented Aug 1, 2026

Copy link
Copy Markdown
Owner

The fmt and commons-lang submodules move to the tip of their upstream branches, core-splashscreen to 1.2.0, navigation3 to 1.1.5 and material3 to 1.5.0-alpha25, which is everything in the catalog that was behind. Both libxposed submodules stay where they are, since their only new commit is the API 102 RFC and that belongs with the API work. In CI, ninja moves to 1.13.2 and crowdin.yml's floating action refs are pinned to majors like everywhere else.

The NDK pin moves from 29.0.13113456, which is r29 beta 1, to r29 stable at 29.0.14206865. Its clang 21 rejects the lsplant x86 build over duplicate <emmintrin.h> definitions arriving through two module fragments, so phmap's SSE2 group scan is switched off for every native module.

The rest of the first commit removes the seventy or so lines a build printed when nothing was wrong. :hiddenapi:stubs no longer overrides its Java version to 8. Thirty-three Kotlin deprecations in the manager are migrated: ListItem's headline becomes a trailing content lambda, TabRow becomes PrimaryTabRow, rememberModalBottomSheetState becomes rememberBottomSheetState, and eight icons move to their auto-mirrored versions; two reads that have no replacement are suppressed in place. Vendored and generated Java, along with :legacy, compile with javac's notes off, and lsplant's string literal operator template warning is silenced at its target. The by extra delegate and AGP's srcDirs, both deprecated, are rewritten, and the apksign plugin is replaced by the signing configuration it was applying, since its last release still calls the deprecated Project.getProperties.

The second commit answers what lint was saying underneath that. The manager and the daemon both set a minimum of API 27 and both called methods that arrived later, which on 8.1 is a NoSuchMethodError rather than an opinion: getLongVersionCode is API 28, FileObserver's multi-file constructor is 29, and LocalServerSocket only implements Closeable from 28. Each is now gated on the release that introduced it, checked against the platform's own api-versions.xml, and two constants newer than the minimum are spelled out rather than referenced. NewApi and InlinedApi findings go from twelve to none, on both variants.

Tested with a clean zipAll over debug and release, which now prints only its task list, and the release zip is installed on a Pixel 6 on Android 17. Signing was checked both ways, since the plugin is gone: with a keystore, the manager APK and the certificate compiled into SignInfo.kt match; without one, both fall back to the debug key as before.

The fmt and commons-lang submodules move to the tip of their upstream branches, core-splashscreen to 1.2.0, navigation3 to 1.1.5 and material3 to 1.5.0-alpha25, which is everything in the catalog that was behind. Both libxposed submodules stay where they are, since their only new commit is the API 102 RFC and that belongs with the API work. In CI, ninja moves to 1.13.2 and crowdin.yml's floating action refs are pinned to majors like everywhere else.

The NDK pin moves from 29.0.13113456, which is r29 beta 1, to r29 stable at 29.0.14206865. Its clang 21 rejects the lsplant x86 build over duplicate `<emmintrin.h>` definitions arriving through two module fragments, so phmap's SSE2 group scan is switched off for every native module.

The rest removes the seventy or so lines a build printed when nothing was wrong. `:hiddenapi:stubs` no longer overrides its Java version to 8. Thirty-three Kotlin deprecations in the manager are migrated: ListItem's headline becomes a trailing content lambda, TabRow becomes PrimaryTabRow, rememberModalBottomSheetState becomes rememberBottomSheetState, and eight icons move to their auto-mirrored versions; two reads that have no replacement are suppressed in place. Vendored and generated Java, along with `:legacy`, compile with javac's notes off, and lsplant's string literal operator template warning is silenced at its target. The `by extra` delegate and AGP's `srcDirs`, both deprecated, are rewritten, and the apksign plugin is replaced by the signing configuration it was applying, since its last release still calls the deprecated `Project.getProperties`.

Tested with a clean `./gradlew zipAll` over debug and release, which now prints only its task list. The resulting release zip is installed and running on a Pixel 6 on Android 17. Signing was checked both ways: with a keystore, the manager APK and the certificate compiled into `SignInfo.kt` match; without one, both fall back to the debug key as before.

Lint is untouched. It already fails at HEAD with 556 errors, 462 of them missing translations, and no workflow runs it; that backlog needs its own change.

Supersedes #824 and #835.
The manager and the daemon both set a minimum of API 27 and both called methods that arrived later, which on 8.1 is a NoSuchMethodError rather than a lint opinion. Every site is now gated on the release that introduced the call, each checked against the platform's own api-versions.xml.

`PackageInfo.getLongVersionCode` is API 28, and the int field it replaces was deprecated in the same release, so one of the two is always wrong on a supported device. RepoRepository already carried a private compat helper; it becomes a shared extension, and the app list, both module lists and the store's installed-version check go through it instead of reading the long form unguarded. Reading the old field loses nothing below 28, since a package installed there has no version code major to drop.

`FileObserver(List<File>, int)` is API 29, so below that the dex2oat watcher is one observer per node built from the single-path constructor those replaced, and stopping it has to reach both. `LocalServerSocket` only implements `Closeable` from 28, so its socket is closed by hand; the client socket has implemented it since 17 and keeps `use`.

Two constants are now spelled out rather than referenced, because on 27 they do not exist to reference: `Telephony.Sms.Intents.SECRET_CODE_ACTION` became public in 28, and `Intent.EXTRA_PACKAGES` in 34. Both carry the same string there — 8.1 broadcasts the secret code action from its hidden `TelephonyIntents` constant, and our own daemon writes the package key as a literal.

Lastly `dispatchPackageLoaded` takes the `@RequiresApi(Q)` its callback already declares, so a future caller cannot forget the guard the current one has.

Lint reports no NewApi or InlinedApi finding on either variant now, down from twelve.
@JingMatrix JingMatrix changed the title Update the dependencies, and make a clean build say nothing Update the dependencies, and fix what a build was complaining about Aug 1, 2026
@JingMatrix
JingMatrix merged commit f565542 into master Aug 2, 2026
1 check 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