随机的 android.content.res.Resources$NotFoundException

23
我们的生产应用程序(通过Play商店)一直在收到奇怪的android.content.res.Resources$NotFoundException异常。这个错误通常出现在尝试访问res/values中声明的字符串资源时。例如,在我们的Application子类中,我们在onCreate()方法中加载一个字符串资源(因此在任何应用程序启动时)。该字符串资源实际上存在于res/values中,并且在我们所有的测试设备上生产应用都正常工作,因此不能是由于R文件的错误生成导致的。我们猜测它来自于值未在其他值包(如values-hdpi或其他包)中重新定义的事实,并将字符串值复制到所有包中实际上停止了异常。但根据Android文档,如果没有找到具体的值,则默认会使用默认包的值,因此我们不明白为什么会发生此错误。我们正在考虑可能是定制rom不正常运行,因此想知道是否有其他人遇到了同样的问题或是否有其他建议。

6
没错,同样的问题。我们的应用在大约二十多个物理设备上进行了所有测试,完全没有问题,但我们从Play商店偶尔收到R$NFE的反馈,例如我们的主屏幕布局xml文件。 - Barend
哇,谢谢你的评论,我还以为只有我遇到这样的问题。到目前为止,我找到的唯一“解决方案”是在每个字符串资源目录中复制所有字符串定义。你有其他的“修复”方法吗? - Xval
到目前为止还没有。更糟糕的是,缺少的布局XML可能是由于资源加载系统中的边缘情况引起的,但我们也有一些应用程序类ClassNotFoundException的情况。我无法合理地解释这个问题。 - Barend
2
我知道这是一个有点老的问题,但这里更多的是支持性评论。你并不孤单,我从Google Play收到了随机报告,报告中出现了相同的resourceNotFoundException,针对这一行text_color_gray_text = context.getResources().getColor(R.color.comment_text);(非常简单!)在Application onCreate()期间被调用。当然,这只会发生在一些奇怪的坏自定义ROM或坏设备上,但我想知道这个错误是否与在Application上下文而不是Activity上下文中调用这些资源有关。 - Budius
感谢您的支持,到目前为止我找到的唯一解决方法是在所有现有的资源目录中将所有键值都加倍。如果您有其他替代方案,请告诉我。 - Xval
显示剩余5条评论
1个回答

1
有许多配置不同的Android设备。因此,如果我们没有将资源保留在相应匹配设备配置[drawable-hdpi,values-en,layout-land等]中,则Android系统会查找该资源的默认配置[drawable,values和layout]。 因此建议将默认配置和特定配置的资源分别保存在相应位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接