重新包装的.jar文件(Repackaging the .jar file)

2019-09-16 17:56发布

我需要从JRE7图书馆借了一些jar添加到我的Android项目。 但例如rt.jar与冲突android.jar从2.2的Adroid的SDK,所以我得到这个错误:

不明智或核心类的误使用(java中。*或使用javax。*)时,不建立一个核心库。

这往往是由于在不经意间,包括在应用程序的项目中核心库文件,使用IDE(如Eclipse)时。 如果你确定你不是故意定义一个核心类,那么这是怎么回事的最可能的解释。

然而,你可能实际上是试图确定在核心命名空间中的一类,它的你可能已经采取了,例如,从非Android的虚拟机项目的源代码。 这将最稳妥不起作用。 至少,它危害您的应用程序与平台的未来版本的兼容性。 人们还经常合法性成疑。

如果你真的打算建立一个核心库 - 这是唯一适当的,创建一个完整的虚拟机分配的一部分,而不是编译应用程序 - 然后用“--core库”选项抑制出现此错误消息。

如果你继续使用“--core库”,但事实上构建应用程序,然后谅解,您的应用程序仍然将无法生成或运行,在某些时候。 请为愤怒的客户谁找到,例如准备,您的应用程序停止一旦他们升级其操作系统的功能。 你会责怪这个问题。

如果您正在使用合法一些代码,恰好是一个核心包,那么你有最简单安全的替代是重新包装的代码。 也就是说,移动有问题的类到自己的包命名空间。 这意味着他们将永远不会与核心系统类冲突。 JarJar是一个工具,可以帮助你在这一努力。 如果你发现你不能做到这一点,那么这是一个迹象,你是在路径将最终导致疼痛,痛苦,悲伤和哀悼。

我知道已经有关于它的几个线程之类的东西JarJar , OneJar或FatJar可能是为我好。 但我不知道如何使它们中的任何工作和文件并没有真正说清楚(对我来说)。 我猜他们使用Ant的命令,但我一直使用的Eclipse内置的建设者,现在我不知道怎么用都不蚂蚁也不是上述任何。

所以我的问题是:我怎么能改装这个rt.jar的,所以我可以在我的Android项目编译它?

谢谢!

编辑:

好了,我想达到的目标是创建一个.jar,它可以开发Android应用程序中使用(简化一些功能,其实并不重要)。 但我也想能够非常相同的.jar添加到标准的Java项目,才能使用某些功能有作为。 它应该是这样的:谁写的应用程序添加此的.jar他的Java项目 - >这使他产生某些文件(需要互联网这样做) - >这些生成的文件,然后添加到Android项目 - >以后,当有人使用这个Android应用程序,这些文件提供某些功能,而不会使用互联网(离线)。

Answer 1:

这将是不明智的做到这一点在所有的任何项目,即使它是可能的。 你会打开自己的财富阶层不兼容和负载问题。 但在任何情况下,它甚至没有问题,因为核心Java库加载方式之前,你的存档也摸不着,在覆盖他们没有实际意义做任何这样的尝试。

不要连谈论的事实,Android是使用自己的JVM实现这与JDK 6(忘了JDK 7)完全兼容。 另外请注意,它可能是一个侵犯版权打包你的代码的核心Java库和可以改变你的许可选项(IANAL)。

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



Answer 2:

有许多关于Android和对经典的Java很好地工作的JAR文件。 无涉及使Android开发海盗rt.jar 。 坚持java.*javax.*是同时存在于Android SDK和在任何Java的水平你是支持类,和你的JAR会在两种环境下正常工作。



Answer 3:

理论上,应该使用这样的.jar文件避免,但如果你一定要,你可以将它们添加到构建路径。 但对此,有时会导致冲突,像你所面对现在的一个。 你需要做的,解决这种冲突的什么,就是:

  1. 添加JAR在构建路径。
  2. 检查“引用的库”。 JAR文件中应该会出现在相同的。
  3. 一旦它在引用的库功能,勾选“Android的依赖关系”虚拟目录。 如果你能看到,你有相同的jar文件的实例,有作为,你应该完全删除了“Android的依赖关系”的文件夹。 (相信我,这不以任何方式影响你的项目)。
  4. 已经做了,你应该能够编译代码没有任何进一步的冲突。

编码愉快.. :)



文章来源: Repackaging the .jar file