微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 在编译期间是否可以将资源的ID(例如R.drawable.ic_launcher)设置为特定的R值?

我们的应用程序遇到了一个奇怪的问题,主要是当我的应用程序在用户的设备上更新时,通知在他的通知列表上“生效”.

用户点击通知时 – 我们得到一个例外:

android.app.RemoteServiceException
Bad notification posted from package ... : Couldn't create icon: StatusBarIcon(pkg=.....=0 id=0x0 level=0 visible=true num=0 )

似乎自应用程序更新后 – resourceId已更改且不再合法,因此异常(此处更多信息:How to fix: android.app.RemoteServiceException: Bad notification posted from package *: Couldn’t create icon: StatusBarIcon)

目前,作为临时解决方案,我们设置了一个广播接收器,该接收器在更新应用程序后被触发并取消任何现有通知.

但是 – 一个更优雅的解决方案是让像R.drawable.ic_launcher这样的资源在编译时始终获得相同的数值(标识符),这样即使在升级之后它也会保持不变.

有没有办法做到这一点?

解决方法

在res / values文件夹中创建一个public.xml.
如果在public.xml中正确编写,则可以修复每个资源的ID.
格式如下:

...
<public type="drawable" name="notification_icon" id="0x7f0200ab" />
...

请注意,Android具有这些ID的命名规则.你可以谷歌了解详情.

或者您可以反编译apk文件并从res / values获取public.xml.此文件包含所有资源,您只需复制所需的内容即可.

More关于ids修复.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