我从 Firebase 收到一份活动报告,由于找不到我的资源而导致活动失败。我真的很困惑为什么找不到它,因为我相信所有文件都在正确的目录中,并且用户使用的是 Android v8.1,它并不古老,应该能够处理我认为有的东西自 v1.1 以来一直存在于 Android 中。
以下是异常链的最后几个堆栈:
Caused by android.content.res.Resources$NotFoundException: File res/drawable/button_close_24dp.xml from drawable resource ID #0x7f08006d
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:820)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:630)
at android.content.res.Resources.getDrawableForDensity(Resources.java:877)
at ...
Caused by android.content.res.Resources$NotFoundException: Drawable (missing name) with resource ID #0x7f08006e
Caused by android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f08006e
at android.content.res.ResourcesImpl.getResourceName(ResourcesImpl.java:253)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:760)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:630)
at ...
我认为这是在抱怨res/drawable/button_close_24dp.xml
丢失或找不到。我已经验证过res/drawable/button_close_24dp.xml
项目中确实存在(并且它为我们拥有的数千名其他用户加载)。该 xml 文件只是一个简单的选择器文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/button_close_grey_24dp" />
<item android:drawable="@drawable/button_close_white_24dp" />
</selector>
@drawable/button_close_grey_24dp
有两个可能的版本:
/res/drawable/button_close_grey_24dp.png
/res/drawable-nodpi/button_close_grey_24dp.xml
The nodpi
file 是一个矢量绘图,其中包含:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"
android:fillColor="#ffffff"/>
</vector>
Firebase 崩溃报告称用户在 LGE Nexus 5X 上运行 Android 8.1.0。应该从 Android 5 开始支持矢量绘图,但即使该用户的手机由于某种原因不支持它们,也有一个简单的 png 可供使用。
所以,我真的很困惑为什么这不能普遍适用。我不想只是结束这次崩溃,因为它只发生在一个用户身上......至少在没有通过询问你们进行一些尽职调查的情况下是这样。 :)