2014-07-12 63 views
1

我想在Android上使用一個Java庫jar,使用sun.misc.Unsafe。到庫的調用拋出一個java.lang.NoSuchMethodError sun.misc.Unsafe與Android上的外部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

該庫使用'sun。*'包中的類來請求麻煩。有一個原因,爲什麼不應該這樣做。 – Henry

+1

這是否意味着該庫在Android上不可用?有什麼辦法可以使它工作嗎? –

回答

3

任何想法,我怎麼能在Android上使用庫jar?

有一個Android版sun.misc.Unsafe(見here),但它不包括那個特定的方法。 (我認爲該方法是在Java 7中引入的......)

在Dalvik/Android上使用OpenJDK版本Unsafe將無法​​使用,因爲它取決於Dalvik虛擬機未實現的本地方法。 (看起來你甚至沒有設法讓Davlik加載OpenJDK版本,而不是Android版本。)

請注意,某些Unsafe方法可用於Android ...但只有版本中的方法我連接到的類。

0

您必須從源重建庫並取出ensureClassInitialized調用。將它們替換爲allocateInstance,它可以做同樣的事情,而不需要該類是具體的,或者調用一次性「實例」的構造函數。