是否存在一个通用的“或”;fat“;Java的类文件?

是否存在一个通用的“或”;fat“;Java的类文件?,java,android,dalvik,fat-binaries,Java,Android,Dalvik,Fat Binaries,是可以在多个体系结构上运行的二进制文件。基本上,它包括一个编译两次的程序,每个架构编译一次,然后写入同一个文件。可能最著名的例子是苹果的“通用”二进制文件,它允许为英特尔和PowerPC架构编译程序,并从同一个可执行文件运行 这对Java来说从来都不是问题,因为Java在JVM上运行,允许它从任何支持JVM的计算机上运行。然而,Android现在非常流行,Android的VM(Dalvik)与JVM不兼容。是否有某种方法可以编译代码两次,并创建一个可以由JVM和Dalvik执行的类文件?如果没有

是可以在多个体系结构上运行的二进制文件。基本上,它包括一个编译两次的程序,每个架构编译一次,然后写入同一个文件。可能最著名的例子是苹果的“通用”二进制文件,它允许为英特尔和PowerPC架构编译程序,并从同一个可执行文件运行

这对Java来说从来都不是问题,因为Java在JVM上运行,允许它从任何支持JVM的计算机上运行。然而,Android现在非常流行,Android的VM(Dalvik)与JVM不兼容。是否有某种方法可以编译代码两次,并创建一个可以由JVM和Dalvik执行的类文件?如果没有,这可能吗?

回答:

您可以创建一个通用的
.jar
文件,其中既包含JVM友好的
.class
文件,也包含一个Android友好的
classes.dex
文件。如果使用
--keep classes
命令行选项,Android SDK中包含的
dx
工具将发出此类文件

请注意,尽管这样的
.jar
文件可以在JVM和Android上使用,但以这种方式打包代码并不是很有用。Android应用程序打包为
。apk
文件包括一个Android清单XML文件。它们使用的是Android特定的API,如JVM上不可用的
Activity


如果你想对库进行运行时类加载,一个通用的
.jar
文件将非常有用。

如果你在Android上发布Java+Dalvik类文件,我绝对不会使用你的应用程序。移动应用程序应该很小,包含的无用数据应该尽可能少。@cdhowie这种技术在硬件架构中非常有效。二进制文件占用的空间不如应用程序使用的其他资源(例如图像)多。我想这取决于应用程序。这会在审判中作为证据显示吗?Sun/Oracle JVM不会识别包含不相关“垃圾”的.class文件,除非你能以某种方式将其伪装成字符串数据或其他什么。Android的开发人员可能会修改Dalvik VM以接受混合文件,但这会非常难看(据我所知,目前还不存在您所描述的内容)