更新されたAPKを手動でインストールすると、「署名が以前にインストールされたバージョンと一致しません」で失敗します


81

数人の友達と共有するためのばかげたアプリを作成しました。アプリストアに載せる必要はありません。

私は最初のapk(署名された)ものを作成し、それをWebサーバーにアップロードしましたが、すべてうまくいきました。

小さな問題が発生しました。修正し、再構築し、同じキーストアで署名して、再度アップロードしました。新しいからインストールできないようですapk。デバッガーは私に言います:

signatures do not match the previously installed version

そこで、アプリドロワーを開いて[アンインストール]ボタンにドラッグして、古いバージョンをアンインストールしました。「設定->アプリ」を開くと、どこにも表示されなくなりました。デバイスにアプリの痕跡が見当たりません。

それでも、上記のエラーメッセージが表示されます。

一部の情報がデバイスのどこかに残っている可能性はありますか?それを確認する方法はありますか?


回答:


169

はいどういうわけか古いアプリケーションが100%削除されていないか、そのデータが削除されていない場合は可能です。

試してみてください:

adb uninstall "com.yourapp.yourapp"

「com.yourapp.yourapp」の代わりに何を入れるべきか正確にわからない場合は、Android Studioを開き、デバイスに接続した状態でアプリを実行してから、デバッグウィンドウを確認します。

それは言う:

 Waiting for device.
 Target device: samsung-sm_t531-xxxxxxxxx
 Uploading file
 local path: C:\Users\myapp\app\build\outputs\apk\myapp.apk
 remote path: /data/local/tmp/com.myapp.myapp
 Installing com.myapp.myapp
 DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.myapp.myapp"
 pkg: /data/local/tmp/com.myapp.myapp
 Success

この場合のcom.myapp.myappは、アンインストールに使用する必要のあるパッケージの名前です。


1
これは確かに問題でした。AndroidStudioから直接電話に一度デプロイしました。このバージョンは適切に削除されていないようです。最後の質問:AndroidStudioからこれを行う方法はありますか?または、そこから直接adbを実行しますか?
exhuma 2015

はい、Androidアプリからシェルコマンドを実行する方法を学んでみてください。:このスレッドは良い出発点となるstackoverflow.com/questions/20932102/...
エサン

ダメダメダメ。アプリからコマンドを実行していません;)adb「AndroidStudio」から直接実行できるかどうか疑問に思いました。
exhuma 2015

2
これは開発者にとっては良いことです。しかし、どのエンドユーザーにとっても、同じ問題が発生した場合は、次の手順に従う必要があります。新しいバージョンのAndroidでは、何らかの方法でアンインストールすると、その特定のユーザーに対してのみアンインストールされます。答えは、[設定]> [アプリ]> [特定のアプリ内に移動]に移動し、右上の[...]メニュー項目から[すべてのユーザーに対してアンインストール]を選択することです。
AnkitRox 2016

パッケージ名を変更したので、私に起こりました。アンインストールでうまく
いきました

23

私は同じ問題を抱えていましたが、adb uninstall解決策はうまくいきませんでした。

うまくいったのは

  • デバイスで、[設定]-> [アプリ]に移動します
  • アプリを選択し、メニューで[すべてのユーザーに対してアンインストール]を選択します

以前にアプリをアンインストールしたことがあったとしても、それはまだリストにありました。


はい。これは、デバイスに複数のユーザーアカウントがあり、アプリが複数にインストールされている場合にも発生する可能性があります。1人のユーザーに対してアンインストールすると、そのアカウントからのみ「リンク解除」されます。しかし、それはディスク上に残ります。各ユーザーがアンインストールした場合にのみ、完全に削除されます。
exhuma 2016

1
「すべてのユーザーのアンインストール」は完全に機能しました。他のすべてのユーザーを削除)))
Inoy 2017年

エミュレーターピクセル
JuliePixie20年

6

私にとって、アプリが配布されることを意図している場合、adb解決策はありません。友人にandroidsdkを自分のマシンにインストールするように依頼することはできません。

ここに移動する方法は、を編集し、タグ(ルート要素)AndroidManifest.xmlandroid:versionCode属性をインクリメントすることです<manifest>

これにより、インストールされているアプリケーションが更新されます


1
この問題は、実際には、開発中にandroidstudioを介してデバイスにアプリをインストールしたことが原因で発生しました。新しいAPKを再構築して配布することは、私以外のすべての人にとってまったく問題ありませんでした。したがって、adbソリューションは問題ありませんでした。
exhuma 2016年

4

接続テストを実施しながら、あなたがこれを見ている場合は、含まれていることを確認してください.TESTを>設定が- ADB経由でアンインストール時にアプリを経由してアンインストールするためにはありませんテストパッケージを取り除きます

adb uninstall your.broken.package.test

経由でアンインストールする場合

adb uninstall your.broken.package

テストパッケージはまだそこにあります。これは、gradleコマンドラインを使用しているときに気付いたものであり、AndroidStudio内でこの問題に遭遇したことはありません。


3

携帯電話またはエミュレーターから古いアプリをアンインストールして、もう一度実行してみてください。


これは答えではありません。SOは、彼はすでにこれを試したが、問題はまだ残っていると述べた。
BenRoob 2017

1

証明書に署名しながらリリースをインストールしようとすると、そのエラーが発生しました。

:app GradleタスクuninstallReleaseで修正してから、installReleaseを再度インストールします


0

この質問に来るUnityユーザーにとって、最良の答えは確かに@Ehsanによる上記のものです。

adb uninstall "com.yourapp.yourapp"

以前のバージョンをAndroidデバイスにインストールし、Development BuildUnity>ビルド設定で選択したため、APKは別の署名を使用していました。Android GUIを介してインストールした場合、実際にはすべてが削除されるわけではないため、ADBを使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.