Androidアプリのアップデートテストでエラー

Android Studioで作ったapkファイルを
ターミナル経由でインストールしようとした時に
こんなエラーが出ました。

「adb: failed to install app-release.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package (アプリのパッケージ名) signatures do not match the previously installed version; ignoring!]


その時の、対処方法メモです!

解決方法!

こちらのリンク
<解決方法1>
<解決方法2>
で対処できました!

>> ストアに出ているアプリのアップデートテストをしようとしたら、つまった…困った…!【解決済み】iOS、Android

このページに書かれている事について、
もっと具体的な内容や対象方法を追記していきたいと思います!

※2018年10月にテストした時には、うまくいったのは<解決方法2>のみだったので、場合によってはどちらか片方だけしか解決できないかもしれません。

どういうエラーなの?

エラー内容を翻訳すると、こうなっています。

【翻訳】「adb:app-release.apkのインストールに失敗しました: 失敗[INSTALL_FAILED_UPDATE_INCOMPATIBLE: パッケージ(アプリケーションのパッケージ名)の署名が以前にインストールされたバージョンと一致しません。 
(ボタン)無視する!]

「すでにインストールしているアプリ」の署名と、
「これからインストールしようとしているアプリ」の署名
異なっていることが原因のようです。

署名?

「署名? どこで設定してたっけ…?」
と思ったのですが…。

まず、Android Studioでapkファイルを作る際に、
Build Type」というものを選択していると思います。

Android Studio > Build > Generate Signed Bundle / APK…
そこから進めると、以下のようなメッセージが表示され、
この真ん中あたりで「Build Type」を選択しています。

このapkの「Build Type」が違うと、
作られるアプリの署名が違うものになってしまうようです。

署名を同じにする方法

そのため、ここでいう署名を同じにするためには、
この「Build Type」を同じにすれば良いようです。

例えば、
入れてあるアプリのBuild Typeがdebugなら、
次に入れるアプリのBuild Typeもdebugに。

入れてあるアプリのBuild Typeがreleaseなら、
次に入れるアプリのBuild Typeもrelease
すると署名が同じになるようです。

ストアのアプリはreleaseのはず

例えば、端末にすでにいれてあるアプリが
ストアからダウンロードしてきたアプリの場合、
Build Typeはreleaseになっているはずです。

その場合は、もう一度apkファイルを作成し直し、
その際にBuild Typeをreleaseにして作り直せば署名が同じになるはずです。

DeployGateなどはdebugかも

また、例えばDeployGateなどで
debug用のapkファイルを端末にインストールしていた場合。

その場合は、もう一度apkファイルを作成し直し、
その際にBuild Typeをdebugにして作り直せば署名が同じになります。

(でも、DeployGateはBuild Typeをreleaseにした状態でもアップできるので、その場合はBuild Typeをreleaseにしてみてください)

releaseかdebugかわからない!

インストール済みアプリのBuild Typeが
releaseなのかdebugなのかわからない…という場合は、
両方試してみるといいかと思います。

Build Typeは二種類しかないので、それほど手間はかからないのではと思います!

ターミナルからapkをうまく入れられない時

ターミナルからapkファイルを入れる際には、
私はこんなコマンドでアプリを入れました。

adb install -r ○○○○○.apk

この時に、「-r」をつけ忘れるとうまくいかないこともあるということに注意です。

これは既に同じ署名のapkファイルがインストールされている場合は
「-r」をつけないとエラーになることが原因らしいです。
「-r」をつけると上書きできるようになるみたいです。

(参考)Macのターミナルコマンド、簡単・基本の使い方
スポンサーリンク