[com.mycom.mylib.myapp] res\drawable\main_background.xml:0: error: Resource entry main_background is already defined.
[com.mycom.mylib.myapp] res\drawable\main_background.png:0: Originally defined here.
我不相信即使扩展名不同,您也不能拥有相同的文件名。尝试将 png 命名为其他名称。
现在,我没有使用过覆盖,所以这看起来很奇怪,因为您希望这就是您覆盖资产的方式。但是我认为您的库中的两个资产名称相同。而且在您的项目中,拥有同名的资产可能是可以的。但是,我会检查是否可以拥有不同的类型。XML 与 png 不同,如果您从代码访问资产,您可能会遇到类型错误。
让我澄清一下上述观点。我了解库项目可以具有与您的应用程序中的项目具有相同资源 ID 的项目。
然而,上面的错误表明 main_background.png 和 main_background.xml 都在同一个项目([com.mycom.mylib.myapp])中,我认为这是不正确的。
进一步阅读
此页面描述了各种类型的项目,包括库项目http://developer.android.com/tools/projects/index.html
现在我不知道我从哪里得到印象,但再次查看它根本没有说明您可以通过使用相同的资源名称覆盖资源的任何地方。天知道为什么我认为这是一个功能。
所以不,据我所知,同样的规则适用,即使跨图书馆项目,资源也必须唯一命名,否则生成的资源 ID 将发生冲突。(你得到的错误)
解释的是如何管理资源冲突。
资源冲突 由于工具将库项目的资源与依赖应用程序项目的资源合并,因此可能在两个项目中都定义了给定的资源 ID。在这种情况下,工具从应用程序或具有最高优先级的库中选择资源,并丢弃其他资源。在开发应用程序时,请注意公共资源 ID 可能会在多个项目中定义并且将被合并,应用程序或最高优先级库中的资源优先。
系统将使用优先级最高的资源,丢弃其他所有资源。奇怪的是,您会认为不会发生编译错误,因为编译器应该丢弃资源。这让我相信原始海报在同一个项目中具有类似命名的资产,而不是跨 lib 和项目。
我还没有在任何地方读到这实际上是一个预期的功能。有任何链接说别的吗?(评论他们)