[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 に別の名前を付けてみてください。
今、私はオーバーライドを使用していないので、これがアセットをオーバーライドする方法であると予想されるため、これは奇妙に思えます。ただし、ライブラリに同じ名前の2つのアセットがあると思います。そして、あなたのプロジェクトでは、同じ名前のアセットを持っていても問題ないかもしれません. ただし、さまざまなタイプがあっても問題ないことを確認します。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 とプロジェクトにまたがっていなかったと思います。
これが実際に意図された機能であることをどこにも読んだことがありません。別の言い方をするリンクはありますか?(コメントしてください)