So laden Sie eine Klasse aus einem byte-array in android?

First off, die ich gesehen habe Laden von Java-Byte-Code zur Laufzeit und es war hilfreich, in so weit wie immer zu mir an der gleichen Stelle bin ich stecken momentan.

Ich versuche eine Klasse zu laden, die aus einem byte-array zu vermeiden, die Speicherung einer Datei auf der Festplatte. Für Testzwecke in diesem Beispiel, bin ich einfach Lesen .class-Datei in ein byte-array, so dass offensichtlich die Datei noch auf der Festplatte gespeichert, aber es ist nur zu sehen, wenn der code funktionieren kann.

Nehme ich dieses byte array und verwenden Sie dann eine benutzerdefinierte Klassenlader mit der Methode loadClass eine Klasse zu laden, aber es funktioniert nicht.

    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");
    } 

Hier ist die ClassLoader-Implementierung:

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;
}

Und die Fehler ich erhalte, ist dies:

java.lang.UnsupportedOperationException: kann nicht geladen werden dieser Art von class-Datei
bei java.lang.VMClassLoader.defineClass(Native-Methode)

Habe ich versorgte Sie mit .class-Dateien .dex-Dateien .apk, .jar, etc... ich habe keine Ahnung, was für eine "Art von class-Datei", es will von mir und die Dokumentation nicht vorhanden ist. Jede Hilfe wäre toll, ich habe versucht, diese Arbeit für vier Tage gerade.

  • stackoverflow.com/a/3024261/61855
  • Ich bin noch immer die gleiche Fehlermeldung "UnsupportedOperationException" auch über die dex-Dateien / jar-Dateien. Was hast du am Ende machst aus deinem Beispiel?
  • Wer seid Ihr anderen? Mich? Wenn Sie den Bezug zu meiner Frage, auf die Sie verlinkt: ich war nicht mit Android für dieses Projekt, so dass keine Probleme gibt.
  • Android-26 hat InMemoryDexClassLoader developer.android.com/reference/dalvik/system/...
Schreibe einen Kommentar