【发布时间】:2014-10-26 18:01:31
【问题描述】:
我有一个 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 时,它不是。
我已经做了一个清理。
【问题讨论】:
-
想通了。这两个项目都有一个“main.xml”文件。重命名了库的 main.xml 文件,一切正常。
-
是的,如果你有同名的资源,宿主项目获胜。最好为库提供唯一的资源名称,可能通过一些前缀表示法,这样就不会发生意外冲突。可能仍然存在 故意 冲突,其中主机专门尝试替换资源,在这种情况下,主机必须以图书馆接受的方式这样做(例如,维护相同的小部件与布局的 ID 相同)。
-
@DanJameson 你能在答案部分添加解决方案吗?
-
发布答案,以便该问题不再无人回答。