Android: INSTALL_FAILED_UPDATE_INCOMPATIBLE
An app with the same package name is already installed but signed with a different key. Android will not let one signing identity replace another, so a debug build cannot overwrite a release build or a Play Store install of the same app.
Quick fix
Read the commands before running them. Anything that restarts a service, deletes data or changes permissions should be tried on a non-production system first.
# Which package is in the way, and for which user?
adb shell pm list packages -f com.example.app
adb shell pm list users
# Remove it, including copies for secondary or work profiles
adb uninstall com.example.app
adb shell pm uninstall --user 0 com.example.app
# Compare the signatures before assuming
apksigner verify --print-certs app-release.apk | grep SHA-256
# Play App Signing means locally built release APKs never match the
# store build: use a distinct applicationIdSuffix for debug variants.
android { buildTypes { debug { applicationIdSuffix ".debug" } } }
How to diagnose Mobile errors
Mobile build errors are overwhelmingly toolchain and dependency version conflicts rather than code problems. Android builds fail on Gradle, JDK and Android Gradle Plugin version combinations; iOS builds fail on code signing, provisioning profiles and CocoaPods lockfile drift. The productive instinct is to check version compatibility matrices before reading stack traces.
If the quick fix above does not resolve it, work through these steps. They apply to this whole class of error, not just to this one message, which is usually what saves the time.
- Run the build with full output:
./gradlew assembleDebug --stacktrace --info. Gradle's default output hides the actual failing task. - Verify the JDK the build is using (
./gradlew -version), not the one on your PATH. Android Gradle Plugin has strict JDK requirements. - For CocoaPods, run
pod install, notpod update, after pulling changes, and open the.xcworkspacerather than the.xcodeproj. - For code signing, check the provisioning profile's expiry, bundle identifier and device list in Xcode's Signing & Capabilities tab before touching certificates.
- Clear caches only as a last resort and one at a time (
./gradlew clean,rm -rf ~/Library/Developer/Xcode/DerivedData,watchman watch-del-all), so you learn which one mattered.
Tools worth reaching for
./gradlew --stacktrace --infopod installxcodebuild -showBuildSettingsflutter doctor -vadb logcat
Authoritative references
Primary documentation for this error, worth reading before applying any fix in production.
Related Mobile errors
- Android Studio: Gradle sync failedAndroid Studio cannot sync the project with Gradle files. Usually caused by SDK version…
- Android: DEX method limit exceeded (64k)The app has more than 65,536 methods across all DEX files. Android's Dalvik bytecode format…
- Android: Duplicate class found in modulesTwo dependencies bring in the same class, usually because one ships a bundled copy of a…
- Android: Manifest merger failed with multiple errors, see logsGradle merges your manifest with every library manifest, and two of them disagree: usually a…
- Android: SDK location not found. Define a valid SDK locationGradle looks for sdk.dir in local.properties, then for the ANDROID_HOME environment variable…
- CocoaPods: The sandbox is not in sync with the Podfile.lockInstalled pods don't match the manifest lockfile. Common after switching git branches.
- Expo EAS: build failed (Gradle/Xcode step exited with non-zero code)EAS Build failed during the native compile step. The wrapper message is generic; the real…
- Flutter: Android toolchain - develop for Android devicesFlutter cannot find Android SDK or licences not accepted.
Browse other categories
- HTTP 494xx client errors, 5xx server errors, redirects, headers and protocol problems.
- JavaScript 42npm resolution, async pitfalls, hydration, memory limits and runtime type…
- Database 41Connections, deadlocks, constraints, replication and memory limits.
- AI 35Rate limits, context windows, GPU memory and model-serving failures.
- Network 35Refused connections, timeouts, resets, MTU problems and port exhaustion.
- Python 35Imports, virtual environments, encoding, concurrency and dependency conflicts.
- Kubernetes 34CrashLoopBackOff, ImagePullBackOff, OOMKilled, RBAC, scheduling and storage.
- Docker 27Daemon connectivity, disk space, image pulls, ports and architecture mismatches.
- System 26Disk space, systemd units, file descriptors, OOM killer and scheduled jobs.
- Cloud 25IAM permissions, quotas, service limits and credential failures.
- Security 25JWT validation, CSRF, OAuth grants, SELinux, SSH host keys and CSP.
- TLS 24Untrusted authorities, expiry, hostname mismatch, chains and cipher negotiation.
Something missing or wrong?
This entry is maintained by hand. If the fix is out of date, incomplete, or you have a better one, email a correction and it will be reviewed.