我尝试在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?
答案 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替换它们,它可以做同样的事情而不需要具体的类或者为一次性“实例”调用构造函数。