我正在研究一个系统应用程序,它通过下载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 ...
Run Code Online (Sandbox Code Playgroud)
更新的apk中不存在"SomeOldReceiver"组件.
似乎现有APK的"旧"代码被执行(其应用程序的onCreate()被调用)试图访问更新的APK中存在的"新"清单,并且找不到"旧"接收器(这是甚至可能?).
我的应用程序还会收听PACAKGE_ADDED和PACKAGE_REMOVED意图.
此崩溃发生在相对较大比例的用户身上.
关于为什么会发生这种错误以及如何修复它的任何建议或线索将不胜感激.
android android-manifest android-install-apk android-broadcastreceiver
在Android文档中,服务的" onStartCommand()"的意图是a param,根据文档:
"在Intent供给startService(Intent),给定的.如果它的进程已经走了之后,正在重新启动该服务,它以前返回任何东西,除了这可能是零START_STICKY_COMPATIBILITY."
但是,返回值START_REDELIVER_INTENT应该在重新启动服务时返回原始意图.
任何人都可以解释为什么一个intent可以为null,即使flag被设置为START_REDELIVER_INTENT?
service android android-intent android-service android-intentservice
前一段时间我尝试通过在app模块中添加lint.xml文件并添加以下lintOptions来将lint添加到我的android studio项目中:
lintOptions {
abortOnError true
checkReleaseBuilds true
lintConfig file("lint.xml")
}
Run Code Online (Sandbox Code Playgroud)
一切都工作正常,调试构建失败,当有lint错误和传递否则.虽然我没有将更改合并到项目中,但我最近返回到这些更改,发现构建不再在lint错误上失败.我似乎无法找到在此期间项目中所做的更改导致了这一点.正如预期的那样,发布版本仍然在lint错误上失败.
从我可以收集的lint任务应该默认运行但我没有看到它作为我构建时运行的任务的一部分
其他可能有用的信息:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!--The given layout_param is not defined for the given layout, meaning it has no
effect.-->
<issue id="ObsoleteLayoutParam" severity="error" />
<!--A layout that has no children or no background can often be removed-->
<issue id="UselessLeaf" severity="error" />
<issue id="HardcodedText" severity="error" />
<issue id="UnusedResources" severity="error" />
<!--AdapterViews such as ListViews must be configured …Run Code Online (Sandbox Code Playgroud)