【问题标题】:External project reference in androidandroid中的外部项目参考
【发布时间】:2011-06-01 19:42:17
【问题描述】:

我有一个使用另一个项目作为项目参考的 android 应用程序。我进入了应用程序选项,构建路径,然后在项目引用中选择了项目。

一切构建和部署都很好,但是当我尝试运行应用程序并在该项目中实例化一个类时,我得到一个 java.lang.NoClassDefFoundError errrrrr。

我不是 java 项目专家,所以我假设我已经完成了一些简单的事情。有什么想法吗?

【问题讨论】:

  • 经过更多调查,我相信我必须在项目选项中的 android 选项卡下将引用的项目标记为“Is Library”,但每次单击它时,它都不会持续存在。如果我再次打开选项,它会取消选中。
  • 好的,我检查了整个树(TFS + eclipse 似乎很棘手),最后让 Is Library 持续存在,但仍然得到 NoClassDefFoundError。 :(

标签: android


【解决方案1】:

上下文:开发一个 JSP 网站,该网站与网络上的多个 Android 设备交互。需要通用类。

采取的步骤:

对于包含您的公共类的 java 项目:

1)(什么都不做)

对于您的 Android 应用项目:

1) 项目属性->Java 构建路径->项目选项卡->添加...

2) 项目属性->项目引用->相应设置复选框

3) [正如 Matthew 上面所说的(这正是我所需要的)]“Android-Project” -> Properties -> Java Build Path -> Order and Expert,然后选择您要导入和移动的 java 项目它在所有条目的顶部。

对于您的 JSP 网站项目:

1) 项目属性->Java 构建路径->项目选项卡->添加...

2) 项目属性->项目引用->相应设置复选框

【讨论】:

    【解决方案2】:

    我也有同样的问题。很少的研究让我想到了这篇文章中提到的图书馆项目。但请注意:

    "您还可以将Android项目指定为库项目,这样可以将其与其他依赖它的项目共享。一旦将Android项目指定为库项目,它无法安装 到设备上。”

    您可以找到更多信息:

    http://developer.android.com/tools/projects/projects-eclipse.html

    还有

    https://groups.google.com/forum/?fromgroups#!topic/android-developers/C0pddRNGZVs

    【讨论】:

    • 使用 Android 标签添加库就可以了。这个页面上有这么多完全相同的食谱,真是太痛苦了
    【解决方案3】:

    我最近遇到了一个非常相似且可能相同的问题。 Android 不喜欢对项目的引用,如果您尝试让您的 android 项目引用另一个项目,则会抛出这些反射异常。

    它也不喜欢在构建路径上有jar,你需要做的是导出你想要包含在你的android项目中的项目并将它们放在/libs文件夹中。这个文件夹通常是在创建项目时创建的,如果不只是自己制作,它会放在项目的根目录中。如果它们在那里,Android 会自动拾取它们。

    同样很重要,如果你的外部项目也依赖于其他项目,你也需要导出那些其他项目,并将jars放在android项目的/libs文件夹中。

    截至 2012 年 7 月 22 日最新版本的 android 就是这种情况。如果您使用的是旧版本的 android,则可能不适用。

    【讨论】:

      【解决方案4】:

      在 Eclipse 上,转到“Android-Project” -> Properties -> Java Build Path -> Order and Expert,然后选择您要导入的 java 项目并将其移至所有条目的顶部。

      【讨论】:

      • 注意,“选择Java项目”也意味着激活复选框。
      • 这个奇怪的东西终于奏效了。将项目移至列表顶部很重要。
      • :) 这条评论为我节省了一些时间。这么简单的疏忽谢谢!
      • 非常感谢,这对我有帮助。
      【解决方案5】:

      如果您的外部项目依赖于其类路径中的其他 jar,请确保将它们导出并将它们推送到 Eclipse 中导出列表的顶部。我在项目中的一个类上抛出了相同的 NoClassDef 错误,但真正的问题在于它所依赖的 jar 的导出顺序。修复后工作正常。

      【讨论】:

        【解决方案6】:

        这个问题有一些解决方法。您可以将您的库检查为 Android 库: 右键单击项目/属性/Android 选项卡 - “是库”。

        然后在您的主项目中: 右键单击项目/属性/Android 选项卡 -> 添加(并添加您的库项目)。

        但是,您的库必须首先创建为 Eclipse Android 项目(以便“Android”部分在项目属性中可用)。

        我已经这样做了,我不再有 NoClassDefFoundError。这种解决方案仍然有利于早期开发。如果您的库是稳定的,您应该制作一个 jar 并将其包含在您的主项目中(并删除对 Android 库的引用)。

        【讨论】:

          【解决方案7】:

          我也有类似的问题。我有一个旧项目,用作一些数学和 3D 函数的命名空间 - 我想在 android 和我的其他 java 代码之间共享它。问题是,当我从我的库中实例化一个 POD 类型时,这该死的东西就会崩溃。我的外部项目没有生成 jar 文件;它仅用作命名空间。 我认为有一些运行时链接问题导致了这种情况,但是 android、eclipse 和 java 共同给了我任何帮助。

          【讨论】:

          • 我已经设法让我的代码工作,在现有项目之间共享代码。 Android 显然不喜欢在外部引用另一个项目,但是如果您访问项目属性并链接库的源代码,它可以执行任何内部 gubbins 以使您的代码正常工作。 ->properties->Java Build Path->link source... 然后从它的根目录添加你的库。
          • 蒂姆,当你这样做的时候,是不是搞砸了你的包裹?我这样做了,现在期望我的包名来自引用的库是 src.com... 而不是 com... 因为它强制执行文件夹/包约定。我尝试浏览 /src 文件夹并链接它,但它说“文件夹已经是源文件夹”,即使我已经删除了对该项目的所有引用。
          • 我没有遇到过这个问题,尽管我确实遇到了一些问题,即来自多个包含的源目录的一些配置文件冲突,无论我尝试什么,我都无法解决(有一个选项可以忽略一些似乎根本不起作用的文件)。我的项目在内部遵循包/文件夹约定,所以这可能就是我没有看到您的问题的原因。虽然 Eclipse 一旦完成设置就可以很好地使用,但初始设置阶段可能真的很痛苦!
          【解决方案8】:

          您可能需要在父项目旁边包含一个已编译源的依赖项目的 JAR。 Android 将需要类文件,以便它可以将它们重新编译为 Dalvik 字节码,然后在类路径中提供它们。

          This video 可以帮助你,取自this question

          【讨论】:

          • 添加 .jar 文件的问题是当引用的项目更改时它不会自动更新。引用的项目正在积极开发中,每次我进行更改时都必须将其导出到 jar 文件中,这将是一个可怕的痛苦。我认为这是引用项目的全部意义,而不是 jar。 Visual Studio 可以轻松处理这个问题。
          • 然后在您的工作流程中引入一个适当的构建系统,该系统支持诸如 Maven 的依赖解析,因此包含的 JAR 每次构建时都会更新
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多