Android 使用图书馆项目中的活动

Android 使用图书馆项目中的活动,android,library-project,Android,Library Project,我有一个库项目设置和一个依赖于此库项目的项目-所有东西都编译得很好,我的依赖的项目运行得很好 但是,我在使用库中的活动时遇到间歇性问题 MyLibrary项目可以作为库项目“取消选中”,并且“picker”活动可以单独运行。自行运行库项目可以很好地工作,没有任何问题 当我使用依赖项目中的库项目(和“picker”活动)时,它会给我NullPointerExceptions(或DexOp)错误,说“picker”活动找不到它的资源 有谁能告诉我他们以前是否有过这种经历 编辑 手动将库项目活动使用的

我有一个
项目设置和一个依赖于此库项目的项目-所有东西都编译得很好,我的
依赖的
项目运行得很好

但是,我在使用
库中的活动时遇到间歇性问题

My
Library
项目可以作为库项目“取消选中”,并且“picker”活动可以单独运行。自行运行
项目可以很好地工作,没有任何问题

当我使用依赖项目中的
项目(和“picker”活动)时,它会给我
NullPointerExceptions
(或DexOp)错误,说“picker”活动找不到它的资源

有谁能告诉我他们以前是否有过这种经历

编辑

手动将
项目活动使用的
layout.xml
复制到从属项目,可使项目正确打开“选取器”活动。这是必需的吗?!当然不是?这进一步让我想知道在
项目中合并/引用
R.java
中的整数id是否有问题

编辑

我不确定这是否有任何后果,但我的
项目之一是一个包装器,它包装了一组在不同前端项目中使用的自定义视图

这些自定义视图都有一个活动,因此可以单独测试它们

其中一个视图具有自定义属性,这些属性在隔离运行时工作得非常好。但是,依赖项目似乎没有正确地将属性中的拉入并将其保留在其原始命名空间中,从而导致导入的布局抛出编译错误:

[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错误。不确定文件名是问题还是文件内容

编辑

到目前为止,我还无法找到这个问题的解决方案(尽管@yorkw的答案肯定对xml属性有帮助!谢谢)

但是,我已设法使此问题间歇性出现:


我检查了每个库项目,并确保它们都有自己的名称空间(即,
com.company.library.component1
com.company.library.component2
等)。经过几次清理(每个项目都以正确的优先级排序)后,这个问题会自行解决,但最终在切换库/非库以测试组件时会出现问题。

不确定如何使用android库,但我做过很多次,没有任何问题,因此,请阅读关于使用android库的以下内容:

  • 为了让android项目使用android库项目,您可以编辑“project.properties”并在那里添加库项目的路径,或者更简单的是,右键单击项目(使用库项目),选择“android”类别,然后在那里选择“add”并选择库项目

  • 为了使android项目始终打开android库项目,还可以选择“java构建路径”->“项目”并选择库项目

  • 在“project.properties”中,尝试将两个项目的目标设置为相同的目标,并设置为您拥有的最新目标(现在最新的目标是15个),即使您无法在此android版本上测试应用程序

  • 源文件和所有资源文件(在res文件夹中)都可以用于库项目

  • 资源文件夹不能在库项目内使用。只有在实际运行的android项目上,才能使用assets文件夹。proguard文件中也有同样的内容

  • 库项目的清单几乎不需要包含任何内容。有关更多信息,请参阅本文:。如果您希望通过使用它的项目访问库项目上的活动,请不要忘记将它们包含在android项目的清单中(无需将它们写入android库的清单中)

  • 请记住在导出应用程序之前运行lint。它给了您很多警告,但最重要的警告是当您使用的函数太新,无法在目标API范围内运行时。这对于库来说很重要,因为如果有多个源,很容易丢失

  • 如果您希望扩展android库上的活动,则需要某种方法来处理它们。我知道的唯一方法是扩展应用程序,让它成为如何为每个活动创建意图的管理者。我想你可以做其他的把戏,但它们可能都和这个类似

  • 如果您在android库和android项目上拥有相同的资源(“res”文件夹中的任何资源),则android项目上的资源将替换另一个资源。这有优点也有缺点。请记住,同一资源不能有不同的文件扩展名

  • 原因:

    解决方案: 升级至最新SDK&ADT版本(自r17发布后已修复),并使用
    http://schemas.android.com/apk/res-auto
    作为自定义属性的命名空间URI,请参见:

    添加了对库中具有自定义属性的自定义视图的支持。使用自定义属性的布局必须使用命名空间URI,而不是包含应用程序包名称的URI。此URI在生成时替换为特定于应用程序的URI

    相关主题:

    问题是由每个
    项目中的
    R
    文件未正确生成和引用引起的。资源文件是直接构建和引用的