Skip to main content

Command Palette

Search for a command to run...

Android App Not Installed Error: Causes, Fixes and ADB Debugging Guide

Updated
4 min read
Android App Not Installed Error: Causes, Fixes and ADB Debugging Guide

It was late. A developer had just finished building a new feature, transferred the APK to their device, and tapped Install. Instead of the success screen, they got: "App not installed."

They tried again. Same result. No explanation, no error code — just a flat refusal from the OS.

This is one of Android's more frustrating error messages because it's generic. It doesn't tell you what went wrong. But the actual causes are predictable, and once you know them, the fix is usually quick.


The Most Common Cause: Signing Conflict

If any version of your app is already installed on the device — even a debug build — and the APK you're trying to install is signed with a different certificate, Android will refuse the installation entirely.

Android uses signing certificates to verify that updates to an app come from the same source as the original install. A mismatched certificate looks like a completely different app trying to take over the same package name. Android blocks it.

To fix it, uninstall the existing version first:

adb uninstall com.yourpackage.name

If you have multiple devices connected, specify which one:

adb -s <device_id> uninstall com.yourpackage.name

Then reinstall:

adb install path/to/your-app.apk

This situation comes up often when switching between debug and release builds, when moving between machines (since Android Studio generates a debug keystore per machine), or when a team member builds the APK using a different signing config.

Going forward, the cleanest habit is to uninstall before installing when you know the signing config has changed.


Checking Which Devices Are Connected

If you're not sure what device IDs are available:

adb devices

This lists all connected devices and emulators. Use the ID from the output in the -s flag.


Version Code Downgrade

Android won't install an APK whose versionCode is lower than the currently installed version. This is a deliberate restriction — the OS prevents rolling back to older versions without an explicit uninstall.

If you're testing an older build or an earlier branch:

adb install -d path/to/your-app.apk

The -d flag allows downgrades. Without it, the install will fail silently if the version code is lower.


APK Corruption or Incomplete Transfer

If the APK file was partially downloaded, copied over an unstable connection, or corrupted during transfer, the package installer will reject it.

Check the file size — compare it against the original build output. If they differ, rebuild or re-download and try again.

You can also verify the APK's signature is intact before installing:

apksigner verify path/to/your-app.apk

If the APK is unsigned or the signature is broken, this will tell you.


Insufficient Storage

The device needs enough free space to unpack and install the APK. This is rarer than the other causes, but it still happens, especially on older or lower-end devices. Check available storage in Settings and clear space if needed.


"Unknown Sources" Not Enabled

When installing APKs outside of the Play Store, Android requires explicit permission to install from unknown sources. On Android 8 and above, this permission is per-app (granted to the specific app doing the installing, like a file manager or browser). On older versions, it's a global toggle.

If the install fails and the device prompts about unknown sources, grant the permission to the relevant app and try again.


Getting More Detail with ADB

The on-device error message gives you nothing useful. The ADB output gives you a specific error code:

adb install -r path/to/your-app.apk

The -r flag reinstalls while keeping app data. The output will include codes like INSTALL_FAILED_UPDATE_INCOMPATIBLE (signing mismatch), INSTALL_FAILED_VERSION_DOWNGRADE (version code too low), or INSTALL_FAILED_INSUFFICIENT_STORAGE (no space). These codes are specific enough to point directly to the fix.


Checking If the App Is Already Installed

Sometimes the app is installed under a secondary user profile or work profile and isn't visible in the main settings, but still causes a conflict. You can check:

adb shell pm list packages | grep com.yourpackage.name

If it shows up, it's installed somewhere on the device. Uninstall for all users:

adb shell pm uninstall --user 0 com.yourpackage.name

Replace 0 with the appropriate user ID if needed.


A Useful Workflow for Development

When testing during development, using adb install -r keeps the app's data intact while replacing the binary. For situations where signing has changed, always uninstall first. And when you can't figure out why an install is failing, run it via ADB and read the error code — it's almost always more useful than anything the device UI shows you.


Quick Reference

CauseFix
Signing mismatchUninstall existing app, reinstall
Lower version codeUse adb install -d to allow downgrade
Corrupted APKRebuild or re-download, verify with apksigner
No storage spaceFree up space on device
Unknown sources blockedGrant install permission to the relevant app
Unknown causeRun adb install and read the error code

More from this blog

A

Anmol's blog

17 posts