Android’s installer has exactly one error message for a dozen unrelated failures: “App not installed.” It doesn’t say whether the file is corrupted, whether it was built for a different phone, or whether the app already on your device was signed with a different key. Google’s own app-signing documentation confirms the installer compares certificates on every update and rejects anything that doesn’t match, with no detail shown beyond the generic error.
The same message also covers problems that have nothing to do with signing. Android’s app bundle documentation notes that a sideloaded app missing one or more of its required split files fails to install on every Google-certified device and on Android 10 and higher, again with no indication that a split was ever missing in the first place.
That is the real problem with this error: one string, at least eight distinct root causes, and no built-in way to tell them apart. Most people respond by retrying the exact same file two or three times, which only works if the cause was a one-off network glitch. The table below maps the symptom you’re actually seeing to the cause behind it, ordered from the one that shows up most often to the one that shows up least.
Quick Comparison: Symptom to Likely Cause
| Symptom You See | Likely Cause | Fix | Data Loss Risk |
|---|---|---|---|
| Fails only when updating an app you already have | Signing certificate mismatch | Uninstall the old copy, then install the new one | Yes, local app data is lost |
| Progress bar finishes, then install fails | Corrupted or incomplete download | Delete and re-download, verify the checksum | None |
| Works on one phone, fails on another | Wrong CPU architecture or Android version | Get the build made for your device | None |
| File is unusually small for what it claims to be | Missing split APKs from a bundle | Install the full bundle, not just the base APK | None |
| Install stalls or fails partway with no message | Insufficient storage | Free up space before retrying | None |
| Blocked immediately, before any progress bar | Play Protect or installer permission blocked | Verify the file, grant the source permission | None |
| Very old app, phone recently updated to Android 14+ | Android 14’s block on outdated apps | Get a current build from the developer | None |
| App was on this phone before, in some form | Leftover data or a second user profile | Fully uninstall, check other profiles | Possible, if forcing removal |
Start With the Most Common Cause: A Certificate Mismatch
-
Check whether you’re actually updating, not installing fresh. If the app is already on your phone and the new file fails while an install of the exact same app on a blank device would succeed, the certificates almost certainly don’t match. This happens when the original copy came from Google Play and the new one is a sideloaded build from a different source, when you switch between two APK mirrors that sign their releases with different keys, or when a developer re-keys their signing certificate between versions. Android’s documentation is explicit that the system compares the certificate on the incoming file against the one already installed and blocks the update if they differ, treating a different certificate as a different app entirely. There is no setting that overrides this from the user side. The only fix is uninstalling the version currently on your phone, which does carry a real cost: any local data, save files, or settings tied to that install are gone unless the app backs those up to an account first. Once it’s uninstalled, the new file installs cleanly as if it were a first-time install, because there is nothing left for its certificate to conflict with.
Rule Out a Corrupted Download Next
-
Re-download the file from scratch before troubleshooting anything else. A connection that drops mid-download, a browser that “completes” a file that was actually cut short, or a transfer over a flaky Bluetooth or cable link can all leave you with a file that looks intact in your Downloads folder but isn’t. APK signature schemes v2 and v3 treat the entire package as one signed unit, so any modification to the file after it was signed invalidates that signature, and a truncated or altered download counts as a modification even though nobody tampered with it on purpose. The installer sees a broken signature and reports the same generic failure it would show for a certificate mismatch. Corrupted files disproportionately come from ad-heavy mirror sites that re-host APKs without verifying them first; our breakdown of which APK download sites actually verify what they serve covers which ones are worth trusting for a clean file. Once you have a fresh copy, compare its SHA-256 hash against the value the developer publishes before you try installing it again, so you know the second attempt isn’t repeating the same problem.
Confirm the Build Actually Matches Your Device
-
Check whether the file was built for your phone’s processor. Native code inside an APK is often compiled separately for each CPU architecture: arm64-v8a, armeabi-v7a, x86, and x86_64 are the four architectures Android currently supports, and a file packaged for the wrong one fails to install with no architecture-specific message. This shows up most often with files pulled from unofficial mirrors that host a single variant instead of the full set. A minimum Android version requirement causes the identical symptom: if the app declares a minSdkVersion higher than what your phone runs, the install fails the same way. Check the app’s listed requirements against your phone’s chipset and Android version before assuming the file itself is bad.
-
Check whether you only downloaded part of a split bundle. Apps published through Google Play increasingly ship as an Android App Bundle, which Play breaks into a small base APK plus separate split files for language, screen density, and CPU architecture, installing only the pieces a given device needs. A sideloaded copy of that same app is often distributed as one combined XAPK or split-APK bundle specifically so every required piece arrives together. If you grabbed only the base .apk out of that bundle, partial installs missing required split files fail on every Google-certified device and on Android 10 (API level 29) and higher, which by now is nearly every phone in use. The fix is downloading the complete bundle and installing it with a tool that understands split packages, rather than hunting for a single standalone APK that may not exist.
Check the Basics: Storage and Blocked Installers
-
Free up storage before you try again. Google’s own troubleshooting guidance confirms that low storage space can stop apps from downloading and installing, and Android needs meaningfully more free space than the app’s listed size, since it has to unpack and verify the file before the install finishes. Check Settings > Storage, clear out anything you don’t need, and retry. This is an easy cause to rule out and an easy one to overlook, since the installer doesn’t say “not enough space” any more clearly than it says anything else.
-
Confirm the app you’re installing from actually has permission. Since Android 8.0, the “install unknown apps” permission is tied to the specific app that prompts the install rather than a single global toggle, so granting it to your browser doesn’t automatically extend it to your file manager or a messaging app. If a source doesn’t have that permission, the install is blocked before it ever starts. Separately, Google Play Protect scans files from any source, not just Google Play, and can flag or block an install it considers harmful. If Play Protect is the thing stopping you, that is a signal to verify the file and its source, not a reason to switch the feature off. Rescan the file, double check where it came from, and treat repeated flags on the same file as reason to look for a cleaner source rather than forcing the install through.
When Android Itself Refuses the App
-
Check how old the app actually is. Starting with Android 14, the operating system blocks installation of any app whose targetSdkVersion is lower than 23, the API level Android 6.0 introduced back in 2015. Attempting it returns
INSTALL_FAILED_DEPRECATED_SDK_VERSIONin the system log, though the average user just sees the same generic message on screen. This mostly affects genuinely old or abandoned apps pulled from archive sites and old mirrors; an app already installed before your phone upgraded to Android 14 keeps working, it’s only a fresh install of an outdated build that gets refused. There is no workaround available to a regular user here, since the block exists specifically to keep apps that predate the modern permission model off current devices; the real fix is finding a current build from the developer, if one still exists. -
Check for leftovers from a previous install or another user profile. A partially removed app can leave residual data behind that conflicts with a fresh install, even after the app icon is gone from your home screen. Separately, Android’s multiple users feature keeps each profile’s apps and data completely separate from every other profile on the same device, so the app might already exist under a work profile or a second user account you rarely switch to, and the system won’t explain that either. Go into Settings > Apps, search for the app by name, and fully uninstall any trace of it. Check whether the device has more than one user profile under Settings > System > Multiple users and look there too. A restart after a clean uninstall clears out anything the system hadn’t fully released yet.
Why Android Gives You Only One Error Message
The installer actually tracks a long list of specific internal failure codes: INSTALL_FAILED_INVALID_APK, INSTALL_FAILED_INSUFFICIENT_STORAGE, INSTALL_FAILED_DEPRECATED_SDK_VERSION, and roughly a dozen others, each one naming the exact problem. None of that detail reaches the average person tapping the file in their notifications shade; the visible dialog collapses all of them into the same three words, and the granular code only shows up in a developer log most people will never open.
A few things make this worse in practice. Google Play hides the entire category of problems behind its own compatibility checks before a download even starts, so most people never encounter this error until the first time they sideload something, with no built-in habit of checking the cause. Mirror sites rarely disclose when they re-sign an app under a different key, which is exactly the change that triggers the most common cause on this list. And a lot of older troubleshooting advice still circulating online recommends disabling Google Play Protect entirely to force a blocked file through, which removes a safety check without addressing whatever caused the block in the first place.
How to Work Through This Error Without Guessing
Treat the causes above as a checklist you run top to bottom, not a set of options to try at random. Certificate mismatch and corrupted downloads account for most real-world cases, so confirm those two before you start suspecting storage, architecture, or a leftover profile. Once you know which cause applies, the fix is almost always specific and fast, usually under two minutes, rather than a vague “try again later.”
The habit that prevents most of these errors from happening again is the same one that prevents a lot of other sideloading problems: stick to sources that verify what they serve, and verify the file yourself before you trust it. Pair this checklist with our full guide to installing APKs safely on Android for the permission settings, source vetting, and signature checks that head off a certificate mismatch or a corrupted file before either one costs you a failed install.
It belongs alongside the rest of our Android how-to guides, which walk through the practical mechanics of getting apps onto your device safely.








