私はAndroidプロジェクトを作成してライブラリにしようとしています。私はこのコードでスローされた例外を取得:Androidライブラリは他のプロジェクトにリソースを引き出しません
_buttonStart = (Button) findViewById(R.id.buttonStart);
私が手に例外がある:
java.lang.NoSuchFieldError: com.xxx.libraryname.R$id.buttonStart
Androidのドキュメントは、明示的にライブラリがそれらのリソースにアクセスできるようにすべきであると言っているように見える:
"たとえば、ライブラリプロジェクトのソースコードは、Rクラスを通じて独自のリソースにアクセスできます。
ライブラリの/gen/com.xxx.libraryname/R.java/R/id/
を見ると、buttonStartがあります。しかし、私がメインプロジェクトの/gen/com.xxx.libraryname/R.java/R/id
を見ると、そうではありません。
私はmake cleanを行っています。
それを実演しました。どちらのプロジェクトも "main.xml"ファイルを持っていました。ライブラリのmain.xmlファイルの名前が変更され、問題が解決しました。 –
同じ名前のリソースがある場合、ホストプロジェクトが勝ちます。おそらく、いくつかの接頭辞表記を介してライブラリに一意のリソース名を付けるのが最善です。したがって、偶発的な衝突はありません。ホストが特にリソースを置き換えることを試みている*意図的な衝突がまだあるかもしれません。その場合、ホストはライブラリが受け入れられるようにしなければなりません(例えば、レイアウトのために同じIDを持つ同じウィジェットを維持する)。 – CommonsWare
@DanJameson回答セクションにもソリューションを追加できますか? – Anirudh