评论者:gshayban
来自 Android
{quote}
Android 不运行 Java 字节码,它运行 Dex 字节码。你类转换成的 dexdump 输出很有趣。
JVMS 也并不有趣。Android 不是一个 Java 虚拟机。我们遵循 JLS,但不遵循 JVMS(我们怎么能呢,因为我们不运行 Java 字节码)。因此,所有针对它的上诉都是无关紧要的。我们 试图 使该 JVMS 关于 Dex 字节码的兼容性,但如果你的源代码不是 Java,就没有任何保证。
现在,验证器(可能仍然是)是错误的,即使在我们的(相当糟糕的)规范中也是如此,而且遗憾的是我们不太一致。例如,在Marshmallow中,我们无法正确验证关于结构化锁定的大量代码,将其拒绝为 VerifyError,这与 JVMS 的精神不符。然而,在下一个版本中,这将放宽,并推迟到运行代码时进行检查。
遗憾的是,我们无法对旧版本采取措施,你将不得不解决任何问题。 :-( 我会寻找时间查看你的类。
{quote}
听起来在 Clojure 中进行折中似乎是所有方法中最不利的一步。