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

我正在尝试在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 (从这里下载文件)。 但是,仍然会抛出exception。

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

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

有一个Android版本的sun.misc.Unsafe (见这里 ),但它不包括那个特定的方法。 (我假设该方法是在Java 7中引入的……)

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

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

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