Tôi đang làm việc trên một ứng dụng hệ thống cập nhật itslef bằng cách tải xuống một gói ứng dụng và cài đặt nó bằng cách sử dụng phương thức installPackage()
của PackageManager.Sụp đổ trong khi tự cập nhật APK (lớp thành phần không tồn tại)
Tôi nhận được ngoại lệ sau đây:
Fatal Exception: java.lang.IllegalArgumentException: Component class com.myapp.package.receivers.SomeOldReceiver does not exist in com.myapp.package
at android.os.Parcel.readException(Parcel.java:1544)
at android.os.Parcel.readException(Parcel.java:1493)
at android.content.pm.IPackageManager$Stub$Proxy.setComponentEnabledSetting(IPackageManager.java:3420)
at android.app.ApplicationPackageManager.setComponentEnabledSetting(ApplicationPackageManager.java:1492)
at com.myapp.package.utils.AndroidUtils.enableDisableComponent(SourceFile:113)
at ...
Các "SomeOldReceiver" thành phần không tồn tại trong các gói ứng dụng cập nhật. Có vẻ như mã "cũ" từ APK hiện tại được thực thi (ứng dụng onCreate() của ứng dụng được gọi) cố gắng truy cập vào tệp kê khai "mới" tồn tại trong APK được cập nhật và không thể tìm thấy tệp "cũ" người nhận (điều này thậm chí có thể?).
Ứng dụng của tôi cũng lắng nghe ý định PACAKGE_ADDED & PACKAGE_REMOVED.
Sự cố này xảy ra trên một tỷ lệ phần trăm người dùng tương đối lớn.
Bất kỳ đề xuất hoặc đầu mối nào về lý do lỗi này xảy ra và cách sửa lỗi sẽ được đánh giá cao.
Khi nào bạn có ngoại lệ? khi nào mã 'com.myapp.package.utils.AndroidUtils.enableDisableComponent' chạy? – Blundell
'Sự cố này xảy ra trên phần lớn người dùng.' khiến tôi nghi ngờ đó là do sự không tương thích API xảy ra khi chữ ký installPackage được sửa đổi và/hoặc toàn bộ vùng PackageManager giữa các nền tảng. Nó có thể là giá trị nó để thả các ý tưởng PackageManager và trở về với mục đích? – L33T
Bạn có thể thấy bắt đầu phiên bản Android nào xảy ra sự cố này không? –