我想知道是否以及如何在dalvik中动态加载dex或class文件,我编写的一些快速的“肮脏”测试函数是这样的:
public void testLoader() {
InputStream in;
int len;
byte[] data = new byte[2048];
try {
in = context.getAssets().open("f.dex");
len = in.read(data);
in.close();
DexFile d;
Class c = defineClass("net.webvm.FooImpl", data, 0, len);
Foo foo = (Foo)c.newInstance();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
而Foo界面是这样
public interface Foo {
int get42();
}
f.dex包含该接口的某些dx实现:
public class FooImpl implements Foo {
public int get42() {
return 42;
}
}
上面的测试驱动程序抛出了defineClass(),它不起作用,我研究了dalvik代码并发现了这一点:
http://www.google.com/codesearch/p?hl=zh_CN#atE6BTe41-M/vm/Jni.c&q=Jni.c ...
所以我想知道是否有人可以启发我,这是否可以通过其他方式实现或不应该实现。如果不可能,那么谁能提供无法实现的理由?
GCT1015
鸿蒙传说
慕姐4208626