Prima di tutto ho visto Load Java-Byte-Code at Runtime ed è stato utile per arrivare a me nello stesso punto in cui sono bloccato al momento.Come caricare una classe da un array di byte in Android?
Sto provando a caricare una classe da un array di byte per evitare di archiviare un file su disco. Per scopi di test in questo esempio sto semplicemente leggendo in un file .class in un array di byte, quindi ovviamente il file è ancora memorizzato su disco, ma è solo per vedere se il codice può funzionare.
Prendo questo array di byte e quindi utilizzo un ClassLoader personalizzato con il metodo loadClass per caricare una classe, ma non funziona.
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");
}
Ecco l'attuazione 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;
}
E l'errore che sto ricevendo è questo:
java.lang.UnsupportedOperationException: non può caricare questo tipo di file di classe a java.lang.VMClassLoader.defineClass (metodo nativo)
L'ho fornito con file .class, file .dex, .apk, .jar, ecc ... Non ho idea di cosa t "tipo di file di classe" vuole da me e la documentazione su di esso è inesistente. Qualsiasi aiuto sarebbe fantastico. Ho cercato di ottenere questo lavoro per quattro giorni di seguito.
http://stackoverflow.com/a/3024261/61855 – theomega
sto ancora ricevendo lo stesso messaggio di errore di "UnsupportedOperationException", anche utilizzando i file DEX file/vaso. Cosa hai fatto nel tuo esempio? – HumanCentipedeLinkedList
Chi stai frequentando? Me? Se fai riferimento alla mia domanda che hai collegato: non stavo usando Android per questo progetto, quindi non ci sono problemi lì. – theomega