ADB経由でAndroidアプリ(apkファイル。以下、アプリ略す)をAndroid端末にインストールしていたら以下のようなエラーが出ました。
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=アプリのパッケージ名.permission.C2D_MESSAGE pkg=アプリのパッケージ名]
ネットの記事を見る限りでは、AndroidManifest.xmlファイルの「アプリのパッケージ名」を「${applicationId}」に置き換える方法が解説されていますが、実はその方法では解決しないことがありました。
今回は、「INSTALL_FAILED_DUPLICATE_PERMISSION」エラーが出たときの2つの解消方法を解説します。
解消方法1・パッケージ名の重複を修正する
おそらくネット上で「ADB INSTALL_FAILED_DUPLICATE_PERMISSION」で検索すると、次のような解決方法が沢山出てくるかと思います。
■パッケージ名の部分を「${applicationId}」に置き換える。
以下のようなエラーが出たら、
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=アプリのパッケージ名.permission.C2D_MESSAGE pkg=アプリのパッケージ名]
エラーの内容から、「同じアプリを2つ以上インストールできませんよ」と言っているようです。
このようなときは、AndroidManifest.xmlのパッケージ部分(以下の例だと「your.pkg」の部分)を
${applicationId}に置き換えることで解決します。
■変更前
<permission
android:name="your.pkg.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="your.pkg.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
■変更後
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
しかし、私の場合は解決しませんでした。
解決しない場合は、次の解消方法で解決する可能性があります。
解決方法2・ゲストユーザがアプリをインストールしていた
私が使っていた端末は、ASUSの「ZenFone_2_ZE551ML」ですが、この端末は、実はMacやWindowsのように複数のアカウント(オーナーユーザ、ゲストユーザのような感じ)を作って使うことができます。
私は、ADB経由でアプリをインストールするとき、オーナーユーザとして端末を使っていたのですが、なぜかゲストユーザ側にアプリがインストールされていました。
つまり以下の状態になっていました
・オーナーユーザ
アプリのインストールなし
・ゲストユーザ
アプリのインストールあり
ゲストユーザ側にアプリが存在していたため、「INSTALL_FAILED_DUPLICATE_PERMISSION」エラーが発生したのです。
よって、ゲストユーザ側にあるアプリを消したら無事にアプリをインストールできるようになりました。
意外に、はまりました。
この不具合のために無駄にした時間は2時間。
まとめ
まさか、1つの端末に自分以外のユーザがアプリをインストールしているとは思いませんでした。もし、エラーメッセージの通りに解消しているのに、うまく動かなかったら自分以外のユーザの存在を疑っても良いかもしれません。
1人では解決できない問題が発生したら詳しい人に相談してみよう【タイムチケット】