Dev Build v1.90.2 (91)
Pre-release
Pre-release
Thor v1.90.2 Release Notes
A focused stability & smoothness release on top of v1.90.0 — hardened APK installation, a fix for the Settings crash on large fonts, and a broad pass to eliminate memory leaks and UI jank across the app.
What's Changed
📦 Installer
- No more false "downgrade" blocks: normal apps that bundle helper
.apkassets (e.g. Muntashirakon App Manager, MT File Manager) were being misidentified as a system downgrade and blocked. A file is now recognized as a single APK by its top-level manifest instead of by any nested.apkentry, so it installs correctly. (#207) .xapkinstalls fixed: bundles that failed with "Error: failed to parse package" now install — tolerant manifest parsing (numericversion_code, missing fields) and correct base-APK selection that skips config splits. (#159)- APKPure
.xapknow installs too: APKPure stores a bundle's inner APKs uncompressed with streaming data descriptors, which the old sequential zip reader couldn't parse — it failed withAndroidManifest.xmlnot found. Bundles are now read via the archive's central directory (likeunzip), so APKPure.xapk— and APKMirror.apkm(via itsinfo.json) — install reliably.
❄️ Freezer
- "Freeze all / Unfreeze all" no longer freezes the app: a bulk toggle flooded package-change broadcasts that stalled the main thread on the debloat cache, so the app hung and the list wouldn't refresh. The cache is no longer rebuilt under a main-thread lock — bulk actions stay responsive.
- Live progress: bulk freeze/unfreeze now shows a compact sheet with a running count that auto-dismisses when it finishes.
- Shizuku recognized on first launch: granting Shizuku is now picked up by the Freezer screen immediately, without an app restart.
- Animations follow the in-app theme: the progress/terminal Lottie now respects the app's Light/Dark setting instead of the device theme.
🐛 Crash Fix
- Settings no longer crashes with system Font Size = Maximum and Display Size = Larger. The connected button group was rebuilt (via Asgard 1.0.1) so it can no longer produce the internal
ButtonGroupmeasurement crash at any font/display scale. (#197)
🚀 Performance & Smoothness
- App-list pull-to-refresh no longer stacks background collectors — previously each refresh leaked broadcast receivers and re-ran a full package enumeration.
- Privilege availability checks (Shizuku/Dhizuku binder IPC) are now
suspendand main-safe, moved off the main thread across Settings, App Details, App List, and the installer — noticeably less jank. - Less recomposition work: list filtering/sorting and date formatting are memoized in App Details, Freezer, and Permission Manager.
- App icons decode at their display size — lower memory use and smoother scrolling in the app grid.
- Lifecycle-aware state collection and one-shot side effects throughout (no more background activity launches).
🔒 Stability & Resource Fixes
- Privileged shell/process execution (Shizuku/Dhizuku) now uses bounded waits with guaranteed teardown and daemon reader threads — a hung command can no longer pin a background thread forever or leak file descriptors.
- Fixed a cross-thread data race in the debloat (UAD) cache.
- The biometric prompt no longer orphans a cancellation signal when re-triggered (auto-prompt + manual tap).
- Billing no longer initializes at app shutdown; added a proper teardown hook.
- Removed an unused cache-scanner path that leaked a
susubprocess and its file descriptors.