在Android项目中引用(纯Java)项目(找不到类)

4
我正在尝试在Android项目中引用一个纯Java项目,这个Java项目有许多我需要使用的类。唯一的问题是:我总是得到“无法找到类'XXX',从方法com.example.helloworld.MainActivity.onCreate引用”。我好像错过了某些步骤或出现了错误...?
我已经做的事情:
- 将该项目添加为Java构建路径下的项目(逻辑上必要)。 - 在Java构建路径的“顺序和导出”中标记,并将其推至顶部(当处理Jar文件时,这解决了其他人的问题)。 - 在项目设置中,在“项目引用”中进行标记。 - 在构建路径的“库”下添加了包含相关类的文件夹...我不确定是否需要这样做。
我引用的Java项目有很多Jars,但如果这是原因,我不应该收到不同的错误消息吗?

你找到并修复了实际的问题吗?我遇到了完全相同的问题,纯Java项目引用了其他项目,却收到了有关所引用项目中类和方法的错误信息。 - Lennert
我知道已经过了很长时间,但我刚刚再次发现这个问题。这确实是Java版本的问题,我在设置期间可能搞砸了它们。 - Layna
3个回答

2

我之前遇到了同样的问题,经过几个小时的挫败和搜索,我终于在这里找到了答案:Android,从导入的jar文件找不到类

基本上,问题是引用的纯Java项目或生成的jar是使用Java 1.7构建的,而Android项目设置为使用1.6。


1

有两种方法可以做到这一点。

  • 将Java项目打包成jar文件并将其复制到Android项目的libs文件夹中。
  • 将项目添加为Android项目的依赖项目

两种方法都非常有效。

但请注意,这个纯Java项目必须添加android.jar而不是像rt.jar这样的东西:)否则你会得到Dalvik异常。

编辑: 别忘了刷新和清理你的Android项目。


0

有两件事情需要检查(您提到您正在使用Eclipse):

  1. 如果您的Android项目需要使用纯Java项目的JAR文件,请检查这些JAR文件是否在纯Java项目的构建路径选项中被导出。这是在您尝试包含的纯Java项目的构建路径中,而不是尝试包含它的Android项目的构建路径中。在纯Java项目的“顺序和导出”选项卡下,请注意注释“导出的条目将贡献给依赖项目”。在这种情况下,您的Android项目是依赖项目,而您的纯Java项目需要做出贡献。

  2. 确保纯Java项目实际上已经在IDE中打开,除了您的Android项目。这可能微不足道,但有时会被忽视。

如果答案不够满意,您可能需要提及缺失的类是在.java源文件中还是仅在纯Java项目的构建路径中的JAR文件中找到。

编辑:为了进一步追踪问题,请确认以下内容以确保我理解了您的问题:

  1. 这个纯Java项目在IDE中构建成功。

  2. 当您尝试“构建”Android项目而不是尝试“运行”时,您会遇到“类找不到”的错误。

  3. CLASSPATH(也称为构建路径)可能很难解开。 如果包含该项目无法工作(假设它确实构建),则可以尝试构建纯Java项目的JAR文件,并将其和所有其他JAR文件复制(并包括)到Android项目中。

  4. Android SDK确实使构建环境复杂化。查找问题是(A)您的Android项目设置还是(B)纯Java项目打包方式的一种方法是创建另一个纯Java项目,并尝试包含第一个项目,最好使用与在Android项目中给您带来构建错误的“精确”相同的代码行,如果可能。


我实际上完全错过了第二个问题...仍然不起作用,但这可能是通往那里的路径。而not-found-class是一个源文件,但在某个地方上游依赖于一个Jar。此外,我发现了一个javax包的依赖...我担心我的问题可能就在那里? - Layna
好的,我又遇到问题了,但仍然没有成功。我现在有一个测试项目,纯Java,其中只有一个小类。如果不使用外部类,Android项目(实际上只是一个Hello World)可以完美运行。但是一旦我添加了外部类,虽然构建仍然成功,但当我尝试在我的设备上运行它(Nexus 7,如果这有帮助的话),整个程序就会崩溃。还是非常感谢你们提供的所有指针...我会在能够投票时进行投票的;) - Layna
Java中的NoClassDefFoundError错误是在运行时Java虚拟机无法找到编译时可用的特定类时出现的。我遇到过这个问题很多次,看起来有不同的解决方法。请查看这里的一些答案,几乎肯定是找到正确的方法来包含您的jar文件 - https://dev59.com/BWoy5IYBdhLWcg3wPbyd - user1445967

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接