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
| Code | Meaning | Fix |
|---|---|---|
INSTALL_FAILED_ALREADY_EXISTS | The app is already installed | adb install -r app.apk |
INSTALL_FAILED_VERSION_DOWNGRADE | Lower version code than the installed app | adb install -r -d app.apk, or uninstall first |
INSTALL_FAILED_UPDATE_INCOMPATIBLE | Same package, different signing key | Uninstall the installed app first |
INSTALL_PARSE_FAILED_NO_CERTIFICATES | The APK is not signed | Sign it, or build a signed debug/release APK |
INSTALL_FAILED_NO_MATCHING_ABIS | Native code for the wrong CPU type | Use an APK built for the phone's ABI |
INSTALL_FAILED_OLDER_SDK | The phone's Android is too old | Use a build with a lower minSdkVersion |
INSTALL_FAILED_TEST_ONLY | APK marked testOnly | adb install -t app.apk |
INSTALL_FAILED_INSUFFICIENT_STORAGE | Not enough free space | Free up storage |
INSTALL_FAILED_USER_RESTRICTED | The phone blocked the install | Allow installs from USB, confirm on the phone |
INSTALL_FAILED_MISSING_SPLIT | Part of a split APK is missing | Install 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.apkUninstalling 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.apkOn 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.abilistThen 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.apkAn .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.