Android Debug Bridgeを使用したアプリケーションのインストールでINSTALL_FAILED_VERSION_DOWNGRADEを無視する方法はありますか?


121

最新のAndroid 4.2では、低いバージョンのAPKをインストールしようとしたときに、インストール時にこのエラー状態が発生したようです。以前のバージョンのAndroidでは、単に古いAPKを経由でインストールできました adb install -r <link to APK>。デバッグのために、古いAPKを頻繁に再テストする必要があります。この-rフラグは、古いバージョンのAndroidの古いビルドを置き換えます。ここに無視する回避策はあり[INSTALL_FAILED_VERSION_DOWNGRADE]ますか?


つまり、新しいバージョンをアンインストールする以外に?
CommonsWare

正しい; -rフラグがこれを処理するだろうと思いました。
AaronMT、

5
この質問は、ビルドの番号が間違っている(多少間違っている)場合にも有効です。たとえば、開発ボックスからのv1.0は、ビルドサーバーからのv2.0よりも高いバージョンコードを持っています。
parkerfath 14年

回答:


288

最新バージョンのadbツールには、「ダウングレードを許可するフラグ」があり、adbヘルプには表示されませんが、デバイスの「pm」ヘルプには表示されます。だから使用: adb install -r -d <link to apk>


3
adb install -rd <apkfile>うまくいかなかったものを試してみました。versino(オプションを分離した状態)は正常に動作します。ありがとう!
MarSoft 2015年

1
そしてそれは今文書化されているようです!-r -dを使用する必要があるだけではなく、-rdは機能しません
plaisthos

たとえば、Waze 4.0.0.2をアンインストール(ダウングレード)してバージョン3.9.5.3をインストールするには:adb install -r -d Waze_3.9.5.3.apk。これにより、アプリのデータが失われることはありません。
Derek Gogol

12
Android 7(Nougat)以降、パッケージがデバッグ可能としてマークされていない限り、adb install -dは機能しなくなりました。android.googlesource.com/platform/frameworks/base/+/921dd75
Darpan

20

adb uninstall -k <package>古いAPK を試して使用してインストールすることができます。adb使用ガイドから:

  adb uninstall [-k] <package> - remove this app package from the device
                                 ('-k' means keep the data and cache directories)

私は自分のAPKで自分で試してみましたが、ほとんどのデータで機能するようです(RawContactsなどの一部のデータは保存されませんでした)


このコマンドは実際にはアンインストールを実行するのではなく、単に警告を表示するようです。これを実際に実行するコマンドはのようadb shell pm uninstall -k <package>です。
ポールランメルツマ2013

これは、adb -dが私と同じようにまだ文句を言う場合、ダウングレードにも役立ちます。
Pointer Null

14

デバイスでマルチアカウントを有効にしましたか(ADB経由でAPKをプッシュしましたか)?その場合は、すべてのアカウントでapkを削除する必要があります。アンインストールが完了したら、プッシュはOKです。


Titanium Backupによるバックアップの復元が機能しませんでした。新規インストールが機能しませんでした。APKまたはadbインストールを介したインストールが機能しませんでした。これは1.5時間かかりましたが、あなたの簡単なヒントでうまくいきました。ありがとう!
ベントラー2017

3

私の場合、それは私のプロジェクトに含まれているGoogle Play開発者サービスの古いバージョンでした。Android Studioを使用しています。SDKでアップデートを実行し、アップデートしたライブラリをインポートしましたが、そのエラーは解消しました。だから私の提案:プロジェクトで参照されている最新のライブラリに更新します。


1

以前にインストールしたバージョンのアプリをアンインストールしてみてください-

adb uninstall com.package.name

その後、アプリを再度インストール/実行します


0

バージョン番号が現在使用しているコピーよりも新しいコードの別のコピーからインストールした可能性があります。どちらの場合も、現在インストールされているコピーをアンインストールするか、[設定]> [アプリ]を開いてインストールされているアプリのバージョン番号を確認し、AndroidManifestでversionCodeを大きくします。


1
なぜこれは反対票が投じられたのですか?それは最良の答えではないかもしれませんが、これに不慣れな人にとっては実行可能な解決策(そしておそらく最も簡単な解決策)のようです!このような回答は、回答者だけでなく、後でこの質問にアクセスする読者にとっても重要なので、コメントを残してください。:-|
jedd.ahyoung 2014年

これはもちろんできることです。それはすでに明らかです。問題は、このチェックをスキップしてダウングレードを許可する方法があるかどうかです。そして答えはイエスです。この答えは基本的にノーと言っています。
tasomaniac 2017年

0

私も同じ問題に直面しました。デバイスからapkを削除するよりも簡単な以下の手順で解決できます-

1)端末でコマンド「adb logcat | grep -i version」を実行します

2)logcatの最後に表示される特定の行を探します-

"Downgrade detected: Update version code 5011  is older than current 9109"

3)現在のバージョン(たとえば9109)をコピーし、以下に示すようにAndroidManifest.xmlに貼り付けます-

android:versionCode="9109"

これでアプリケーションをクリーンアップして再構築すると、問題なく動作するはずです。


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.+'

-3

Xiaomiの問題に直面している人のために:

adb shell pm uninstall <package_name>

これは何の助けにもならず、このようにする必要がある理由を説明する必要があります。
Benyamin Limanto
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.