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

标签 java android gradle annotation-processing

我在一个使用 android.os.Bundle 的项目(我称之为 JavaLibrary)中创建了一个 java 注释处理器。因此,该项目在其 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 的行。

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

最佳答案

我不确定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/

相关文章:

java - Java 中类似 Python 的列表推导

java - 打开自定义入站防火墙端口,例如8077 以任何方式在 azure 中使用 java

JAVA GUI 和 AS400 RPGLE

android - 如何使用 Espresso 测试 View 的分割?

android - Gradle 7 和 jitpack.io 在发布期间遇到错误

android-studio - 如何从 Android Studio gradle 构建中排除某些文件?

gradle - 为什么我的 Gradle 任务总是在运行?

java - JasperReports 是否可以很好地替代基于 CGI 的 Web 报告框架

android - 找不到 com.google.plus.platform 的提供商信息

android-studio - 编译项目(:somelibrary) { exclude group: 'com.google.guava' } function exclude not found?