Android Studioからアプリを実機やAndroid Emulatorへインストールしようとしたとき、「INSTALL_FAILED_ALREADY_EXISTS」というエラーが表示されることがあります。
Installation failed with message INSTALL_FAILED_ALREADY_EXISTS
このエラーは、基本的に同じパッケージ名(applicationId)のアプリがすでに端末へインストールされている場合に発生します。
既存アプリをアンインストールするだけで解決することも多いですが、ADBコマンド、別ユーザーやWork Profile、Android Studio側の設定などが関係している場合もあります。
この記事では、「INSTALL_FAILED_ALREADY_EXISTS」が発生する主な原因と解決方法を順番に解説します。
INSTALL_FAILED_ALREADY_EXISTSとは
「INSTALL_FAILED_ALREADY_EXISTS」は、AndroidのPackage ManagerがAPKをインストールしようとした際、対象となるパッケージがすでに端末上に存在しているため、インストール処理を完了できなかったことを示すエラーです。
ADBを使ってAPKをインストールした場合には、次のようなメッセージが表示されることがあります。
adb: failed to install app-debug.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install package com.example.app without first uninstalling.]
ここで重要なのは、Androidではアプリ名ではなくパッケージ名(applicationId)によってアプリが識別されることです。
たとえば、端末に次のパッケージが存在しているとします。
com.example.myapp
新しくインストールしようとしているAPKのapplicationIdも同じ場合、インストール方法や既存アプリの状態によっては「INSTALL_FAILED_ALREADY_EXISTS」が発生します。
主な原因
1.同じアプリがすでにインストールされている
最も一般的な原因です。
以前Android Studioからインストールしたデバッグ版や、手動でインストールしたAPKが端末に残っている可能性があります。
2.ADBで通常インストールを実行している
ADBで次のようにインストールすると、既存パッケージがある場合に失敗することがあります。
adb install app-debug.apk
既存アプリを置き換える場合は、状況に応じて再インストール用オプションを使用します。
3.アプリを削除したつもりでも別ユーザーに残っている
Androidでは複数ユーザーやWork Profileを利用できます。
通常のホーム画面からアプリを削除しても、別ユーザー側にパッケージが残っているケースがあります。
4.同じapplicationIdを別アプリで使用している
プロジェクトをコピーして新しいアプリを作成した場合などに、元プロジェクトと同じapplicationIdが残っていることがあります。
android { defaultConfig { applicationId "com.example.myapp" } }
別アプリとしてインストールするのであれば、applicationIdを変更する必要があります。
解決方法1:端末から既存アプリをアンインストールする
最初に試したい方法です。
実機の場合は、端末の設定 → アプリから対象アプリを探し、アンインストールします。
Android Emulatorでも同様にアプリ一覧から削除できます。
削除後、Android Studioからもう一度Runを実行してください。
ポイント:ホーム画面からアイコンを消しただけでは、アプリがアンインストールされていない場合があります。端末の「設定 → アプリ」から確認すると確実です。
解決方法2:ADBで既存アプリを削除する
パッケージ名が分かっている場合は、ADBからアンインストールできます。
adb uninstall com.example.myapp
成功すると、通常は次のように表示されます。
Success
その後、Android Studioから再度アプリを実行するか、APKをインストールします。
adb install app-debug.apk
解決方法3:インストール済みパッケージを確認する
アプリが本当に残っているか分からない場合は、ADBで確認できます。
adb shell pm list packages
macOSやLinuxではgrepと組み合わせると探しやすくなります。
adb shell pm list packages | grep example
Windowsのコマンドプロンプトでは、findstrを利用できます。
adb shell pm list packages | findstr example
対象パッケージが表示された場合は、端末上に存在しています。
解決方法4:既存アプリを置き換えてインストールする
既存アプリを削除せずにAPKを再インストールしたい場合は、ADBの-rオプションを使用できます。
adb install -r app-debug.apk
-rは既存アプリを置き換えて再インストールするためのオプションです。通常はアプリデータを保持したまま更新します。
注意:既存アプリと新しいAPKの署名が異なる場合は、-rを指定しても更新できません。その場合は「INSTALL_FAILED_UPDATE_INCOMPATIBLE」など別のエラーになることがあります。
解決方法5:applicationIdを確認する
別のアプリとしてインストールしたい場合は、Gradle設定のapplicationIdを確認してください。
Groovy形式では、たとえば次のようになっています。
android { defaultConfig { applicationId "com.example.myapp" } }
Kotlin DSLでは次のように記述されます。
android { defaultConfig { applicationId = "com.example.myapp" } }
コピーしたプロジェクトを別アプリとして開発している場合などは、applicationIdが重複していないか確認してください。
解決方法6:複数ユーザーやWork Profileを確認する
通常のアンインストールで解決しない場合は、別ユーザーやWork Profileにアプリが残っている可能性があります。
ユーザー一覧は次のコマンドで確認できます。
adb shell pm list users
特定ユーザーにインストールされているパッケージを調査する場合は、Androidのバージョンや端末環境に応じてPackage Managerのコマンドを利用します。
会社支給端末などでは管理プロファイルによってアプリの削除やインストールが制限されていることもあるため、端末管理設定も確認してください。
解決方法7:Android StudioとADBを再起動する
パッケージを削除したにもかかわらずインストール状態がおかしい場合は、ADBを再起動してみます。
adb kill-server adb start-server
その後、端末の接続を確認します。
adb devices
実機またはEmulatorが正常に表示されたら、Android Studioから再度Runを実行します。
それでも解決しない場合
ここまでの方法で直らない場合は、次の点も確認してください。
- 正しい端末へAPKをインストールしているか
- 複数のEmulatorが起動していないか
- applicationIdが想定した値になっているか
- debug版とrelease版でapplicationIdが重複していないか
- productFlavorsで同じapplicationIdを使用していないか
- Work Profileや別ユーザーにアプリが残っていないか
デバッグ版とリリース版を同じ端末へ同時にインストールしたい場合は、デバッグ版にapplicationIdSuffixを設定する方法もあります。
buildTypes { debug { applicationIdSuffix ".debug" } }
これにより、たとえばリリース版がcom.example.myappなら、デバッグ版をcom.example.myapp.debugとして扱えるようになります。
まとめ
Android Studioの「INSTALL_FAILED_ALREADY_EXISTS」は、主に同じパッケージ名のアプリがすでに端末に存在しているときに発生するインストールエラーです。
まずは端末から既存アプリをアンインストールし、それでも解決しない場合は次の順番で確認すると効率的です。
- 既存アプリを端末からアンインストールする
adb uninstall パッケージ名を実行するadb shell pm list packagesで残っているパッケージを確認する- 必要なら
adb install -rで再インストールする - GradleのapplicationIdを確認する
- 複数ユーザーやWork Profileを確認する
- ADBを再起動する
特にプロジェクトをコピーして別アプリを作った場合や、デバッグ版とリリース版を使い分けている場合は、applicationIdの重複を確認すると原因を見つけやすくなります。
