2

我需要将一些 JRE7 库中的 jar 添加到我的 Android 项目中。但例如rt.jarandroid.jar来自 Adroid 2.2 SDK 的冲突,所以我得到这个错误:

不构建核心库时对核心类(java.* 或 javax.*)的不明智或错误使用。

这通常是由于在使用 IDE(例如 Eclipse)时无意中在应用程序的项目中包含了核心库文件。如果您确定您不是故意定义核心类,那么这是对正在发生的事情的最可能的解释。

但是,您实际上可能正在尝试在核心命名空间中定义一个类,例如,您可能从非 Android 虚拟机项目中获取了该类的源代码。这肯定是行不通的。至少,它会危及您的应用程序与平台未来版本的兼容性。它的合法性也经常受到质疑。

如果你真的打算构建一个核心库——它只适合作为创建完整虚拟机发行版的一部分,而不是编译应用程序——然后使用“--core-library”选项来抑制这个错误消息。

如果您继续使用“--core-library”,但实际上正在构建应用程序,那么请预先警告您的应用程序在某些时候仍将无法构建或运行。请为愤怒的客户做好准备,他们会发现,例如,一旦他们升级操作系统,您的应用程序就会停止运行。你会为这个问题负责。

如果您合法地使用了一些恰好位于核心包中的代码,那么您拥有的最简单安全的替代方法是重新打包该代码。也就是说,将有问题的类移动到您自己的包命名空间中。这意味着它们永远不会与核心系统类发生冲突。JarJar 是一个可以帮助您完成这项工作的工具。如果你发现你做不到这一点,那么这表明你所走的道路最终会导致痛苦、痛苦、悲伤和悲叹。

我知道有几个关于它的话题,像JarJarOneJarFatJar这样的东西可能对我有好处。但是我不知道如何使它们中的任何一个起作用,并且文档并没有真正说明(对我而言)。我猜他们使用 Ant 命令,但我一直使用 Eclipse 内置构建器,现在我不知道如何使用 Ant 和上面提到的任何命令。

所以我的问题是:如何重新打包这个 rt.jar 以便在我的 Android 项目中编译它?

谢谢!

编辑:

好的,所以我想要实现的是创建一个.jar,可以在开发Android应用程序时使用(简化一些功能,没关系)。但我也希望能够将相同的 .jar 添加到标准 Java 项目中,以便在那里使用一些功能。它看起来像这样:编写应用程序的人将此 .jar 添加到他的 Java 项目中 -> 它使他能够生成某些文件(需要 Internet 来完成)-> 然后将这些生成的文件添加到 Android 项目中 -> 稍后,当有人使用这个 Android 应用程序时,这些文件在不使用互联网(离线)的情况下提供某些功能。

4

3 回答 3

3

即使有可能,在任何项目中都这样做是不明智的。您将面临大量的类不兼容和加载问题。但在任何情况下,这甚至都无关紧要,因为核心 Java 库在您的档案被触及之前就已加载,因此任何覆盖它们的尝试都没有实际意义。

更不用说 Android 正在使用自己的 JVM 实现,它与 JDK 6 不完全兼容(忘记 JDK 7)。另请注意,将核心 Java 库与您的代码打包可能会侵犯版权,并且可能会更改您的许可选项 (IANAL)。

您需要找到另一种方法来解决您遇到的任何问题(您在问题中没有提到)。

于 2012-04-25T12:25:32.643 回答
0

有许多 JAR 在 Android 和经典 Java 上都能很好地工作。没有涉及让 Android 开发人员盗版rt.jar。坚持Android SDKjava.*javax.*您支持的任何 Java 级别中存在的类,您的 JAR 将在这两种环境中正常工作。

于 2012-04-26T14:53:44.360 回答
0

理想情况下,您应该避免使用此类 .jar 文件,但如果必须,您可以将它们添加到构建路径中。但这有时会导致冲突,就像你现在面临的那样。要解决这种冲突,您需要做的是:

  1. 在构建路径中添加 jar。
  2. 检查“引用的库”。jar 文件应该出现在相同的下面。
  3. 一旦它在引用的库下具有功能,请检查“android依赖项”虚拟目录。如果您看到那里也有相同 jar 文件的实例,则应该完全删除“android 依赖项”文件夹。(相信我,这不会以任何方式影响您的项目)。
  4. 完成后,您应该能够编译您的代码而不会发生任何进一步的冲突。

快乐编码.. :)

于 2013-01-18T12:55:23.480 回答