首先我已經看過Load Java-Byte-Code at Runtime,這對於我到目前爲止被卡住的同一個位置是有幫助的。如何從android中的字節數組加載類?
我想從字節數組中加載一個類,以避免在磁盤上存儲文件。在這個例子中,爲了測試目的,我只是簡單地將.class文件讀入字節數組中,顯然這個文件仍然存儲在磁盤上,但它只是查看代碼是否可以工作。
我把這個字節數組,然後使用一個自定義ClassLoader與loadClass方法來加載一個類,但它不起作用。
byte[] bytearray = null;
try{
RandomAccessFile f = new RandomAccessFile("/sdcard/ClassToGet.dex", "r");
bytearray = new byte[(int) f.length()];
f.read(bytearray);
MyClassLoader classloader = new MyClassLoader();
classloader.setBuffer(bytearray);
classloader.loadClass("com.pack.ClassIWant");
}
下面是ClassLoader的實現:
public class MyClassLoader extends DexClassLoader {
private byte[] buffer;
@Override
public Class findClass(String className){
byte[] b = getBuffer();
return this.defineClass(className, b, 0, b.length);
}
public void setBuffer(byte[] b){
buffer = b;
}
public byte[] getBuffer(){
return buffer;
}
而且我收到的錯誤是這樣的:
java.lang.UnsupportedOperationException:在無法加載此類型的類文件 的java.lang.VMClassLoader.defineClass(Native Method)
我提供了.class文件,.dex文件,.apk,.jar等等......我不知道wha t「類文件」它從我和它的文檔是不存在的。任何幫助都會很好,我一直試圖讓這項工作連續四天。
http://stackoverflow.com/a/3024261/61855 – theomega 2012-08-04 08:12:35
我仍然得到「UnsupportedOperationException異常」的相同的錯誤消息,即使使用DEX文件/ jar文件。你的例子最終會做什麼? – HumanCentipedeLinkedList 2012-08-06 17:29:01
你是誰?我?如果你參考我的問題,你鏈接:我沒有使用Android的這個項目,所以沒有問題。 – theomega 2012-08-06 18:59:00