TL; DR
ปัญหานี้เกิดขึ้นเมื่อแอปพยายามที่จะ INSTALL_FAILED_DUPLICATE_PERMISSION
re-ประกาศสิทธิ์ที่มีอยู่ด้วยข้อผิดพลาด ส่วนใหญ่ได้รับผลกระทบแอพที่ใช้ Adobe AIR (ส่วนนำหน้าของแพ็คเกจด้วยcom.air
) สาเหตุหลักคือการดำเนินงานที่แตกต่างกันในรหัสอมยิ้ม 5.0 เมื่อตรวจสอบลายเซ็นของใบรับรองที่ใช้ในการลงชื่อเข้าใช้แอป สำหรับวิธีการแก้ปัญหาเพียงแค่ข้ามส่วน "โซลูชัน"
อัปเดต : Google ได้แก้ไขปัญหานี้ใน Lollipop 5.0.1
รายละเอียดทางเทคนิค
ข้อความที่ตัดตอนมาจากAndroid Developer L ปัญหาดูตัวอย่างติดตามซึ่งจะเชื่อมโยงจากรายการใน AOSP ติดตามปัญหา ,
โพสต์ # 4 :
logcat บอกฉันว่ามีข้อขัดแย้งกับสิทธิ์การเผยแพร่ซ้ำระหว่างการติดตั้ง (ในกรณีของฉัน Amazon กำลังพยายามเรียกใช้ getui.permission.GetuiService อีกครั้งซึ่งเป็นเจ้าของโดย Camera 360)
LogCat ของโพสต์ # 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
ข้อความที่ตัดตอนมาจากAOSP ติดตามปัญหา ,
โพสต์ # 4
ใน API19 X509CertImpl ใหม่ (encCert) จะห่อใบรับรอง (ซึ่งถูกวิเคราะห์แล้วและพร้อมสำหรับการคำนวณ SHA1) ในขณะที่ใน API 21 ใบรับรองจะถูกส่งต่อเป็นสตรีมไบต์แยกวิเคราะห์อีกครั้งและประมวลผลโดยโรงงานใบรับรอง โรงงานใดที่ขึ้นอยู่กับบริบท ในกรณีของอุปกรณ์ L ที่ฉันทดสอบโรงงานจะสร้างใบรับรอง OpenSSLX509 น่าเสียดายที่มีบางสิ่งในใบรับรองของเราที่ openssl มีปัญหาและการเปลี่ยนลายนิ้วมือในระหว่างการประมวลผล openssl ฉันสามารถทำซ้ำสิ่งนี้ด้วยเครื่องมือ openssl เมื่อฉันแปลงใบรับรองของเราเป็นรูปแบบอื่น (เช่น PEM)
หาก SHA1 จะถูกคำนวณโดยตรงใน 'encCert.getEncoded ()' มันจะถูกต้องในทั้งสองกรณี
สารละลาย
อัปเดต : ตั้งแต่วันที่ 2014-12-04 Google ได้แก้ไขปัญหานี้ใน Lollipop 5.0.1 สำหรับผู้ที่ไม่มีวิธีแก้ปัญหาใด ๆ ที่พยายามติดตั้งแอพใหม่คุณสามารถแฟลช Lollipop 5.0.1 อิมเมจเมื่อพร้อม / รอ OTA
โพสต์ # 20, # 21
ดูเหมือนว่านี่จะได้รับการแก้ไขใน 5.0.1:
https://android.googlesource.com/platform/libcore/+/6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/platform/frameworks/base/+/32a22c44b8351c1cccd3a1f9c47a33469d9378e0
สถานะ: เปิดตัว
ผู้ส่งข้อความ
กู้คืนแอปด้วยใบรับรองที่มีรูปแบบไม่ถูกต้อง
มีหน้าต่างเวลาใน Lollipop ที่เรายืนยันใบรับรองหลังจากผ่านวงจรถอดรหัส / เข้ารหัส ไลบรารี OpenSSL ที่เขียนอย่างดีนั้นมีความอิสระเมื่อถอดรหัส (อนุญาตให้แยก certs ที่มีรูปแบบผิดปกติเล็กน้อย) แต่ก็เข้มงวดในการเข้ารหัสทำให้เรามีไบต์ที่แตกต่างกันสำหรับใบรับรองเดียวกัน
การเปลี่ยนแปลง libcore ที่เกี่ยวข้อง (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) จะส่งคืนไบต์คำต่อคำดั้งเดิมโดยแก้ไขการติดตั้งก่อนอมยิ้มและติดตั้งหลังจากการเปลี่ยนแปลงนั้น
การเปลี่ยนแปลงนี้จะกู้คืนแอปใด ๆ ที่ติดตั้งในช่วงเวลาที่อธิบายไว้ข้างต้นโดยทำการตรวจสอบเพียงครั้งเดียวเพื่อดูว่า certs นั้นมีประสิทธิภาพเท่าเทียมกันหรือไม่
โปรดอ้างอิงการแก้ไขที่เก่ากว่าสำหรับวิธีแก้ปัญหาที่แนะนำอื่น ๆ