我正在开发一个系统应用程序,它通过下载一个 apk 并使用 PackageManager 的 installPackage()
方法来更新它自己。
我收到以下异常:
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 ...
更新后的 apk 中不存在“SomeOldReceiver”组件。
似乎执行了现有 APK 中的“旧”代码(调用了其应用程序的 onCreate()),试图访问更新后的 APK 中存在的"new" list ,但找不到“旧”接收器(这甚至可能吗?)。
我的应用程序还会监听 PACAKGE_ADDED 和 PACKAGE_REMOVED Intent 。
这种崩溃发生在相对较大比例的用户身上。
任何关于为什么会发生此错误以及如何修复它的建议或线索将不胜感激。
最佳答案
更新 APK 有多种方法。我不确定您使用的是哪一种。我遇到了类似的问题。这是因为应用程序在更新过程中有多个实例。您可以将应用程序设置为单个实例或只要确保没有旧实例在运行即可。我希望这会有所帮助。
关于android - 自更新 APK 时崩溃(组件类不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743983/