Frequently asked questions
Most of these come from questions that keep recurring on the issue tracker. The last section is the opposite — things the app does that surprise people before anyone thinks to ask.
Getting started
Do I need root to use Thor?
No. Thor works with any one of three privilege engines:
- Root — Magisk, KernelSU, KernelSU Next or APatch. Thor asks for
suthrough the standard root interface rather than looking for the binary on disk, which is why it works with the managers that hide it. - Shizuku — no root, no unlocked bootloader; started over ADB or wireless debugging.
- Dhizuku — Device Owner mode on a stock device.
Shizuku is the usual choice for an unrooted device. Root was the only option when Thor launched; Shizuku support was added by request (#46) and is fully supported now.
What can Thor do with no privilege at all?
More than you would expect. Browse every installed app, search it, sort by any of eight keys, filter by install source, state or declared permission, see the home dashboard and the install-source chart, open the app info sheet, launch apps, install APKs and split bundles through the system installer, and use every theme, layout and language option.
What needs a privilege engine is changing an app’s state — freezing, suspending, force-stopping, clearing data, uninstalling system apps.
How do I set up Shizuku?
Install the Shizuku app, then start its server — over ADB from a computer, or with wireless debugging pairing on Android 11 and newer without one. Open Thor and grant permission when asked. Thor notices the Shizuku service appearing on its own, so you do not need to restart it.
How do I set up Dhizuku?
Dhizuku is the most demanding option. Your device must have zero accounts on it when you enrol — Android refuses to set a Device Owner otherwise, and signing into Google afterwards breaks it. Then install Dhizuku, make it Device Owner over ADB, and authorise Thor from inside Dhizuku. In practice that means doing it on a freshly set-up or wiped device.
Which Android versions are supported?
Android 9 (API 28) and newer.
What languages does Thor speak?
English, Arabic, Chinese (Simplified), French and Spanish, plus a “System default” option. You can set Thor’s language independently of your device language. Translation contributions are welcome.
Freezing, suspending and debloating
What’s the difference between Freeze, Suspend and Force stop?
| What you see | Survives reboot? | |
|---|---|---|
| Force stop | Nothing changes | No — the app comes back on its next alarm, job or notification |
| Freeze | The app vanishes from the launcher | Yes |
| Suspend | The icon stays but greys out; tapping shows Android’s “app paused” dialog | Yes |
Force stop is a momentary kill. Freeze and Suspend are persistent. Freeze is more thorough; Suspend leaves a visible reminder that the app exists, which many people prefer (#90).
Can I tap a frozen app to unfreeze and open it?
Three ways, depending on how much you want to install:
- Pin a home-screen shortcut — built in, no extension needed. Turn on Add Freezer to launcher in Settings first; Add to Home screen then appears on the info sheet of any user app, on a launcher that accepts pinned shortcuts. You get a shortcut carrying that app’s own icon, desaturated to grey while it is frozen, and tapping it unfreezes and opens the app in one motion. This is the answer for most people.
- Suspend mode. Tapping the greyed original icon brings up Android’s own “app paused” dialog — two taps to get in, and the icon stays where it always was.
- One tap on the original icon, with nothing greyed and no dialog, needs the Stormbringer extension, which requires root and LSPosed.
Automatically re-freezing when you swipe the app out of recents is not possible: Android has no public API for recents-removal events, and the workarounds — an accessibility service, or a polling foreground service — cost battery, demand alarming permissions and would jeopardise the Play listing (#210).
Can I brick my phone by freezing the wrong system app?
Thor bundles the Universal Android Debloater database and checks it before freezing any system app. Anything UAD rates Unsafe is blocked outright, with no override anywhere in the app. Expert shows a loud warning you can choose to pass. Recommended and Advanced proceed normally.
The gate fails closed: if the UAD data cannot be read at all, every system app is treated as unsafe and blocked rather than waved through.
Can I undo it?
Almost always.
- User apps — unfreezing always works, with no data loss.
- System apps, the normal case — Thor switches them off in place. The app keeps its data, nothing is removed, so there is nothing to restore.
- System apps, the fallback — a few devices refuse to let a preinstalled app be switched off at all. There Thor removes it for your Android user while keeping its data on disk, and unfreezing reinstalls the same APK from the system partition and reattaches that data. Your files and settings survive the round trip. A runtime permission checked across the same round trip came back granted too, but that is one measurement on one Android version, so treat it as likely rather than promised.
- What the fallback does change — while the app is frozen that way, Android reports it as not installed for you. Anything that asks “is this app present?” without also asking about uninstalled packages will answer no, which is why a few third-party tools show the app as gone.
- Where it cannot be undone — if a system update removes an app from the system partition while it is frozen, there is nothing left to reinstall from.
- The one case Thor refuses — on API 37 the platform will not let a shell-level caller remove a system app for a single user at all. So if you are on Shizuku, on that release, and your device also refuses to switch the app off, Thor cannot freeze it and will tell you so rather than half-doing it. Root is unaffected.
I switched from Root to Shizuku and now some apps won’t unsuspend.
Known limitation. Android only lets the package that suspended an app lift that suspension, and the three privilege engines register under different identities. The workaround is to switch back to the mode you used when you suspended them, and unsuspend there.
Root’s unsuspend is the broadest of the three: it clears through the privileged call and through a
shell pm unsuspend, so it covers more of those identities than the other two do. That is not a
guaranteed rescue for a suspension another mode recorded. Making every unsuspend path clear all
known suspender identities is tracked as an open follow-up.
If I remove an app from the Freezer, does it stay frozen?
No. Taking an app off the watchlist from the Freezer screen restores it first — unsuspended and re-enabled — so you never end up with an app that is frozen but no longer tracked. Its home-screen shortcut is disabled at the same time and carries a No longer frozen message: Android does not let an app quietly remove a shortcut you pinned yourself, so greying it out is as far as Thor can go.
If you have apps that are disabled but not on the list — frozen by another tool, or by an earlier version of Thor — the Freezer screen offers to import already-disabled apps, so you can find them and restore them.
Can I freeze a group of apps at once?
Yes — Freeze Profiles. Create named groups, put apps in them (an app can be in several), and freeze or unfreeze the whole group in one tap. There is also the main watchlist, which the Quick Settings tile and the launcher shortcuts operate on.
What does the Quick Settings tile do?
Freezes everything on your watchlist, in one tap from the notification shade. On Android 10 and newer, opening the shade shows how many apps are currently freezable; the tile subtitle that count sits in does not exist before that. The tile only freezes — unfreeze from the app or from a launcher shortcut.
Installing apps
Which file types can Thor install?
.apk, plus every common split-bundle format: .xapk (APKPure), .apkm (APKMirror), .apks
(bundletool) and .apkp. Thor works out which one it is holding from the archive’s contents as
well as its extension, then installs all the right pieces as a single session. No manual
extraction.
My .xapk wouldn’t install.
Two separate causes, both fixed. Any APK containing a nested APK was being mistaken for a bundle
(#207), and APKPure’s .xapk files use a zip
layout that streaming readers cannot parse. Update to the current version.
I can’t open a .apks file from Samsung My Files.
Known and diagnosed, not yet fixed (#161). Samsung’s file URIs carry no filename in the path, and the filter that matches by extension needs one to match. Workaround: open the file from a different file manager. Sharing it to Thor is not a way round it — Thor registers no share target at all.
What is “Fix Store”?
It makes Android believe an app came from the Play Store.
Thor reads the app’s own installed APK paths — the single APK, or every split if it is a bundle —
straight off the device, then reinstalls those exact files with the installer record set to
com.android.vending. Nothing is downloaded and nothing is replaced: it is the same app you already
have, reinstalled from itself with a different name on the receipt.
That matters because plenty of apps ask Android who installed them and behave differently when the answer is not Play — licence checks fail, expansion files will not download, some DRM refuses to start, some apps simply decline to update. Fix Store makes the system record say what those checks expect.
It works in all three privilege modes. Thor refuses to do it to itself.
Can Thor install without root or Shizuku?
Yes, through Android’s standard installer — you will see the usual confirmation dialog. The one thing that is not possible unprivileged is downgrading, because the OS refuses it outright. Thor tells you that rather than failing mysteriously.
Privacy, licence and distribution
Does Thor collect any data?
No. No analytics, no crash reporting service, no telemetry, no ads, no trackers. Everything Thor does happens on your device.
That is checkable rather than a promise: exactly one file in Thor’s own code opens a network
connection, data/repository/StoreRepositoryImpl.kt, and it belongs to the Extension Store. The
store build also carries Google Play Billing, which is Google’s code rather than mine and opens a
connection to Play when the app opens — the foss build has no such library.
Then why does Thor ask for INTERNET permission?
For the Extension Store — downloading its catalog and the extension APKs, over HTTPS from GitHub. If
you never open the Extension Manager, the foss build makes no network request at all. Nothing
about you, your device or your installed apps is put into the request — though GitHub, like any web
server, sees the IP address it arrived from.
The Play (store) build does one more thing: it opens a Google Play Billing connection when you
open the app, to fetch the support tiers and check whether you already hold one. That runs through
the Play Store app rather than through Thor’s own code, and none of it reaches me. The
privacy policy has the detail.
Why does Thor need to see all my installed apps?
QUERY_ALL_PACKAGES is what makes Thor an app manager. It cannot list, freeze or install apps
without it. The list never leaves your device.
What licence is Thor under?
GPL-3.0-or-later. The complete source is on GitHub. You can read it, build it, audit it, fork it.
Where can I get Thor officially?
Three channels:
Is Thor on F-Droid?
Not yet. Thor is on IzzyOnDroid, which is a separate repository you add to an F-Droid client — not the main F-Droid repo. The two are easy to confuse, so to be exact: if you search F-Droid’s default repository for Thor, you will not find it until you have added IzzyOnDroid’s repo.
Adding it takes one step. In your F-Droid client, add this repository, then search for Thor.
F-Droid repository URL
https://apt.izzysoft.de/fdroid/repoA listing in the main F-Droid repository is planned.
What’s the difference between the Play version and the FOSS version?
One functional difference: the Support Developer flow. The Play (store) build includes Google Play
Billing; the foss build ships a stub with billing permanently unavailable. Every app-management
feature is the same in both.
They are not byte-for-byte twins otherwise — the FOSS flavour also carries a -foss suffix in its
version name and a narrower set of bundled locales — but nothing you can do with one is missing from
the other. If you are on the FOSS build, or you would simply rather not send a cut to a payment
processor, the direct routes are below.
Are the builds reproducible?
For the foss build, IzzyOnDroid rebuilds it from this source and publishes it with their
reproducible-build badge when the result matches the APK on the release page. Their check, not my
claim — and that is the whole point of the flavour: you do not have to take my word that the binary
matches the code.
The store build is not reproducible, by design. CI uploads an app bundle to Play, and Play
generates the install for your device from it and signs what it generates — so what Play installs is
not a file that was built here.
Baseline profiles are deliberately kept out of the build entirely. They change the emitted bytecode and would break that verification.
Is this build official?
Official Thor comes from the three channels above. Anywhere else — a mirror, an aggregator, a repackager — check the signing certificate against the APK attached to the GitHub release before you trust it. Thor’s name and logo are trademarked even though the code is free software — anyone may fork the code, nobody may ship it under Thor’s identity. An unofficial build using the name could have anything added to it.
Can I support development?
Yes, and it is appreciated. Thor is written by one person in their own time. None of these routes change anything about the app: there is no paid tier, no unlocked feature, and no difference in what you get.
- GitHub Sponsors — the one I would point you at first. Lowest fees, recurring or one-off, and it sits next to the code.
- Patreon
- Ko-fi
- Buy Me a Coffee
- PayPal
Thor’s own Support Developer screen carries three of them — GitHub Sponsors, Patreon and PayPal — and opens each in your browser rather than through in-app billing. Both builds show those three; the Play build adds a second tab with its billing tiers.
Things worth knowing before they surprise you
Does the permission filter show what an app has, or what it can ask for?
What it can ask for. The filter reads declared permissions, so an app appears under “Camera” even if you denied it. That is the useful question when you are auditing a device — what on here could ask for my camera? — but it is not the same question as what has access right now.
Why does per-app cache size show 0 under Shizuku?
Thor measures it by reading the app’s own cache directory, which needs root. Shizuku and Dhizuku read zero rather than guess. Clearing the cache still works in every mode.
Why can’t Thor reboot my device under Shizuku?
Rebooting needs root. Shizuku and Dhizuku return an explicit error rather than pretending to succeed.
Will the biometric lock ever lock me out?
No. Thor refuses to arm the lock on a device that cannot satisfy it, and tells you exactly what is missing. If a restored backup brings the setting back to a device that could never satisfy it — API 28 with no fingerprint sensor, where no enrolment would help — Thor turns it off itself. Where enrolling a screen lock or a fingerprint would fix it, the lock stays armed and Thor sends you to enrol one instead.
One thing to know on the oldest supported release: on Android 9 the lock accepts fingerprint only, because the API 28 prompt has no PIN fallback. A device without a fingerprint sensor cannot use it there at all.
Is there a process manager showing what’s running and using RAM?
Not yet, and it is harder than it looks. Since Android 8 an app can only see its own process. A real
process manager would have to parse dumpsys or top output, which is brittle and varies by OEM,
and it would not work under Dhizuku at all. It is being considered as an extension
(#55).
Will Thor scan APKs with VirusTotal?
It is in development as an extension, not as part of Thor itself (#209).
That is deliberate. Scanning means sending a file hash to a third party, which is exactly the kind of thing this app exists not to do quietly. Keeping it in an extension means it ships only if you choose to install it, the network access belongs to the extension rather than to Thor, and anyone who wants none of it is unaffected by default.
Can Thor back up app data?
Not yet — it is planned. Exporting APKs and split bundles works today; backing up actual app data, the root-only copy of an app’s private storage, is the part still being built.
Still stuck?
- Bug or feature request — GitHub Issues, with your Android version, device and privilege mode. Those three answer most of a bug report before anyone has to ask.
- Extensions — read the extensions policy first.
- Everything else — the Telegram channel. Release announcements go out there, and it is the fastest way to reach me about anything that is not a bug worth tracking.