"App not installed" usually means one of four things: an app with the same package name but a different signing key is already installed (uninstall it first), the new APK has a lower version code (rebuild with a higher one), the file is corrupt or not really an APK (download it again), or the phone is low on storage. Play Protect blocks and the "install unknown apps" prompt are separate, fixable messages.
The errors
| Message on the phone | What it means | Fix |
|---|---|---|
| App not installed as package conflicts with an existing package | An app with the same package name is already installed but was signed with a different key — for example a debug build, a build from another tool, or an older version signed before you changed keys. | Uninstall the existing app first (this deletes its local data), then install. To update without uninstalling, always sign new versions with the same key. |
| App not installed — version downgrade | The APK's version code is lower than (or equal to, on some phones) the version already installed. Android does not install older versions over newer ones. | Rebuild with a higher version code, or uninstall the installed version first. |
| The package appears to be invalid / There was a problem parsing the package | The file is incomplete or damaged — usually an interrupted download, a messaging app that modified the file, or a renamed file that is not really an APK. It can also be an AAB renamed to .apk. | Download the APK again over a stable connection from the original link, check the file size matches, and make sure it is an .apk and not an .aab. |
| App not compatible with your phone / requires a newer version of Android | The phone's Android version is older than the app's minimum SDK. | Install on a newer phone, or rebuild with a lower minimum SDK if your builder allows it (APIs your page uses may not exist on very old Android). |
| INSTALL_FAILED_NO_MATCHING_ABIS | The APK contains native libraries only for a different processor architecture (for example only x86, or only 32-bit ARM on a 64-bit-only phone). | Use a build that includes arm64-v8a. HTML2APK builds contain no processor-specific code of your own, so this mostly affects apps from other tools. |
| Insufficient storage / Not enough space | Android needs free space of roughly twice the APK size during installation, plus room for the app's data. | Free up space (clear cache, remove large videos) and try again. |
| Blocked by Play Protect | Google Play Protect flagged the app as unknown or risky. New sideloaded apps from unknown developers often trigger a scan prompt. | Choose Scan, or More details → Install anyway if offered and you trust the source. See the Play Protect guide. |
| For your security, your phone is not allowed to install unknown apps from this source | The app you opened the APK with (browser, file manager, messaging app) has not been allowed to install apps. | Tap Settings in the dialog, turn on 'Allow from this source', go back and tap Install again. This is per app, and only needed once. |
| App not installed (no reason given) | Android's generic message. The usual causes, in order: a signature conflict with an installed version, a version downgrade, a corrupt download, or low storage. | Uninstall any existing version of the app and retry; re-download the file; free some space. If it persists, try another phone to tell a file problem from a phone problem. |
| Installation cancelled or aborted | The installer was interrupted — the user switched away, the phone's installer crashed, or a security app intervened. | Open the APK again from a file manager and complete the steps without leaving the installer. |
| INSTALL_FAILED_TEST_ONLY | The APK is marked test-only — typically one run directly from Android Studio rather than built for release. | Build a proper debug or release APK. Builder-generated APKs are not test-only. |
| INSTALL_FAILED_DUPLICATE_PERMISSION | Another installed app (often an older copy under a different package name) defines the same custom permission with a different signature. | Uninstall the other copy of the app, then install. |
Troubleshooting order
- Is an older version installed? Uninstall it and retry.
- Re-download the file directly from the original https link (not forwarded through a messaging app).
- Check free storage.
- Try a second phone. Fails on both → the file or build; works on one → that phone's state.
Paste the exact message into the install error decoder for a direct answer.
Seeing the real error code
With a USB cable and the Android SDK platform tools, adb install myapp.apk prints the precise INSTALL_FAILED_… code that the on-screen message hides.
Frequently asked questions
Why does my APK say 'App not installed' on one phone but not another?
Usually an older copy signed with a different key is installed on the failing phone, or that phone runs an older Android version than the app's minimum.
Will uninstalling delete the app's data?
Yes. Uninstalling removes localStorage, IndexedDB and files the app stored. That is why updates should be signed with the same key.