我正在开发一个系统应用程序,通过下载一个apk并使用packagemanager的installPackage()
方法安装它来更新它的lef。
我得到以下异常:
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的“old”代码(调用了其应用程序的oncreate()),试图访问更新后的apk中存在的“new”清单,但找不到“old”接收方(这可能吗?)。
我的应用程序还会监听pacakge_added和package_removed的意图。
这种崩溃发生在相对较大比例的用户身上。
任何关于这个错误发生的原因以及如何修复的建议或线索都将非常感谢。
最佳答案
有不同的方法可以更新apk..我不确定你用的是哪种方法..我也遇到过类似的问题。这是因为应用程序在更新过程中有多个实例。您可以将应用程序设为单个实例,也可以确保没有旧实例正在运行。我希望这会有帮助。