TL; DR
Sự cố này xảy ra khi một ứng dụng đang cố gắng khai báo lại quyền hiện có, với thông báo lỗi INSTALL_FAILED_DUPLICATE_PERMISSION
. Nó chủ yếu ảnh hưởng đến các ứng dụng dựa trên Adobe AIR (tiền tố gói với com.air
). Nguyên nhân chính là do việc triển khai mã khác nhau trong Lollipop 5.0 khi xác minh chữ ký của chứng chỉ được sử dụng để ký ứng dụng. Đối với giải pháp, chỉ cần bỏ qua phần "Giải pháp".
Cập nhật : Google đã khắc phục sự cố này trên Lollipop 5.0.1.
Chi tiết kỹ thuật
Đoạn trích từ trình theo dõi sự cố của Nhà phát triển Android L được liên kết từ một mục trên trình theo dõi sự cố AOSP ,
Bài số 4 :
logcat cho tôi biết có xung đột với quyền truy cập lại trong quá trình cài đặt (trong trường hợp của tôi, Amazon đang cố gắng phân phối lại getui-01.GetuiService, vốn đã được sở hữu bởi Camera 360)
Đăng số 12 của 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
Trích từ trình theo dõi vấn đề AOSP ,
Bài số 4
Trong API19, X509CertImpl (encCert) mới bọc chứng chỉ (đã được phân tích cú pháp và sẵn sàng cho tính toán SHA1), trong khi trong API 21, chứng chỉ được chuyển tiếp dưới dạng luồng byte, được phân tích lại và được xử lý bởi nhà máy chứng chỉ. Đó là nhà máy nào, phụ thuộc vào bối cảnh. Trong trường hợp các thiết bị L mà tôi đã thử nghiệm, nhà máy sẽ tạo một OpenSSLX509Certert. Thật không may, có một cái gì đó trong chứng chỉ của chúng tôi mà openssl gặp rắc rối và dấu vân tay thay đổi trong quá trình xử lý openssl. Tôi cũng có thể sao chép điều này bằng công cụ openssl, khi tôi chuyển đổi chứng chỉ của chúng tôi sang một số định dạng khác (ví dụ: PEM).
Nếu SHA1 sẽ được tính trực tiếp trên 'encCert.getEncoding ()' thì điều đó sẽ đúng trong cả hai trường hợp.
Giải pháp
Cập nhật : Kể từ 2014-12-04, Google đã khắc phục sự cố này trên Lollipop 5.0.1. Đối với những người không thực hiện bất kỳ cách giải quyết nào khi cố gắng cài đặt lại ứng dụng, bạn có thể flash hình ảnh Lollipop 5.0.1 khi nó sẵn sàng / chờ OTA.
Bài số 20, số 21
Có vẻ như điều này đã được sửa trong 5.0.1:
https://android.googlesource.com/pl platform / libcore / + / 6632d8c9d8d1a3ac338d541676148677641bafe3
https://android.googlesource.com/pl platform / frameworks / base / + / aaacc
Tình trạng: Đã phát hành
Ghi chú của nhân viên
Phục hồi các ứng dụng với chứng chỉ không đúng định dạng.
Có một cửa sổ thời gian trong Lollipop nơi chúng tôi duy trì các chứng chỉ sau khi chúng đã trải qua chu kỳ giải mã / mã hóa. Thư viện OpenSSL được viết tốt là tự do khi giải mã (cho phép phân tích cú pháp không đúng định dạng), nhưng sau đó nghiêm ngặt khi mã hóa, cung cấp cho chúng tôi các byte khác nhau để có cùng chứng chỉ.
Một thay đổi libcore liên quan (0c990ab4a90b8a5492a67b2b728ac9a4a1ccfa1b) hiện trả về các byte gốc nguyên văn, sửa cả cài đặt trước Lollipop và cài đặt sau khi thay đổi đó.
Thay đổi này phục hồi bất kỳ ứng dụng nào đã được cài đặt trong cửa sổ thời gian được mô tả ở trên bằng cách kiểm tra một lần để xem liệu các certs có hiệu quả như nhau không.
Vui lòng tham khảo bản sửa đổi cũ hơn cho các giải pháp được đề xuất khác.