Android Emulator:インストールエラー:INSTALL_FAILED_VERSION_DOWNGRADE


142

現在、小さなAndroidアプリケーションをコンパイルしてテストしようとしています。

私はEclipseを使用しており、SDK 4.2(Api Level 17)がインストールされています。設定しました

<uses-sdk android:targetSdkVersion="17" android:minSdkVersion="8" />

別の値(つまり、17/17)も試しましたが。

私はGoogleAPI関数を使用していません。また、APIレベル8で使用できない関数も使用していません。少なくとも、その点に関してコンパイルエラーや警告は表示されません。

プロジェクトをコンパイルしてAndroid 2.2.1を実行している実際のデバイスで実行すると、アプリケーションは正常に実行されます。ただし、Android 4.2、Apiレベル17のエミュレーター(Android仮想デバイス)でアプリケーションを実行しようとすると、次のエラーが発生します。

[2012-12-10 21:10:29 - SoftKeyboard] Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
[2012-12-10 21:10:29 - SoftKeyboard] Please check logcat output for more details.
[2012-12-10 21:10:29 - SoftKeyboard] Launch canceled!

Logcatは空です。私は本当に手がかりがありません、このエラーが何を意味するのか...

回答:


353

これは、エミュレータに既にインストールされているアプリと同じpackageNameでアプリをインストールしようとしているが、インストールしようとしているアプリのversionCodeが小さい(バージョン番号の整数値)ことを意味します。

バージョン番号が現在使用しているコピーよりも新しいコードの別のコピーからインストールした可能性があります。どちらの場合も、次のいずれかです。

  • 現在インストールされているコピーをアンインストールします

  • または、スマートフォンの[設定]> [アプリケーションマネージャ]を開いて、インストールされているアプリのバージョン番号を確認<manifest android:versionCode し、AndroidManifestでより高くなるようにを増やします。

  • またはhttps://stackoverflow.com/a/13772620/632951


1
ありがとう!それはまさにそれでした-私は古いSDKのSoftkeyboardの例を試してみましたが、Softkeyboardの例はすでに(デフォルトでは?!)エミュレーターデバイスにインストールされているようです(ただし、それ以降の異なるバージョンでは)。アプリケーションの名前を変更した後、すべてが期待どおりに動作しました...
ndbd

2
@Alexander:-dフラグを含めるようにこの回答を更新できますか?
David Alves 14

8
アプリをアンインストールする必要はありません。フラグを使用する:-r -dこれらのフラグは、再インストールとダウングレードを意味します。
petrsyn '19

1
@petrsyn:これらのフラグをEclipseのどこに置くのですか?
バイオレットキリン

2
@VioletGiraffeそれはコマンドラインで使用されます:adb install -r -d Application.apk
petrsyn

61

-dadb installにフラグを追加することも検討できます。このエラーは無視する必要があります。

adb install -r -d abc.apk

8
文書化されていませんが、機能しているようです。-dとして個別に記述する必要があり、-rdと組み合わせて-rdが機能しなかったため。
mhsmith '19 / 03/14

3
それは今文書化されています:-d: allow version code downgrade。まだ分​​離する必要があります-r
wisbucky

1
ドキュメントから(2020): -d: allow version code downgrade (debuggable packages only)
Alex.K.

30

まず、エミュレータからアプリケーションをアンインストールします。

adb -e uninstall your.application.package.name

次に、アプリケーションを再度インストールしてください。


8
または、接続されている物理デバイスの場合adb -s DEVICESERIALNUMBER uninstall your.application.package.nameDEVICESERIALNUMBERを使用して見つけることができますadb devices -l
Joel Purra 2013年

アプリケーションをデバッグしたいだけなら、不要なステップのようです。
IgorGanapolsky

8

これは、バージョンコードを設定するためにXMLリソースを使用していたため、私のプロジェクトで起こっていました。

AndroidManifest.xml:
android:versionCode="@integer/app_version_code"

app.xml:
<integer name="app_version_code">64</integer>

これは、以前のバージョンのadbでは問題ではありませんでしたが、platform-toolsr16以降、これは適切な整数に解決されなくなりました。adb -rマニフェストでリテラルを使用して、再インストールを強制するか、問題を完全に回避することができます。

android:versionCode="64"

これは私にとって問題であり、versionCodeを適切に解決していないことに同意します。それを増やしても(例:65)、INSTALL_FAILED_VERSION_DOWNGRADEを回避できません
Stan Kurdziel

5

これは、Playストアから署名されたリリースAPKの上にデバッグ/署名されていないAPKをインストールしようとしたときに発生する可能性があります。

