ShizuStore

Thor

trinadhthatakula

1.96.3 · GitHub

Download APK
Software management Android 9+ 3 days ago GPL-3.0 Dhizuku
505 ShizuStore
53.4k GitHub
590 Stars
5 MB Size

More about this app

App manager with freeze and install capabilities.

Thor Logo

Thor App Manager

Get it on Google Play   Get it on IzzyOnDroid   Download on Indus Appstore

Telegram Channel


  • 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 .thorbak archives, 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/trigger deep 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/Odin and published to Maven Central as com.trinadhthatakula:odin. Odin was adapted from the architectural design of libsu by topjohnwu and completely rewritten to eliminate all com.topjohnwu package namespaces.
  • Replaced AndroidHiddenApiBypass with an internal Kotlin implementation in the bypass module, backed by Java stubs in the vm-runtime module for maximum compatibility when shadowing system classes.

Architectural Advances in Odin

  • Pure Kotlin: Fully converted the original Java-based design of libsu into 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) on app_process's execution CLASSPATH, 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.

Close

How Shizuku is used

Can freeze, suspend, force stop, clear data, uninstall, install and reinstall apps plus grant permissions and restrict background via `Shizuku` shell and binder calls.

This is an AI-assisted analysis of Shizuku-related usages in the app's public source code. It is best effort, so it may not catch every single usage.

How this app uses Shizuku

Thor uses Shizuku as one privileged backend for day to day app management, running shell commands and system binder calls with shell identity.

  • Freeze and unfreeze apps: disable user apps and preinstalled apps in place and restore them later with pm disable-user, pm enable, pm unhide and pm install-existing plus direct system service calls, keeping app data.
  • Suspend and unsuspend apps: pause selected apps and lift the pause with pm suspend and pm unsuspend plus direct system service calls, with ownership checks for suspensions made through other modes.
  • Force stop apps: stop a running app with am force-stop plus a direct activity manager call, verified by rechecking stopped state.
  • Clear app data and caches: wipe a single app with pm clear plus a direct package manager call, and trim whole device caches with pm trim-caches when a usage based target is available.
  • Uninstall apps: remove apps for the current user with pm uninstall plus a privileged installer session, with a confirmation dialog fallback.
  • Install APKs from storage: install local APK files through a package session command and through a privileged installer session wrapped for Shizuku, with a normal installer fallback.
  • Reinstall system apps: restore a missing preinstalled app for the current user with pm install-existing plus a privileged installer call.
  • Reinstall with store attribution: look up APK paths with pm path then reinstall with pm install attributed to the Play Store, verified after install.
  • Grant and revoke permissions: allow or deny runtime permissions with pm grant and pm revoke, including parallel app ops handling for package visibility on vendor ROMs.
  • Restrict background activity: turn background restriction on or off with appops set plus direct app ops service calls.

Android APIs or commands used

  • android.content.pm.IPackageManager.setApplicationEnabledSetting
  • android.content.pm.IPackageManager.setPackagesSuspendedAsUser
  • android.content.pm.IPackageManager.clearApplicationUserData
  • android.content.pm.IPackageDataObserver
  • android.content.pm.IPackageManager.getPackageInstaller
  • android.content.pm.IPackageInstaller.installExistingPackage
  • android.content.pm.IPackageInstallerSession
  • android.app.IActivityManager.forceStopPackage
  • com.android.internal.app.IAppOpsService.setMode
  • com.android.internal.app.IAppOpsService.checkOperation
  • android.app.AppOpsManager.strOpToOp
  • android.content.pm.PackageInstaller.uninstall
  • android.app.ActivityManager.killBackgroundProcesses
  • android.content.pm.PackageManager.setApplicationEnabledSetting
  • pm disable-user
  • pm enable
  • pm unhide
  • pm install-existing
  • pm install
  • pm uninstall
  • pm uninstall -k
  • pm clear
  • pm trim-caches
  • pm grant
  • pm revoke
  • pm suspend
  • pm unsuspend
  • pm path
  • am force-stop
  • appops set
  • dumpsys package
  • dumpsys diskstats

Notable details

