TroubleshootingPublished: 3 min read

adb install Errors: INSTALL_FAILED Codes Explained

What each adb install error means and how to fix it, from INSTALL_FAILED_VERSION_DOWNGRADE and UPDATE_INCOMPATIBLE to NO_MATCHING_ABIS, USER_RESTRICTED and split APKs.

adb install app.apk either prints Success or a Failure [CODE: message]. The code tells you exactly what went wrong. Below are the codes you will meet most often, what they mean and how to fix each one.

Quick table

CodeMeaningFix
INSTALL_FAILED_ALREADY_EXISTSThe app is already installedadb install -r app.apk
INSTALL_FAILED_VERSION_DOWNGRADELower version code than the installed appadb install -r -d app.apk, or uninstall first
INSTALL_FAILED_UPDATE_INCOMPATIBLESame package, different signing keyUninstall the installed app first
INSTALL_PARSE_FAILED_NO_CERTIFICATESThe APK is not signedSign it, or build a signed debug/release APK
INSTALL_FAILED_NO_MATCHING_ABISNative code for the wrong CPU typeUse an APK built for the phone's ABI
INSTALL_FAILED_OLDER_SDKThe phone's Android is too oldUse a build with a lower minSdkVersion
INSTALL_FAILED_TEST_ONLYAPK marked testOnlyadb install -t app.apk
INSTALL_FAILED_INSUFFICIENT_STORAGENot enough free spaceFree up storage
INSTALL_FAILED_USER_RESTRICTEDThe phone blocked the installAllow installs from USB, confirm on the phone
INSTALL_FAILED_MISSING_SPLITPart of a split APK is missingInstall all parts together

The common ones in detail

UPDATE_INCOMPATIBLE: signatures do not match

An app with the same package name is already installed but was signed with another key, for example the Play Store version of the app you are testing. Android will not replace it, to protect its data:

adb uninstall com.example.app
adb install app.apk

Uninstalling deletes that app's data on the phone.

VERSION_DOWNGRADE

You are installing an older build over a newer one. Allow it with -d:

adb install -r -d app.apk

On recent Android versions this only works for debuggable builds. Otherwise uninstall first.

NO_MATCHING_ABIS

The APK contains native libraries for a processor the phone does not use, for example an x86_64-only build on an ARM phone, or an arm64-v8a-only build on a phone or TV that runs 32-bit Android. Check what the phone supports:

adb shell getprop ro.product.cpu.abilist

Then build or download the matching variant, or a universal APK.

USER_RESTRICTED

The phone refused the install. On Xiaomi, Redmi and POCO, turn on Install via USB in Developer options and tap Install on the confirmation that appears on the phone. Details in Xiaomi USB debugging and security settings. Work profiles and parental controls can also block installs.

Split APKs and app bundles

Apps from Android App Bundles come as several APK files (a base and splits). Install them in one go:

adb install-multiple base.apk split_config.arm64_v8a.apk split_config.en.apk

An .aab file cannot be installed directly. Build APKs from it with bundletool first.

Play Protect blocks the install

Sometimes the install stops because Google Play Protect warns about an unknown app. Check the phone's screen and choose to install anyway only if you trust the APK.

Installing APKs from the browser

ADBKit's Install APK panel runs the same install on the phone and shows the exact result, including the failure code in plain words. Tick Replace existing app to update an installed app, which is the same as -r. It works over USB or over Wi-Fi with the ADBKit agent, and the APK goes straight from your computer to the phone.

More on installing in how to install an APK with ADB.