依赖于android.os的Java库在使用时会导致NoClassDefFoundError

时间:2013-10-03 18:05:18

标签: java android gradle annotation-processing

我在项目中创建了一个java注释处理器(我称之为JavaLibrary),它使用了android.os.Bundle。因此,该项目的gradle.build依赖项中包含以下行:

compile 'com.google.android:android:4.1.1.4'

在gradle.build中,sourceCompatibilitytargetCompatibility都设置为1.6版,这个项目自行编译得很好。

我还创建了一个依赖于JavaLibrary的Android库项目(我称之为AndroidLibrary)。我期待JavaLibrary处理AndroidLibrary中使用的一些注释并生成一些代码。

然而,当我尝试编译AndroidLibrary时,我收到以下错误:

java.lang.NoClassDefFoundError: android/os/Bundle

堆栈跟踪显示了JavaLibrary中引用android.os.Bundle的行。

为什么会发生这种情况,如何让这两个项目一起编译?

1 个答案:

答案 0 :(得分:0)

我对gradle部件不确定。我们构建的Android操作系统jar只是API存根,不应该导出,因为它们是"提供"通过设备。

要在Java项目中使用Android类,只要它们(及其依赖项)不引用本机或内部代码,您就可以将所需的Java源文件复制到Java项目中。

不确定为什么你需要一个捆绑包,但这里有一个链接到GrepCode的副本来源:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2.1_r1/android/os/Bundle.java