我在一个使用 android.os.Bundle 的项目(我称之为 JavaLibrary)中创建了一个 java 注释处理器。因此,该项目在其 gradle.build 依赖项中有以下行:
compile 'com.google.android:android:4.1.1.4'
在 gradle.build 中,
sourceCompatibility
和 targetCompatibility
都设置为 1.6 版,并且该项目可以自行编译。我还创建了一个依赖于 JavaLibrary 的 Android 库项目(我将其称为 AndroidLibrary)。我期待 JavaLibrary 处理 AndroidLibrary 中使用的一些注释并生成一些代码。
但是,当我尝试编译 AndroidLibrary 时,出现以下错误:
java.lang.NoClassDefFoundError: android/os/Bundle
堆栈跟踪显示了在 JavaLibrary 中引用 android.os.Bundle 的行。
为什么会发生这种情况,我如何让这两个项目一起编译?
最佳答案
我不确定gradle部分。我们构建的 Android OS jar 只是 API stub ,不应导出,因为它们是由设备“提供”的。
要在 Java 项目中使用 Android 类,您可以将所需的 Java 源文件复制到您的 Java 项目中,只要它们(及其依赖项)不引用 native 或内部代码。
不知道为什么你需要一个 bundle ,但这里有一个链接到 GrepCode 的源代码副本:
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2.1_r1/android/os/Bundle.java
关于依赖于 android.os 的 Java 库在使用时会导致 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19166074/