Thor
Featuredv1.96.3Screenshots
(12)About Application
Thor App Manager
- Kotlin, Jetpack Compose, and Material 3
- Room-backed app cache and custom hidden API bypass
- Free software under GPL-3.0-or-later, with no ads or trackers
- FOSS APK on GitHub Releases; the FOSS build is reproducible
- The FOSS app uses the network for the optional Extension Manager; the Store build also connects to Google Play Billing
Working Features
Apps and installation
- Room-cached app lists with search, sorting, source and permission filters, split/frozen/suspended/hidden indicators, and a saved list or grid layout. Long Apps and Freezer lists/grids have a draggable scrollbar with a visible-range bubble. Export the current list to CSV.
- App Info quick actions can be reordered or hidden. Tap an app icon to launch it, or long-press it for Android's app settings.
- Install APK, APKM, APKS, and XAPK packages (including supported OBB expansion assets) through Root, Shizuku, Dhizuku, or Android's installer. Eligible Root/Shizuku installs of older-target APKs require explicit consent unless the separate saved override is enabled; install-time runtime-permission grants are opt-in.
- Per-app permission management can grant or revoke supported runtime permissions. Its App Ops tab uses Root or Shizuku to show the device's operations, with Relevant, Changed, and All filters, search, package/UID modes, and a separate reset to the platform default. Changes are read back before confirmation; shared-UID edits warn about affected apps. App Ops modes remain separate from permission grants. See the scope and validation notes.
- Per-component control can open activities, stop running services, and disable, enable, or reset activities, services, receivers, and providers. Thor records its own disables for Restore all across apps for the current Android user. Component changes and forced launches require Root or Shizuku running as root; ordinary exported activities can open without privilege.
- Clear app data through Root, Shizuku, or Dhizuku; clear one app's cache with Root, or clear caches across the device with Root or Shizuku. Background restriction and system-app uninstall are also available where the active privilege mode supports them.
- Fix Store and Play installer attribution for eligible reinstall actions require Root or Shizuku. Dhizuku uses device-owner APIs for ordinary APK replacement, app removal, data clearing, suspension, and hide/unhide; it does not support Fix Store, force-stop, or whole-device cache clearing.
Freezer and bulk actions
- Root and Shizuku freeze by disabling; Dhizuku uses Android's device-owner hide/unhide API. These paths retain the APK and app data. Thor also helps recover system apps removed for the current user by older versions. Settings → Freezer offers a default-on Shizuku removal fallback when the device refuses disabling: it keeps data files but may affect accounts, and Unfreeze reinstalls the package. Turning the setting off is respected across app updates.
- Universal Android Debloater recommendations label system apps. Thor blocks Unsafe freeze targets and warns for Expert targets to reduce the risk of boot problems.
- Freeze Profiles group apps for freeze/unfreeze, suspend, or force-stop actions. Assign selected apps to existing profiles from the App list or Freezer; App Info shows membership, and removing the last profile membership of a frozen app offers a recovery choice.
- Batch reinstall, uninstall, freeze, unfreeze, force-stop, suspend, unsuspend, cache clearing, sharing, and APK/bundle export. Bulk Freeze asks whether successfully frozen apps should also be added to the Freezer list. Batch clear data and batch install are not available.
Backup, sharing, and Guardians
- The Backup & Restore Hub finds APK/APKS/XAPK bundles and encrypted
.thorbakarchives, and lets you start backups, inspect, search, share, restore, or delete them. Restores authenticate archive contents before applying them. Root can back up and restore private app data; non-root Shizuku is limited to APKs and accessible shared storage. Backup passphrases cannot be recovered. - Export one app as APK/APKS/XAPK, export selected apps as installer bundles, share a single app, or prepare selected apps for sharing. Multi-app Export writes bundles; it is not bulk private app-data backup.
- Guardians runs supported background work through two Room-backed foreground-service queues: a data queue for archive backup/restore, single-app export, and bulk-share preparation; and a privilege queue for supported freeze/unfreeze, suspend/unsuspend, per-app cache, and eligible Fix Store/reinstall actions. Each queue processes its own tasks in order.
- The Guardians screen shows Running, Queued, and Recent tasks, with progress, logs, per-app results, and explicit cancellation. Groot, Rocket, and Star-Lord label the Root, Shizuku, and Dhizuku providers; these labels do not prove a provider is currently available. Accepted tasks can continue when the screen is dismissed; task history and recovery state remain visible after interruption. Completion after every reboot, force-stop, or lost privilege is not guaranteed. Single-app quick sharing and multi-app bundle export use separate direct paths.
Interface and personalization
- Adaptive Home, Settings, App list, and detail layouts for phones, tablets, and foldables, including a navigation rail and landscape detail panes.
- Material 3 themes (dark, light, system, AMOLED, and Asgardian), optional dynamic colors, and font presets that apply across Thor and its external installer.
- Customize App Info actions and, separately, the App list and Freezer multi-app action toolbars. Reorder, hide, or restore their actions.
- Biometric lock for Thor, with screenshot/recording protection and a hidden Recents preview while locked.
- Nine app languages: English, Spanish, French, Arabic, Simplified Chinese, Japanese, European Portuguese, Brazilian Portuguese, and Polish, with an in-app language switcher.
- Work Mode selection between available Root, Shizuku, and Dhizuku providers. The Extension Manager offers an optional catalog of add-ons, with a pinned-signer check for every downloaded APK and a SHA-256 comparison when the catalog provides a digest, both before installation.
Upcoming Features
- Editing Packages.xml
- Batch Install
- Launcher-shortcut / deep-link triggering for automation extensions, via an authenticated handoff
(explicit-component intent or nonce-signed token). The earlier public
thor://extension/triggerdeep link was removed because, being exported, any app could drive triggers through Thor's signature-level permission. - Many more
💖 Support Development
Thor is a labor of love, built to be ad-free and tracker-free. If this tool has made your Android management easier, consider supporting its continued development. Your contributions help keep the project alive and free for everyone. Thor also offers optional support shortcuts after some successful actions.
| Platform | Link |
|---|---|
| GitHub Sponsors | Sponsor on GitHub |
| Patreon | Support on Patreon |
| Ko-fi | Support on Ko-fi |
| Buy Me a Coffee | Buy me a coffee |
| PayPal | Donate via PayPal |
Credits
- Built the Odin root-service binding framework, now a standalone library at
trinadhthatakula/Odinand published to Maven Central ascom.trinadhthatakula:odin. Odin was adapted from the architectural design oflibsuby topjohnwu and completely rewritten to eliminate allcom.topjohnwupackage namespaces. - Replaced
AndroidHiddenApiBypasswith an internal Kotlin implementation in thebypassmodule, backed by Java stubs in thevm-runtimemodule for maximum compatibility when shadowing system classes.
Architectural Advances in Odin
- Pure Kotlin: Fully converted the original Java-based design of
libsuinto a high-performance, modern, reactive Kotlin library. - Zero Raw Binaries: Completely eliminated precompiled binary dependencies (such as
main.jar), bypassing external file extractions. - Direct APK Classpath Invocations: Dynamically mounts the app's main APK (
base.apk) onapp_process's executionCLASSPATH, bootstrapping directly using a custom Kotlin classloader trampoline (com.valhalla.superuser.internal.RootServerMain). - Refer to the Odin README for more details.
License
Copyright © 2025–2026 Trinadh Thatakula.
Thor is free software: you can redistribute it and/or modify it under the terms of the GNU
General Public License as published by the Free Software Foundation — either version 3 of the
License, or (at your option) any later version (GPL-3.0-or-later). See the LICENSE
file for the full text.
- The project as a whole is distributed under the GNU General Public License v3.0 or later.
- Portions derive from
libsu(Apache-2.0); all such use complies with the Apache-2.0 requirements. - The Thor name, logo, and icon are trademarks of Trinadh Thatakula and are not licensed under the GPL. See TRADEMARK.md.
⚠️ Official builds & unofficial forks
Thor's source is licensed under GPL-3.0-or-later, and official builds have no ads or trackers. The FOSS APK excludes Google Play Billing; the Play build includes it for optional support. Official builds come only from Google Play, IzzyOnDroid, Indus App Store, and GitHub Releases.
The GPL guarantees your right to fork and modify Thor. However, an unofficial build that injects ads or trackers, or bundles a proprietary ad SDK (e.g. AdMob) is not the official Thor, is not endorsed, and — because it combines GPL-licensed code with proprietary components — is likely in violation of the GPL. Such builds must also rename the app and change the icon per TRADEMARK.md. Please report them.
Release Notes & Changelog
Thor v1.96.3 Release Notes
Version 1.96.3 (1963) is a hotfix for Shizuku system-app freezing on affected devices, including Xiaomi builds that refuse disabling a system app for the current Android user. It restores the removal fallback with a persistent opt-out and improves freeze/restore diagnostics. It also makes the Extensions confirmation sheet scrollable on small screens and in landscape (issue #518).
These public release notes include all changes since
v1.96.1 through 7994cf40,
including the App Ops, scrollbar and Japanese-language changes delivered in 1.96.2 development
builds. Since the latest development release,
v1.96.2-dev-89,
the range contains the Shizuku hotfix and web/CI dependency updates. The release also
reconciles dependency updates already merged to the beta branch.
✨ Highlights
- 🧊 Restore affected Shizuku freezes. When Android refuses disabling a system app, Thor can remove it for the current Android user and reinstall it on Unfreeze. System app removal fallback is on by default when no saved choice exists. A saved off choice stays off across updates. Find the option in Settings → Freezer.
- ⚠️ Understand the fallback. It retains the app's data files, but app-managed accounts may be lost. It applies to manual and automatic freezes. Turning the option back on after opting out requires confirmation.
- 📜 Reach the Extensions confirmation controls. The warning, answer field and buttons scroll together when the screen is too short to display them all, including in landscape.
- 🛡️ App Ops in Permission Manager. Inspect Android operations and change supported package or UID modes with Root or Shizuku. Thor reads changes back before confirming them.
- ↕️ Draggable scrollbars help navigate long Apps and Freezer lists or grids.
- 🇯🇵 Japanese support is available in the app's language selection.
What's Changed
🧊 Shizuku system-app freeze and restore
PR #521, addressing
issue #519
(04d51a5e, d17ac998, 63f31e43; merged as 7994cf40):
- Thor first tries the existing Binder disable and
pm disable-userpaths. Only a policy-refused Shizuku system-app disable can usepm uninstall -k --user N, and only while the removal fallback setting is enabled. Ordinary command/transport failures, user-installed apps, Root and Dhizuku do not use this fallback. - A healthy local preference store with no saved choice defaults to enabled, including on upgrades. Explicit off choices persist and are checked when queued work executes. The setting is device-local and excluded from backups, so restoring other settings cannot override it. Unreadable preferences disable the fallback; corruption recovery persists an off choice.
- Unfreeze reinstalls packages removed for the current user. Restoration of legacy removed packages remains available even when the fallback is off.
- Queue history preserves distinct disable-refused, disable-failed and restore-failed reasons. Diagnostic logs retain both shell output streams. Unrelated root-availability probes no longer mark Shizuku tasks as degraded; task warnings follow commands actually executed for that target.
- Shizuku launches
shfor either server identity, allowing the child process to inherit the server UID without an unnecessary nestedsudependency.
📜 Extensions confirmation on small screens
PR #523, addressing
issue #518 (a1d522bf):
- The Extensions acknowledgement sheet now scrolls vertically, so its warning, answer field, Accept button and Cancel control remain reachable in short windows and landscape.
- The arithmetic confirmation and saved consent behavior are unchanged.
🛡️ App Ops in Permission Manager
PR #511
(f06b540d, 06373e87, 26f57ac0, 76f0cba4, 699fe66a, 1ef6de96):
- A separate App Ops tab discovers operation names, controlling switches, linked permissions, defaults and reset support from the running Android build. Search and the Relevant, Changed and All filters make long catalogs easier to inspect.
- Root or Shizuku can read and change supported package- or UID-scoped modes for the current Android user. Thor verifies the requested scope after writes, reports uncertain results and offers a separate reset-to-platform-default action. Shared-UID edits warn about other affected apps.
- Runtime-permission-controlled operations stay read-only in App Ops, with a path to Permissions. Unknown policy blocks potentially conflicting edits. Parsing handles supported mixed Xiaomi operation output, and the editor sheet dismisses when swiped down from its title.
↕️ Draggable scrollbars in Apps and Freezer
PR #510
(7df4c174, 664808ec, ebd93039, 5ae8ab7d):
- Drag scrollbar thumbs through long lists and grids, with a bubble showing the visible app range and accessibility progress controls for navigation.
- The expanded drag target and responsive spacing preserve grid columns and nearby row/card taps. Dragging remains stable when the item count changes. Sort-aware snapping is a follow-up.
🇯🇵 Japanese localization
PR #513 (bfc594cf):
- Adds Japanese strings across the app, including App Ops, backup, settings and Store features, and exposes Japanese in the supported language picker and Android locale configuration.
- Updates locale tests and contribution guidance. The hotfix also supplies its new messages in all nine app locales and aligns Japanese wording with the existing Unfreeze terminology.
🔧 Project: distribution, dependencies and follow-up tracking
- PR #512 (
ca46642f,29a3138d) prepared 1.96.2 development release notes and addeden-GBFastlane metadata for Play's primary listing. This release provides the complete 1.96.3 Play/F-Droid changelog in every Fastlane locale. - PR #494 (
c68810c2) synchronized the Shizu listing with production 1.96.1. Its changelog is synchronized to a new version after production promotion; the listing follows the public/releases/latest/APK. - PR #514 (
6888e96a) refreshes dependencies, removes compiler warnings and records scrollbar design prototypes. PR #499 (265d3b0e) updates Fastlane; PR #507 (c358263f) updates Coil. - Release reconciliation includes PR #498
(
6ed949d2), retaining the beta branch's devalue 5.9.2 fix. PR #515 (37f97ae6) is also joined into the release history; development already carries its Fastlane update and a newer compatible Rubyzip version, which are retained when resolving the lockfile. - Web dependency updates are in PR #500
(
45f3eb83) and PR #516 (fe319596). CI action updates are in PR #501 (69131bcd) and PR #517 (f770cd59). - PR #506 (
0b5360c9,a2502252,3e58535b) and PR #508 (ab3e98d6,fb214ae2) reconcile README and follow-up reports with shipped behavior and remaining checks. The production-history reconciliation is recorded in6e2df990.
🧪 Validation scope and remaining device checks
For release preparation, ./gradlew test lintFossDebug lintStoreRelease passed on
Zulu JDK 21.0.12.1: 3,098 unit tests per flavor, zero failures, errors or skips,
and no lint warnings or errors. The release-note budgets, 13 shell test files, and
35 release-routing tests also passed. After reconciling the beta branch, the Android gates
passed again; the website passed all 304 tests and its production build with no diagnostics.
The Shizuku hardware checks recorded below were not repeated for release preparation.
The Extensions regression tests verify scrolling to the answer and controls, incorrect-answer
rejection and correct-answer acceptance in portrait, landscape and reduced-height viewports.
On a disposable API 37.2 emulator at 480 × 854 pixels and 240 dpi, the old build reproduced the
clipped controls. The fix allowed scrolling to both actions in portrait and landscape and
successful acceptance; the challenge and answer survived rotation. Portrait also worked with
the keyboard open. In landscape, Gboard left only a 51-pixel viewport, so pressing Done to hide
the keyboard was needed to fully expose the controls. The reporter's Android 13 Jelly Star has
not been tested; the reporter has been asked to verify the next build.
The issue #519 device record and PR #521 report these checks for the hotfix:
- POCO F7, Xiaomi.eu, Android 16/API 36, Shizuku ADB mode (UID 2000): Android refused disabling the authorized Wallpaper Carousel fixture. Legacy restoration with the option off, refusal without removal when off, and foreground-queue freeze by removal followed by Unfreeze succeeded. The fixture was returned to its original removed state.
- Fresh API 37.2 emulator, Shizuku ADB mode: shell identity, disable/enable, gateway and foreground-queue round trips passed. Disabling worked on this build; removing a system app for a user required root. This is device/ROM-specific behavior, not a blanket Android-version rule.
- The PR records
./gradlew test lintFossDebug lintStoreRelease, debug/instrumentation builds, confirmation UI checks, and preference regressions for the default and persistent opt-out. Its reported post-default-change run had 3,093 unit tests per flavor and no test failures or errors. Read-failure/corruption opt-out coverage was added in the review follow-up. - Limits: the reporter's exact HyperOS build was not tested. Root-backed Shizuku was not live-tested after the shell-launch change. Account retention was not tested: the fixture was not an account provider. The checks do not establish a common cause for every reported unfreeze failure or compatibility with every vendor restriction.
- App Ops still needs broader acceptance for scoped Shizuku writes, Android 9, secondary/work users, shared UIDs and additional OEM formats. Scrollbar sort-aware snapping and remaining physical-device gesture checks are tracked separately.
🛠 Commits Log
Complete non-merge history in chronological order: 29 commits from v1.96.1..7994cf40.
The release-preparation commit adds version 1963 and these notes.
c68810c2fix(shizu): sync complete changelog to production 1.96.1265d3b0echore(deps): bump fastlane from 2.239.0 to 2.240.1 in the fastlane group45f3eb83chore(deps-dev): bump the web group in /web with 2 updates69131bcdchore(deps): bump ruby/setup-ruby in the actions group0b5360c9chore: refresh Thor documentation and AGP versiona2502252docs: distinguish partial Samsung fix from shipped work3e58535bdocs: qualify extension catalog hash verificationc358263fchore(deps): update Coil to 3.6.3ab3e98d6docs: mark shipped installer and bulk follow-upsfb214ae2docs: reconcile follow-up index and reports with shipped work7df4c174feat: add draggable scrollbars to Apps and Freezer664808ecfix: tighten grid scrollbar spacing without losing columnsebd93039feat: use responsive scrollbar spacing in lists and grids5ae8ab7dfix: preserve scrollbar drag when item count changesf06b540dfeat(permissions): add verified App Ops manager06373e87fix(app-ops): support mixed Xiaomi operation responses26f57ac0fix(app-ops): explain runtime restrictions and restore editor input76f0cba4fix(app-ops): filter relevance by manifest permissions699fe66afix(app-ops): guard unknown policy and reveal linked permissions1ef6de96fix(app-ops): make editor title swipe dismiss sheetca46642fchore(release): prepare v1.96.229a3138dchore(release): add en-GB Fastlane metadatabfc594cfi18n: add Japanese app localization6888e96achore: refresh dependencies, fix warnings, and save scrollbar prototypesfe319596chore(deps): bump the web group in /web with 5 updatesf770cd59chore(deps): bump the actions group with 2 updates04d51a5efix(shizuku): restore consented system-app freeze fallbackd17ac998fix(shizuku): enable removal fallback by default and preserve opt-outs63f31e43fix(shizuku): preserve removal opt-out on preference read failures
Additional beta-branch history reconciled for promotion:
6ed949d2chore(deps): bump devalue37f97ae6chore(deps): bump rubyzip in the bundler group across 1 directory
Hotfix added during release preparation:
a1d522bffix(extensions): make consent sheet scrollable on small screens
Declared Android Permissions
21 totalShizuku API Permissions
This application connects to the Shizuku service to execute system-level operations with ADB elevated privileges.
Standard Android Permissions
Specifications
Install via ShizuStore to enable automatic updates and silent installations using Shizuku.
More in Software management
Other applications in this category
Hail
aistra0528
Freeze, hide, or disable any app. Create and organize app groups that can be frozen with one click.