TL; DR
Dieses Problem tritt auf, wenn eine App versucht, eine vorhandene Berechtigung mit einer Fehlermeldung erneut zu deklarieren INSTALL_FAILED_DUPLICATE_PERMISSION
. Betroffen waren hauptsächlich Apps, die auf Adobe AIR (Paketpräfix mit com.air
) basieren . Die Hauptursache ist die unterschiedliche Code-Implementierung in Lollipop 5.0 beim Überprüfen der Signatur eines Zertifikats, die zum Signieren einer App verwendet wird. Fahren Sie für die Lösung einfach mit dem Teil "Lösung" fort.
Update : Google hat dieses Problem in Lollipop 5.0.1 behoben.
Technische Details
Auszüge aus dem Issue Tracker der Android L Developer Preview, die mit einem Eintrag im AOSP Issue Tracker verknüpft sind.
Beitrag Nr. 4 :
logcat teilt mir mit, dass während der Installation ein Konflikt mit dem erneuten Deklarieren von Berechtigungen vorliegt (in meinem Fall versucht Amazon, getui.permission.GetuiService, das bereits im Besitz von Camera 360 ist, neu zu deklarieren).
LogCat von Beitrag Nr. 12 :
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
Auszüge aus dem AOSP Issue Tracker ,
Beitrag # 4
In API19 umschließt das neue X509CertImpl (encCert) das Zertifikat (das bereits analysiert wurde und für die SHA1-Berechnung bereit ist), während in API 21 das Zertifikat als Bytestream weitergeleitet, erneut analysiert und von einer Zertifikatfactory verarbeitet wird. Welche Fabrik das ist, hängt vom Kontext ab. Bei den L-Geräten, auf denen ich getestet habe, erstellt die Fabrik ein OpenSSLX509-Zertifikat. Leider enthält unser Zertifikat etwas, mit dem openssl Probleme hat, und der Fingerabdruck ändert sich während der openssl-Verarbeitung. Ich kann dies auch mit dem openssl-Tool reproduzieren, wenn ich unser Zertifikat in ein anderes Format (z. B. PEM) konvertiere.
Wenn der SHA1 direkt auf 'encCert.getEncoded ()' berechnet würde, wäre dies in beiden Fällen korrekt.
Lösung
Update : Ab dem 04.12.2014 hat Google dieses Problem in Lollipop 5.0.1 behoben. Für diejenigen, die keine Problemumgehung durchgeführt haben, um die App neu zu installieren, können Sie das Lollipop 5.0.1-Image flashen, wenn es bereit ist / auf den OTA warten.
Beitrag Nr. 20, Nr. 21
Sieht so aus, als ob dies in 5.0.1 behoben wurde:
https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
Status: Freigegeben
Anmerkung des Committers
Stellen Sie Apps mit fehlerhaften Zertifikaten wieder her.
In Lollipop gab es ein Zeitfenster, in dem wir Zertifikate beibehalten haben, nachdem sie einen Dekodierungs- / Kodierungszyklus durchlaufen hatten. Die gut geschriebene OpenSSL-Bibliothek war beim Decodieren liberal (so dass leicht fehlerhafte Zertifikate analysiert werden konnten), beim Codieren jedoch streng, sodass wir unterschiedliche Bytes für effektiv dasselbe Zertifikat erhielten.
Eine verwandte libcore-Änderung (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) gibt jetzt die ursprünglichen Bytes wörtlich zurück und behebt sowohl Installationen als auch Installationen vor Lollipop nach dieser Änderung.
Durch diese Änderung werden alle Apps wiederhergestellt, die während des oben beschriebenen Zeitfensters installiert wurden, indem einmalig überprüft wird, ob die Zertifikate tatsächlich gleich sind.
Weitere Lösungsvorschläge finden Sie in der älteren Version .
adb
, konnte sie jedoch nicht neu installieren. Beachten Sie, dass die App, die ich installieren möchte, dasair.com
Präfix als Paketname hat. Es scheint, dass dies eher ein Problem zwischen Google, Adobe Air und den App-Entwicklern ist. Bis mindestens einer von ihnen das Problem behoben hat, kann die App nicht installiert werden. Ich habe das Problem markiert, um ein Update von Google zu erhalten.