是否存在Java的通用或"胖"类文件?

Has*_*san 8 java android dalvik fat-binaries

一个胖二进制是可在多个架构上运行的二进制.基本上,它由一个编译两次的程序组成,每个架构一次,然后写入同一个文件.可能最着名的例子是Apple的"通用"二进制文件,允许为英特尔和Power PC架构编译程序,并从相同的可执行文件运行.

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

Jes*_*son 5

答: 是的.

您可以创建一个.jar包含JVM友好.class文件和Android友好classes.dex文件的通用文件.该dx如果使用包括在Android SDK工具会发出这样的文件--keep-classes的命令行选项.

请注意,虽然这些.jar文件可以在JVM和Android上使用,但以这种方式打包代码并不是很有用.Android应用程序打包为.apk包含Android清单XML文件的文件.他们使用特定于Android的API Activity,这些API 在JVM上不可用.

.jar如果要对库进行运行时类加载,则通用文件通常很有用.