H:\>adb install -r "Signed.apk"
2909 KB/s (220439 bytes in 0.074s)
        pkg: /data/local/tmp/Signed.apk
Success

H:\>adb install -r "AppName.apk"
2753 KB/s (219954 bytes in 0.078s)
        pkg: /data/local/tmp/AppName.apk
Failure [INSTALL_FAILED_VERSION_DOWNGRADE]

これに対する解決策は、アンインストールしてからIDEから再インストールまたは再実行することです。


私は反対投票者ではありませんが、これが唯一の理由ではないのではないかと思います。
Viccari 2015

3

INSTALL_FAILED_VERSION_DOWNGRADE

すべてのAndroidアプリにはパッケージ名があります。パッケージ名は、デバイス上のアプリを一意に識別します。デバイスに既にインストールされているアプリと同じpackageNameの場合、このエラーはを表示しています

  1. 最初にデバイスからアプリケーションをアンインストールしてから、新しいアプリケーションをインストールできます。
  2. 新しいバージョンがリリースされるたびに、番号を1ずつ増やすことができます。

1
あなたは正しいですが、バージョンコードはリリースごとに増やす必要があります。ただし、リリース前の開発時ではありません。また、すでにインストールされているapkの上に、同じversionCodeのapkを(アンインストールせずに)インストールできるはずです。私の直感は、問題はリソースがversionCodeを参照していたことです-参照:stackoverflow.com/a/14946938/431296
Stan Kurdziel

3

マシュマロでは、このエラーが発生しました、

Installation error: INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE
Please check logcat output for more details.
Launch canceled!

解決策を探して、私は検索してここに来ました。アプリを削除しましたが、Nexus 6ではまだこの問題があります。後でそれを見つけました、

Settings > Apps > [My app name] have to removed for all user. 

2

... \ android-22 \ android \ content \ pm \ PackageManager.javaのsdk srcコードによると

/**
 * Installation return code: this is passed to the {@link IPackageInstallObserver} by
 * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
 * the new package has an older version code than the currently installed package.
 * @hide
 */
public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25;

新しいパッケージに現在インストールされているパッケージよりも古いバージョンのコードがある場合。


ただし、同じバージョンのコードでは発生しないはずです
Stan Kurdziel

2

私は同じ問題を抱えていました。エミュレーターではなく Androidデバイスで実行しようとすると、エラーが発生しました。

sudo ionic run android 

実行することでこれを修正できます

adb uninstall com.mypackage.name

2

あなたはこれを試すことができます: adb install -r -d -f your_Apk_path


1

これは、Android StudioアプリをEclipseにインポートしたときに起こりました。

Android Studioプロジェクトからインポートするときにandoridmanifest.xmlファイルを少し変更する必要があることがわかりました。新しいテストプロジェクトを作成し、見出しにコピーして一致させました。出来上がり、問題は解決しました。


1

このエラーは、複数の種類のgfxファイルを含む私のandroidプロジェクトに表示されます。最後に、マニフェストファイルの変更は受け入れられませんでした。

Androidデバイスに関する知識がないため、テストデバイスに2人目のユーザーがいることを忘れています。このユーザーには私のアプリのバージョンがインストールされているため、このユーザーアカウントのアプリも削除する必要があります。


0

私を殺し続けたのは、このアプリが自分のゲストアカウントにインストールされていることを知らなかったということです(他のアカウント用にアンインストールしましたが...)。

アプリマネージャーでアプリを検索し、すべてのユーザーに対して[アンインストール]をクリックしました

ここに画像の説明を入力してください


0

以前のAPKをアンインストールして、更新されたAPKをインストールするだけです


0

実際のアプリバージョンの問題ではなく、Google Play開発者サービスの依存関係に問題がある可能性があります。

時々、それはそうではないケースです:

a)アプリの既存のバージョンがインストールされているか、新しいかどうかb)デバイスの別のユーザーアカウントにインストールされているアプリの既存のバージョンがある

したがって、エラーメッセージは単なる偽です。

私の場合、私は持っていました:

implementation 'com.google.android.gms:play-services-maps:16.0.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.gms:play-services-gcm:16.0.0'

しかし、私が試したとき

implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-gcm:17.0.0'

androidXにまだアップグレードしておらず、アップグレードする準備ができていなかったため、androidX関連のエラーが発生しました。最新の16.xyバージョンを使用しても機能することがわかり、エラーメッセージが表示されなくなりました。さらに、準備ができたらandroidXにアップグレードするまで待つことができました。

implementation 'com.google.android.gms:play-services-maps:16.+'
implementation 'com.google.android.gms:play-services-location:16.+'
implementation 'com.google.android.gms:play-services-gcm:16.+'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.