【问题标题】:Android sub-library not in build pathAndroid 子库​​不在构建路径中
【发布时间】:2014-07-22 08:08:24
【问题描述】:

我目前正在制作一个使用我制作的库(我们称之为 parentLib)的应用程序。这个库还使用了我制作的另一个库(我们称之为 childLib)。所以顶级应用程序包含一个 .jar 文件(parentLib),并且在该 .jar 文件中是另一个 .jar 文件(childLib)。

但问题是,当我从顶级应用程序中使用子库 (childLib) 的某个方面时,我收到一条 NoClassDefFoundError 消息,导致应用程序崩溃。

奇怪的是,如果我将子库 (childLib) 直接添加到库 (parentLib) 旁边的应用程序的 libs 文件夹中,那么即使它实际上并没有使用这些库文件,也可以正常工作。似乎它只需要将子库(childLib)添加到库(parentLib)的构建路径中,以便应用知道在哪里寻找它,但我真的不确定?

子库 (childLib) 在直接从初始应用程序中使用时可以完美运行,但我需要能够将子库 (childLib) 作为包含它的单个文件 (parentLib.jar) 的一部分进行分发。

非常感谢任何帮助,在此先感谢!

【问题讨论】:

  • 您的项目库的 Java 构建路径是否导出 Android 依赖项?在 Eclipse 中,您可以在该项目的属性下,在“Java Build Path”下,在“Order and Export”选项卡下进行检查。
  • 是的,它正在导出 Private Dependencies 和 Android Dependencies,以及它自己的 /src 和 /gen 目录(我已经尝试按照类似问题的另一个答案将它们以相反的顺序排列。
  • 有问题的jar是否出现在Android私有库列表中?在 Eclipse 中,您可以在该项目的属性下,在“Java Build Path”下,在“Libraries”选项卡下进行检查;展开“Android Private Libraries”条目以查看所有 jar。
  • 以及后续问题:jar是否也出现在应用项目的私有库中?
  • parentLib 的 .jar 在其私有库中包含 childLib.jar。该应用程序在其私有库中包含 parentLib.jar,但不包含 childLib。

标签: java android jar libraries noclassdeffounderror


【解决方案1】:

...我需要能够将子库 (childLib) 作为包含它的单个文件 (parentLib.jar) 的一部分进行分发。

您可以在同一个包下“合并”parentLibchildLib(我的意思是“合并”它们的源文件夹),然后才创建用于分发的 jar。

【讨论】:

  • 合并是可能的,但会使事情变得有些复杂。由于 parentLib.jar 将始终分发,但 childLib 有时只会分发。允许这样做的功能是供以后使用。
【解决方案2】:

我相信,在 android 中,在项目“A”中,您只能从库“B”中引用一个类“b” >',当且仅当 'B' 直接添加到 'A' 中,作为库或项目引用。要么将这两个库设为一个,要么将两者都添加到主项目中。

【讨论】:

  • 你有这方面的资料吗?好像这是最终的“规则”,那么它对这里的预期结果非常有害:(
  • 我有一个类似的问题,这也与循环依赖有关。我试图从我的父项目访问文件,但在我的情况下它不起作用。我相信,我不确定.. 我的问题在这个链接中:stackoverflow.com/questions/23803409/…
【解决方案3】:

已通过迁移到 Android Studio 解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2012-02-22
    • 2014-04-20
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多