Installs started through Shizuku fall back to the normal package installer confirmation when the privileged steps cannot complete. Uninstalls fall back to the system delete confirmation dialog.

Close

Changelog

What's new for version 1.96.3

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-user paths. Only a policy-refused Shizuku system-app disable can use pm 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 sh for either server identity, allowing the child process to inherit the server UID without an unnecessary nested su dependency.

๐Ÿ“œ 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 added en-GB Fastlane 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 in 6e2df990.

๐Ÿงช 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.

  • c68810c2 fix(shizu): sync complete changelog to production 1.96.1
  • 265d3b0e chore(deps): bump fastlane from 2.239.0 to 2.240.1 in the fastlane group
  • 45f3eb83 chore(deps-dev): bump the web group in /web with 2 updates
  • 69131bcd chore(deps): bump ruby/setup-ruby in the actions group
  • 0b5360c9 chore: refresh Thor documentation and AGP version
  • a2502252 docs: distinguish partial Samsung fix from shipped work
  • 3e58535b docs: qualify extension catalog hash verification
  • c358263f chore(deps): update Coil to 3.6.3
  • ab3e98d6 docs: mark shipped installer and bulk follow-ups
  • fb214ae2 docs: reconcile follow-up index and reports with shipped work
  • 7df4c174 feat: add draggable scrollbars to Apps and Freezer
  • 664808ec fix: tighten grid scrollbar spacing without losing columns
  • ebd93039 feat: use responsive scrollbar spacing in lists and grids
  • 5ae8ab7d fix: preserve scrollbar drag when item count changes
  • f06b540d feat(permissions): add verified App Ops manager
  • 06373e87 fix(app-ops): support mixed Xiaomi operation responses
  • 26f57ac0 fix(app-ops): explain runtime restrictions and restore editor input
  • 76f0cba4 fix(app-ops): filter relevance by manifest permissions
  • 699fe66a fix(app-ops): guard unknown policy and reveal linked permissions
  • 1ef6de96 fix(app-ops): make editor title swipe dismiss sheet
  • ca46642f chore(release): prepare v1.96.2
  • 29a3138d chore(release): add en-GB Fastlane metadata
  • bfc594cf i18n: add Japanese app localization
  • 6888e96a chore: refresh dependencies, fix warnings, and save scrollbar prototypes
  • fe319596 chore(deps): bump the web group in /web with 5 updates
  • f770cd59 chore(deps): bump the actions group with 2 updates
  • 04d51a5e fix(shizuku): restore consented system-app freeze fallback
  • d17ac998 fix(shizuku): enable removal fallback by default and preserve opt-outs
  • 63f31e43 fix(shizuku): preserve removal opt-out on preference read failures

Additional beta-branch history reconciled for promotion:

  • 6ed949d2 chore(deps): bump devalue
  • 37f97ae6 chore(deps): bump rubyzip in the bundler group across 1 directory

Hotfix added during release preparation:

  • a1d522bf fix(extensions): make consent sheet scrollable on small screens
Close

Permissions

21 permissions requested

  • android.permission.INTERNET
  • android.permission.REQUEST_INSTALL_PACKAGES
  • android.permission.QUERY_ALL_PACKAGES
  • com.android.permission.GET_INSTALLED_APPS
  • android.permission.REQUEST_DELETE_PACKAGES
  • shizuku.permission.API_V23
  • com.rosan.dhizuku.permission.API
  • android.permission.RECEIVE_BOOT_COMPLETED
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.PACKAGE_USAGE_STATS
  • android.permission.POST_NOTIFICATIONS
  • android.permission.FOREGROUND_SERVICE
  • android.permission.FOREGROUND_SERVICE_DATA_SYNC
  • android.permission.FOREGROUND_SERVICE_SPECIAL_USE
  • android.permission.WAKE_LOCK
  • android.permission.USE_BIOMETRIC
  • android.permission.USE_FINGERPRINT
  • android.permission.ACCESS_NETWORK_STATE
  • com.valhalla.thor.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
  • moe.shizuku.manager.permission.API_V23
  • android.permission.READ_EXTERNAL_STORAGE
Close