Android 仅当在特定设备上运行时,资源未找到异常

Android 仅当在特定设备上运行时,资源未找到异常,android,android-studio,android-drawable,android-resources,Android,Android Studio,Android Drawable,Android Resources,我在Android Studio emulator和Google PLay发布前检查中发现了一个故障,原因是仅针对oe设备 列出的资源明确存在于我的源代码中-它位于drawable文件夹中,而不是任何特定的dpi文件夹中-并且可以在我尝试应用程序的所有其他设备上找到它,即模拟器设备、启动前测试设备和一些物理设备 Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_amalfi_pro_l

我在Android Studio emulator和Google PLay发布前检查中发现了一个故障,原因是仅针对oe设备

列出的资源明确存在于我的源代码中-它位于
drawable
文件夹中,而不是任何特定的dpi文件夹中-并且可以在我尝试应用程序的所有其他设备上找到它,即模拟器设备、启动前测试设备和一些物理设备

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_amalfi_pro_link.xml from drawable resource ID #0x7f080071
我能看到的失败设备的主要区别是分辨率较低-因此我检查向量可绘制文件是否在可绘制文件夹中,而不是特定的dpi文件夹中

碰撞装置也是API 19,而工作装置是更高版本。(在发布前的测试中,我还没有完全研究API 21的另一种资源,但我得到了类似的崩溃)

请注意,我在我的
build.gradle(应用程序)
中启用了对矢量绘图的传统支持,包括:

    vectorDrawables {
        useSupportLibrary true
    }
我尝试了一个干净的构建-没有改变

我已经尝试过使缓存失效并重建-没有改变

我试着换了别的东西,换了回去,重建-没有改变

我确实在同一个模拟器测试设备上使用了不同的可绘制文件发生了相同的崩溃,用不同的可绘制文件替换该可绘制文件避免了第一次崩溃,并将我移动到了导致崩溃的下一个可绘制文件,因此它似乎与特定的可绘制文件相关-但可绘制文件存在,并且在其他设备上也可以工作

这太令人沮丧了,我只是不知道还有什么地方可以找到这个问题

更新:

下面的内容要求澄清是否在任何其他活动中使用了有问题的矢量绘图,我测试了更多

  • 如果我将失败的drawable添加到我的主活动中,它在我的主活动中运行良好,但在导致崩溃的活动中仍然找不到它,并且仍然导致崩溃
  • 在我的项目中,似乎至少有三个vector Drawable在三个不同的活动中以相同的方式运行
  • 如果我用另一个向量drawable(不是导致崩溃的其他向量drawable之一)替换崩溃活动中有问题的drawable,那么所讨论的活动不会崩溃
  • 如果我将三个崩溃活动中有问题的可提取内容替换为另一个有问题的可提取内容,那么该活动将崩溃,并报告找不到新的有问题的可提取内容

我已经检查了drawable XML,它与我在此项目中使用的其他矢量drawable完全相同(路径详细信息除外),不会导致崩溃。

我找到了问题的原因

在复合可拉延结构中使用矢量可拉延结构的任何地方都会发生崩溃

drawable本身并没有什么问题,我只是将它们从复合drawable中移到了
LinearLayout
中自己的
ImageView
中,以重新创建相同的效果

效率较低的布局,但现在没有崩溃。

首先,复合矢量绘图表有“compat”属性:

  • 应用程序:drawableTopCompat
  • app:drawableLeftCompat
  • app:drawableStartCompat

您必须使用
AppCompatTextView
来利用这些属性。如果您的布局由一个从AppCompat主题构建的
LayoutInflater
膨胀,当您使用
标记时,这将自动发生。如果没有,则必须显式地将它们指定为
标记。

Dpi不仅仅是一个可能的限定符,它必须至少存在于res/drawable中,且不带任何限定符。您确定当前资源已放置在res/drawable中吗?另外请注意,如果您在xml中定义了vector,那么API 21支持vector drawable。是的,在
drawable
中定义vector drawable,不带任何限定符-所有drawable都在该文件夹中。我还启用了传统的向量可绘制支持—我所有的可绘制都是XML中的向量,我的主要活动中的每个可绘制都工作正常。当我切换到包含此特定drawable的活动时,我遇到了崩溃。您是否想说特定资源在MainActivity和其他活动中都使用,并且在MainActivity中工作正常,但在其他活动中不工作?您能否提供代码,说明您在何处以及如何使用此特定资源?很抱歉,不清楚。否导致崩溃的可拖动设备仅用于崩溃活动。但它在其他设备上的活动中有效。不过,这是一个好的观点,它是一个不用于主要活动的绘图工具-需要在那里进行调查。完美!虽然我找到了另一种方法来完成同样的事情,但这是解决我遇到的问题的正确方法。(实际上,我将坚持使用
LinearLayout
解决方案,因为在我的用例中,它实际上简化了一些其他操作,但我将在将来指出这种正确的方法。