Como carregar uma classe Java dinamicamente no android / dalvik?
Gostaria de saber se e como alguém pode carregar arquivos dex ou de classe dinamicamente no dalvik, alguma função de teste rápida que eu escrevi foi a seguinte:
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();
}
}
enquanto a interface Foo é essa
public interface Foo {
int get42();
}
e f.dex contém alguma implementação dx'ed dessa interface:
public class FooImpl implements Foo {
public int get42() {
return 42;
}
}
O driver de teste acima lança em defineClass () e não funciona. Investiguei o código dalvik e descobri o seguinte:
http://www.google.com/codesearch/p?hl=pt_PT#atE6BTe41-M/vm/Jni.c&q=Jni.c...
Então, eu estou me perguntando se alguém pode me esclarecer se isso é possível de alguma outra maneira ou não deveria ser possível. Se não for possível, alguém pode fornecer razões pelas quais isso não é possível?