Android 如何使应用程序的矢量可绘制覆盖库的矢量可绘制?

Android 如何使应用程序的矢量可绘制覆盖库的矢量可绘制?,android,gradle,android-vectordrawable,Android,Gradle,Android Vectordrawable,我有一个图书馆项目和一个应用程序项目。除其他内容外,libary项目还包含一些png和一些矢量绘图。现在,我可以很容易地覆盖应用程序项目中的png可绘制文件,只要给它起相同的名字,它就会正确显示。但是,这不适用于矢量绘图:无论是在Android 4还是5上,该应用程序始终显示库中定义的矢量绘图。该应用程序永远不会显示应用程序项目的矢量绘图 : 由于这些工具将库模块的资源与依赖应用程序模块的资源合并在一起,因此可能会在两个模块中定义给定的资源ID。在这种情况下,工具从应用程序或具有最高优先级的库中

我有一个图书馆项目和一个应用程序项目。除其他内容外,libary项目还包含一些png和一些矢量绘图。现在,我可以很容易地覆盖应用程序项目中的png可绘制文件,只要给它起相同的名字,它就会正确显示。但是,这不适用于矢量绘图:无论是在Android 4还是5上,该应用程序始终显示库中定义的矢量绘图。该应用程序永远不会显示应用程序项目的矢量绘图

:

由于这些工具将库模块的资源与依赖应用程序模块的资源合并在一起,因此可能会在两个模块中定义给定的资源ID。在这种情况下,工具从应用程序或具有最高优先级的库中选择资源,并放弃其他资源。在开发应用程序时,请注意,公共资源ID可能在多个项目中定义,并将被合并,来自应用程序或最高优先级库的资源将优先

但正如我所说的,对于矢量绘图,出于某种原因,情况正好相反。你知道我能做些什么来确保向量可提取项被覆盖,就像普通可提取项和其他资源一样吗


更新:!现在无事可做:

构建库项目时,VectorDrawable为每个密度创建PNG文件,并将原始VectorDrawable放置在drawable-anydpi-v21中

如果将VectorDrawable放入应用程序中的drawable-anydpi-v21中,则它将覆盖库项目中的drawable。这似乎是一个bug,如果一个bug还不存在,应该创建一个新的问题

注意:这不会替换库中生成的PNG文件。您还需要将它们添加到应用程序中以覆盖它们。

根据Jared Rummler回答中的注释,由于这不适合在评论中使用,因此我将在这里为查找生成的PNG文件有困难的用户发布一个小教程:

您可以在build/intermediates/res/merged/debug中找到包含所需文件的文件夹,如果您使用的是产品风格build/intermediates/res/merged//debug,则可以在其中找到这些文件夹。现在,将PNG文件复制到应用程序中最简单的方法是完全复制它们的文件夹,它们是:

drawable-ldpi-v4
drawable-mdpi-v4
drawable-hdpi-v4
drawable-xhdpi-v4
drawable-xxhdpi-v4
drawable-xxxhdpi-v4
作为最后一个繁琐的步骤,您应该删除其中所有不需要的文件,即那些不是从矢量绘图表生成的文件。如果您使用的是VCS,只需添加所需的PNG,这是最容易做到的。这会将所有冗余文件置于未版本化文件下

现在,由于这个愚蠢的错误,与drawable-anydpi-v21一起,还有7个额外的文件夹:


更新:!到今天为止,最终没有必要做上述任何一项。只需确保使用app:srcCompat而不是android:src everywhere。

将PNG添加到ldpi、mdpi、hdpi、xhdpi、xxhdpi和xxxhdpi中也可以。-v4后缀是在构建时添加的。关于app:srcCompat的更新正是我需要的提醒,提醒我已打开vectorDrawables.useSupportLibrary。这很有效,谢谢!请注意,文件夹名称在第二段中拼写错误,请小心复制和粘贴:无法编辑帖子,因为它只更改了一个字符谢谢你的朋友,你救了我。安卓系统就像肿胀的猫咪一样坏了,这太糟糕了。