我想知道是否以及如何在dalvik中动态加载dex或类文件,我写的一些quick'n'dirty测试函数是这样的:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
而Foo界面就是这样
public interface Foo {
int get42();
}
Run Code Online (Sandbox Code Playgroud)
和f.dex包含该接口的一些dx'ed实现: …
我得到了一些在我的程序中生成的java-byte-code(如此编译的java-source).现在我想将这个字节码加载到当前运行的Java-VM中并运行一个特定的函数.我不知道如何实现这一点,我在Java类加载器中挖掘了一点,但没有找到直接的方法.
我找到了一个解决方案,它在硬盘上采用了一个类文件,但是我得到的字节码是在字节数组中,我不想把它写到磁盘上而是直接使用它.
谢谢!