Checking browser support…
INSTALL_FAILED_* reference
Every failure code this page recognizes, what it means, and what to do about it. The codes are Android's own constants — the same ones desktop `adb install` prints.
Something already installed is in the way
- INSTALL_FAILED_ALREADY_EXISTS
- This package is already installed and the install was not told to replace it.
- Remove the installed copy first, then install again. You lose that app's data.
- INSTALL_FAILED_UPDATE_INCOMPATIBLE
- An app with this package name is already installed but signed with a different key, so Android will not treat this as an update.
- Compare the signing certificate with the installed app's. Android will not replace an app with one signed by a different key.
- Remove the installed copy first, then install again. You lose that app's data.
- INSTALL_FAILED_VERSION_DOWNGRADE
- The APK's version code is lower than the installed one's, and downgrades are refused by default.
- Turn on “allow downgrade” (`-d`) and retry — or uninstall the newer version first. Data written by the newer version may not load in the older one.
- Remove the installed copy first, then install again. You lose that app's data.
- INSTALL_FAILED_DUPLICATE_PACKAGE
- Another package on the device already uses this package name.
- Remove the installed copy first, then install again. You lose that app's data.
- INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
- The APK declares a `sharedUserId` that clashes with an app already installed under that shared user.
- Remove the installed copy first, then install again. You lose that app's data.
- Compare the signing certificate with the installed app's. Android will not replace an app with one signed by a different key.
- INSTALL_FAILED_UID_CHANGED
- The installed app owns a Linux UID this install would have to change, which would orphan its existing data.
- Remove the installed copy first, then install again. You lose that app's data.
- INSTALL_FAILED_REPLACE_COULDNT_DELETE
- Android could not remove the previous version to put this one in its place.
- Reboot the phone and try again.
- Remove the installed copy first, then install again. You lose that app's data.
- INSTALL_FAILED_DUPLICATE_PERMISSION
- The APK defines a permission name that another installed app already defines.
- Another installed app already claims the same content authority or permission name. Find and remove it, then retry.
- INSTALL_FAILED_CONFLICTING_PROVIDER
- The APK declares a content provider authority that another installed app already owns.
- Another installed app already claims the same content authority or permission name. Find and remove it, then retry.
- INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE
- The installed app uses runtime permissions and this APK targets an Android old enough to use the install-time model — that direction is not allowed.
- Remove the installed copy first, then install again. You lose that app's data.
The APK and this device do not fit each other
- INSTALL_FAILED_OLDER_SDK
- The APK requires a newer Android than this phone runs (`minSdkVersion` is above the device's API level).
- The APK's declared SDK range does not fit this Android version. Check `minSdkVersion` / `targetSdkVersion` against the phone's release.
- INSTALL_FAILED_NEWER_SDK
- The APK was built for an older Android than this phone runs and its declared maximum SDK excludes this device.
- The APK's declared SDK range does not fit this Android version. Check `minSdkVersion` / `targetSdkVersion` against the phone's release.
- INSTALL_FAILED_NO_MATCHING_ABIS
- The APK contains native libraries, but none for a CPU architecture this phone supports.
- This APK carries no native code for the phone's CPU. Get a build for the device's ABI, or install the whole split set instead of one APK.
- Install the whole split set from the container, not a single APK out of it — a split cannot be installed on its own.
- INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
- The APK's native code does not match the phone's CPU architecture.
- This APK carries no native code for the phone's CPU. Get a build for the device's ABI, or install the whole split set instead of one APK.
- INSTALL_FAILED_MISSING_FEATURE
- The APK requires a hardware or software feature this device does not report having.
- The APK's declared SDK range does not fit this Android version. Check `minSdkVersion` / `targetSdkVersion` against the phone's release.
- INSTALL_FAILED_MISSING_SPLIT
- This is one piece of a split app and the pieces it depends on are not installed — a config or feature split cannot stand on its own.
- Install the whole split set from the container, not a single APK out of it — a split cannot be installed on its own.
- INSTALL_FAILED_DEPRECATED_SDK_VERSION
- Android 14 and later refuse to install apps targeting a very old SDK level, whatever their signature.
- The APK's declared SDK range does not fit this Android version. Check `minSdkVersion` / `targetSdkVersion` against the phone's release.
Storage
- INSTALL_FAILED_INSUFFICIENT_STORAGE
- There is not enough free space on the device for this app.
- Free space on the phone and retry — an install needs room for the APK plus its compiled code.
- INSTALL_FAILED_MEDIA_UNAVAILABLE
- The storage volume the install targeted is not mounted or went away mid-install.
- Try again — this failure is usually transient.
- Reboot the phone and try again.
- INSTALL_FAILED_CONTAINER_ERROR
- Android could not prepare the container the app's files are copied into — usually a storage problem underneath.
- Free space on the phone and retry — an install needs room for the APK plus its compiled code.
- Try again — this failure is usually transient.
A verifier, a policy or a build flag refused it
- INSTALL_FAILED_TEST_ONLY
- The APK is marked `android:testOnly`, which normal installs refuse.
- Turn on “allow test builds” (`-t`) and retry. The APK was built as a debug/test artifact.
- INSTALL_FAILED_VERIFICATION_FAILURE
- The package verifier — Play Protect on most phones — examined the APK and rejected it.
- Play Protect scanned the APK and refused it. Turn off “Scan apps with Play Protect” or “Verify apps over USB” in Developer options, then retry.
- Try again — this failure is usually transient.
- INSTALL_FAILED_VERIFICATION_TIMEOUT
- The package verifier did not answer in time, so the install was cancelled.
- Try again — this failure is usually transient.
- Play Protect scanned the APK and refused it. Turn off “Scan apps with Play Protect” or “Verify apps over USB” in Developer options, then retry.
- INSTALL_FAILED_USER_RESTRICTED
- A device policy or a user restriction forbids installing apps this way.
- Unlock the screen and answer any prompt on the phone — some installs need an on-device confirmation and time out silently without one.
- A work profile, device owner or parental-control policy is blocking installs. Check Settings → Users, or ask whoever manages the device.
- INSTALL_FAILED_ABORTED
- The install session was cancelled before it committed — often an unanswered on-device prompt, a locked screen, or another install that took the session away.
- Unlock the screen and answer any prompt on the phone — some installs need an on-device confirmation and time out silently without one.
- Try again — this failure is usually transient.
The file could not be read as an APK
- INSTALL_FAILED_INVALID_APK
- Android could not accept the APK as a valid package — a corrupt archive, a broken split set, or a split written into the session twice.
- Install the whole split set from the container, not a single APK out of it — a split cannot be installed on its own.
- The file is not a valid APK, or it arrived damaged. Download it again from the original source.
- INSTALL_FAILED_BAD_SIGNATURE
- The APK's signature did not verify: the file has been modified since it was signed, or the signature block is malformed.
- Compare the signing certificate with the installed app's. Android will not replace an app with one signed by a different key.
- The file is not a valid APK, or it arrived damaged. Download it again from the original source.
- INSTALL_PARSE_FAILED_NOT_APK
- The file is not an APK at all — the installer could not read it as one.
- The file is not a valid APK, or it arrived damaged. Download it again from the original source.
- INSTALL_PARSE_FAILED_NO_CERTIFICATES
- The APK carries no valid signature. Unsigned APKs, and APKs whose signature files were stripped when they were repacked, land here.
- The file is not a valid APK, or it arrived damaged. Download it again from the original source.
- Compare the signing certificate with the installed app's. Android will not replace an app with one signed by a different key.
- INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
- The APKs in this set are not all signed by the same key — every split of one app must share the base's signature.
- Compare the signing certificate with the installed app's. Android will not replace an app with one signed by a different key.
- The file is not a valid APK, or it arrived damaged. Download it again from the original source.
- INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
- The APK's `AndroidManifest.xml` could not be parsed.
- The file is not a valid APK, or it arrived damaged. Download it again from the original source.
The install session or the framework failed
- INSTALL_FAILED_INTERNAL_ERROR
- The package installer hit an internal error and did not say more.
- Try again — this failure is usually transient.
- Reboot the phone and try again.
- INSTALL_FAILED_DEXOPT
- Compiling the app's code after copying it failed — usually not enough free space, sometimes a corrupt DEX.
- Free space on the phone and retry — an install needs room for the APK plus its compiled code.
- Reboot the phone and try again.
- Try again — this failure is usually transient.