TL; DR
この問題は、アプリが既存の権限をエラーメッセージとともに再宣言しようとすると発生しますINSTALL_FAILED_DUPLICATE_PERMISSION
。これは主に、Adobe AIR(パッケージの接頭辞がcom.air
)に基づくアプリに影響しました。主な原因は、アプリケーションに署名するために使用される証明書の署名を検証するときロリポップ5.0で異なるコード実装です。ソリューションについては、「ソリューション」の部分にスキップしてください。
更新:GoogleはLollipop 5.0.1でこの問題を修正しました。
技術的な詳細
以下からの抜粋のAndroid Lの開発者プレビューの問題追跡からリンクされているAOSPの問題追跡上のエントリ、
投稿#4:
logcatは、インストール中に権限の再宣言との競合があることを私に知らせます(私の場合、Amazonは、すでにCamera 360が所有しているgetui.permission.GetuiServiceを再宣言しようとしています)
投稿#12のLogCat:
10-25 08:06:37.805 749 824 W PackageManager: Package com.tencent.mm attempting to redeclare permission com.google.android.c2dm.permission.SEND already owned by com.google.android.gsf
10-25 08:06:37.926 4812 4812 D Finsky : [1] PackageInstallerImpl.cancelSession: Canceling session 121130466 for com.tencent.mm
10-25 08:06:37.926 4812 4812 E Finsky : [1] PackageInstallerImpl.handleCommitCallback: Error -505 while installing com.tencent.mm: INSTALL_FAILED_DUPLICATE_PERMISSION: Package com.tencent.mm attempting to redeclare permission com.google.android.c2dm.permission.SEND already owned by com.google.android.gsf
10-25 08:06:37.926 4812 4812 W Finsky : [1] 4.installFailed: Install failure of com.tencent.mm: -505 null
10-25 08:06:37.933 749 749 D ZenLog : intercepted: 0|com.android.vending|-973170826|null|10017,!priority
10-25 08:06:37.933 749 749 V NotificationService: pkg=com.android.vending canInterrupt=false intercept=true
10-25 08:06:37.964 4812 4812 D Finsky : [1] InstallerTask.cancelCleanup: Cancel running installation of com.tencent.mm
AOSP Issue Trackerからの抜粋、
投稿#4
API19では、新しいX509CertImpl(encCert)が証明書をラップします(これは既に解析され、SHA1計算の準備ができています)、API 21では、証明書はバイトストリームとして転送され、再度解析され、証明書ファクトリによって処理されます。どのファクトリかは、コンテキストに依存します。私がテストしたLデバイスの場合、ファクトリはOpenSSLX509Certificateを作成します。残念ながら、opensslで問題が発生し、openssl処理中に指紋が変更される証明書が存在します。証明書を他の形式(PEMなど)に変換すると、opensslツールでもこれを再現できます。
SHA1が「encCert.getEncoded()」で直接計算される場合は、どちらの場合も正しいです。
解決
更新:2014-12-04現在、GoogleはLollipop 5.0.1でこの問題を修正しています。アプリを再インストールしようとして回避策を実行しなかった場合は、OTAの準備ができている/待機しているときにLollipop 5.0.1イメージをフラッシュできます。
投稿#20、#21
これは5.0.1で修正されたようです。
https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
ステータス:リリース済み
コミッターのメモ
不正な形式の証明書でアプリを回復します。
Lollipopには、デコード/エンコードサイクルを通過した後に証明書を永続化する時間枠がありました。適切に作成されたOpenSSLライブラリは、デコード時には寛大でした(わずかに形式が正しくない証明書を解析できるようにしました)。
関連するlibcoreの変更(0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b)は、元のバイトをそのまま返し、Lollipop以前のインストールとその変更後のインストールの両方を修正します。
この変更により、証明書が実質的に等しいかどうかを確認するための1回限りのチェックを実行することにより、上記の期間中にインストールされたすべてのアプリが回復されます。
他の推奨される解決策については、古いリビジョンを参照してください。