【发布时间】:2012-05-11 00:32:09
【问题描述】:
我有一个 Library 项目设置和一个依赖于这个库项目的项目 - 一切都可以正常编译,但我的 Dependent 项目运行良好;
我在使用 Library 项目中的活动时遇到了间歇性问题。
我的Library 项目可以作为库项目“取消选中”,并且“picker”活动可以单独运行。以自己的方式运行 Library 项目可以正常运行,没有任何问题。
当我使用依赖项目中的Library 项目(和“选择器”活动)时,它给了我NullPointerExceptions(或历史上的DexOp)错误,说“选择器”活动找不到它的资源。
谁能告诉我他们以前是否经历过这种情况?
编辑
手动将Library项目Activity使用的layout.xml复制到依赖项目中,使项目正确打开“picker”Activity。这是必须的吗?!确定不是吗?这进一步让我想知道在 Library 项目中合并/引用来自 R.java 的整数 id 是否存在问题。
编辑
我不确定这是否有任何后果,但我的一个 Library 项目是对不同前端项目中使用的一组自定义视图的包装。
这些自定义视图每个都有一个 Activity,以便可以单独测试它们。
其中一个视图具有自定义属性,在单独运行时效果很好。但是,依赖项目似乎没有正确地拉入属性并将它们保留在其原始命名空间中,导致导入的布局引发编译错误:
[2012-05-16 12:07:28 - Project] D:\opt\workspace\CustomGlowList\res\layout\main.xml:14: error: No resource identifier found for attribute 'listId' in package 'com.company.library.glowlist'
[2012-05-16 12:07:28 - Project] D:\opt\workspace\CustomGlowList\res\layout\main.xml:14: error: No resource identifier found for attribute 'type' in package 'com.company.library.glowlist
编辑
DexOp 错误已通过删除 Dependent 项目中存在的重复文件名得到解决。不确定是文件名还是文件内容的问题。
编辑
到目前为止,我一直无法找到解决此问题的方法(尽管@yorkw 的回答肯定有助于 xml 属性!谢谢)。
然而,我设法使这个问题断断续续:
我浏览了每个库项目并确保它们都有自己的命名空间(即com.company.library.component1、com.company.library.component2 等)。经过几次清理(每个项目都以正确的优先级排序)后,此问题自行解决,但在切换库/不是库以测试组件时最终会再次出现。
【问题讨论】:
-
你到底在说什么问题?问题中没有明确描述,如果您不能提供更多详细信息,我认为其他人无济于事。对于您在此问题中提到的“问题”,您应该至少发布 Eclipse 中显示的完整错误消息。
-
@yorkw 该错误是常见的
NullPointerException,由访问由于未找到指定的布局资源(在findViewById(R.id.whatever)中)而未找到的视图引起。由于目前问题不明显,我不能给你复制粘贴,不过我会在下次出现时添加它们。 -
我无法为您提供更多关于您发布的当前详细信息的信息,与此同时,请深入阅读 here。最新版本的 SDK 现在非常健壮,在清理/构建依赖项目时应该正确处理库项目(编译源、合并资源等)。您提到您有多个库项目,您是否有两个级别的库项目依赖,即库项目 1 依赖于库项目 2?
-
是的,我会给出一个完整的例子,但我有 4 个“独立”库,它们可以独立运行。一个运行两个独立库的依赖库和一个运行一个依赖库和两个其他独立库的依赖库。
-
查看this link 中红色的重要更改,它解释了关于二级库项目依赖的一些注意事项。例如,如果您有 libA (com.example.liba) 依赖于 libB (com.example.libb) 并在 libA 的某个类中显式使用
import com.example.libb.R;,则它不起作用。作为一种好的做法,不建议在代码中显式使用import com.example.libb.R,因为这不是必需的,并且在清理/构建主项目时,所有资源始终包含在主项目自己的 R 文件中。