在Android上运行Java字节码 - 在DalvikVM上运行Sun JVM

时间:2009-03-22 13:09:55

标签: java android clojure jvm

由于java实现(OpenJDK)和Android的虚拟机DalvikVM都是开源的,因此必须能够在Google的DalvikVM上实现Sun的JavaVM。这样就可以在Android上运行基于JVM的应用程序和语言(Clojure, Jython)开箱即用。

是否正在不断努力生成Sun JVM的这种实现?

7 个答案:

答案 0 :(得分:13)

OpenJDK使用本机代码,因此它将是一个非平凡的端口......至少有一个用Java编写的VM(JikesRVM),遗憾的是它不是一个完全有效的实现Java的。

由于DalvikVM运行从.class文件转换的类,因此应该可以转换类。然后“唯一”问题是语言在运行时生成字节码 - 因为在程序在DalvikVM上运行时需要额外的步骤将生成的字节码转换为DalvikVM格式。

嗯....类似于JITT(即时转换器),它在运行时将类文件转换为DalvikVM文件。我想知道会有多缓慢。

答案 1 :(得分:9)

可以将OpenJDK移植到Android平台。有很多努力:Shark,Zero和caciocavallo极大地简化了端口进程(=没有ASM,简单的AWT对等体)。加上Android只不过是一个Linux内核。唯一的问题是什么时候会由任何人来完成?

顺便说一句,iphone和Android手机都有Jazelle兼容的处理器,非常欢迎有一个非常强大的处理器黑客技能的人加入Jazelle对OpenJDK的支持。 这样做,我们可以选择:非常轻的资源加速(Jazelle)和JIT; - )

关于iPhone,它是一样的:一个端口是可能的。只有Apple在iPhone许可证中放置了一个明确禁止VM使用的部分。根据欧洲法律,对我来说,此许可证部分是非法的。两个原因:你不能强迫/链接购买你的两个产品。在这里我调和Iphone是链接的。你不能拒绝出售你可以出售的东西。一旦VM为iPhone构建,如果拒绝将其放在iTune商店上,那么这一点将适用。有没有人想要在地球上挑战Apple许可合法性?我不这么认为,不快乐的人会飞到Android或任何其他平台。

答案 2 :(得分:1)

与此同时,我找到了一个可能的解决方案(仅限JavaME):

答案 3 :(得分:1)

从技术上讲,应该可以解释dalvik vm上的热点字节码或dalvik在热点上的字节码,但从长远来看,它永远不会有效(不提优雅)设计。这样做的成本可能会非常高,特别是在这种分裂生态系统的未来发展方面的维护方面。

我认为,从一开始,dalvik vm就是权力/市场控制的问题,而不是改进java虚拟机生态系统的创新努力。 dalvik vm和hotspot vm是横跨同一条河的两座公路桥梁,彼此相距五米。它为Java技术生态系统划分并带来了混乱。

在我看来,google绝对是过去十年中创新贡献的技术领导者,这使得更为保守的oracle相形见绌,但在这个主题中,他们以近乎破坏性的方式动摇了java生态系统。我们(程序员)应该为这个问题争取一个统一的解决方案。无论如何,这是“虚拟机”概念背后的主要思想 - 它既不属于谷歌也不属于甲骨文。

答案 4 :(得分:0)

我认为问题不是技术问题。理论上你可以将OpenJDK迁移到iPhone,但是存在法律限制。

答案 5 :(得分:0)

有关Android ARM apks的MIDP,Foundation和Personal Profile jvms,请参阅http://davy.preuveneers.be/phoneme/。 (谢谢Davy !!!)

我已经重新打包了基金会jvm以供命令行使用,并将它托管在vkfox.com/android/bin/foundation-jvm.bin,以便您享受。可以使用JavaIDEdroid免费应用程序中的eclipse编译器,或者使用此jvm的旧kopi或kopisusu编译器,使用来自J2ME jdk的存根cdc + foundation jar文件进行板载开发系统。使用TerminalIDE的功能 - 控制台和sun编译器 - 带有指示的参考罐也可以帮助你。这基本上相当于具有MIDP或awt图形可能性的无头jdk1.4。

答案 6 :(得分:0)

尝试使用debian Wheezy的GNURoot应用程序(proot ptrace容器);
apt-get update
apt-get install openjdk-7-jre
/ usr / lib / jvm / java-7-openjdk-armel / jre / bin / java ...
(包括长路)