如何使应用程序的矢量drawable覆盖库的矢量drawable?

010*_*101 5 android gradle android-vectordrawable

我有一个图书馆项目和一个应用项目.除了其他东西,libary项目包含一些png和一些矢量drawables.现在,我可以通过给它相同的名称轻松覆盖应用程序项目中的png drawable,它将正确显示.但这不适用于矢量drawables:应用程序总是显示在Android 4和5上的库中定义的矢量drawables.应用程序永远不会显示应用程序项目的矢量drawables.

Google声称应用程序的资源始终优先于图书馆的资源:

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

但正如我所说,在矢量绘图的情况下,由于某种原因,它是相反的.知道我能做些什么来确保矢量drawables被覆盖就像普通的drawables和其他资源一样?

更新:已解决支持库v23.2!现在没什么可做的:)

Jar*_*ler 8

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

如果你把你VectorDrawable绘制,anydpi-V21在您的应用程序,那么它会覆盖从资料库中的项目的绘制.这似乎是一个错误,应该创建一个新问题(如果还没有).


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


010*_*101 3

根据 Jared Rummler 的回答中的“注意”,由于这不适合评论,我将在这里为那些无法找到生成的 PNG 文件的人发布一个小教程:

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

drawable-ldpi-v4
drawable-mdpi-v4
drawable-hdpi-v4
drawable-xhdpi-v4
drawable-xxhdpi-v4
drawable-xxxhdpi-v4
Run Code Online (Sandbox Code Playgroud)

作为最后一个乏味的步骤,您应该删除不需要的所有文件,即那些不是从矢量绘图生成的文件。如果您使用 VCS,则通过仅添加所需的 PNG 来完成此操作最简单。这会将所有冗余文件放置在未版本化文件下。

就这样,由于这个愚蠢的错误,加上drawable-anydpi-v21,现在多了 7 个文件夹:(

更新在支持库 v23.2 中已解决!到今天为止,终于不需要再做上述任何事情了。只要确保在任何地方都使用 app:srcCompat 而不是 android:src 即可。