java.lang.NoSuchMethodError sun.misc.Unsafe与Android上的外部Jar

时间:2014-07-12 13:39:36

标签: java android

我尝试在Android上使用sun.misc.Unsafe的Java库jar。对库的调用会抛出一个

java.lang.NoSuchMethodError: No virtual method ensureClassInitialized(Ljava/lang/Class;)V in class Lsun/misc/Unsafe; or its super classes (declaration of 'sun.misc.Unsafe' appears in /system/framework/core-libart.jar)

据我所知,sun.misc.Unsafe不是Android API的一部分。所以我尝试手动将sun.misc.Unsafe包含在我的应用中(从here下载文件)。但是,仍然会抛出异常。

任何想法,我如何在Android上使用库jar?

2 个答案:

答案 0 :(得分:3)

  

任何想法,我如何在Android上使用库jar?

sun.misc.Unsafe的Android版本(请参阅here),但它并未包含该特定方法。 (我假设该方法是在Java 7中引入的......)

在Dalvik / Android上使用OpenJDK版本的Unsafe无法正常工作,因为它依赖于Dalvik VM未实现的本机方法。 (看起来你甚至没有设法让Davlik加载OpenJDK版本而不是Android版本。)

请注意,某些Unsafe方法可以在Android上使用...但只能使用我链接到的类版本中的方法。

答案 1 :(得分:0)

您必须从源重建库并取出对ensureClassInitialized的调用。用allocateInstance替换它们,它可以做同样的事情而不需要具体的类或者为一次性“实例”调用构造函数。