सबसे पहले मैंने Load Java-Byte-Code at Runtime देखा है और यह अब तक एक ही स्थान पर पहुंचने में सहायक था, मैं वर्तमान में अटक गया हूं।एंड्रॉइड में बाइट सरणी से कक्षा को कैसे लोड करें?
डिस्क पर फ़ाइल संग्रहीत करने से बचने के लिए मैं एक बाइट सरणी से कक्षा लोड करने की कोशिश कर रहा हूं। इस उदाहरण में परीक्षण के उद्देश्य के लिए मैं बस एक .class फ़ाइल में बाइट सरणी में पढ़ रहा हूं, इसलिए जाहिर है कि फ़ाइल अभी भी डिस्क पर संग्रहीत है, लेकिन यह देखने के लिए है कि कोड काम कर सकता है या नहीं।
मैं इस बाइट सरणी लेता हूं और फिर कक्षा लोड करने के लिए विधि loadClass के साथ एक कस्टम क्लासलोडर का उपयोग करता हूं, लेकिन यह काम नहीं करता है।
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");
}
यहाँ 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;
}
और त्रुटि मैं प्राप्त कर रहा है:
java.lang.UnsupportedOperationException: पर वर्ग फ़ाइल के इस प्रकार लोड नहीं कर सकता java.lang.VMClassLoader.defineClass (मूल विधि)
मैंने इसे .class फ़ाइलों, .dex फ़ाइलों, .apk, .jar, आदि के साथ आपूर्ति की है ... मुझे नहीं पता कि व्हा टी "वर्ग फ़ाइल का प्रकार" यह मुझसे चाहता है और उस पर प्रलेखन nonexistent है। कोई मदद महान होगी मैं इस काम को चार दिनों के लिए सीधे प्राप्त करने की कोशिश कर रहा हूं।
http://stackoverflow.com/a/3024261/61855 – theomega
मैं अभी भी भी डेक्स फ़ाइलें/जार फ़ाइलों का उपयोग कर "UnsupportedOperationException" का एक ही त्रुटि संदेश मिल रहा। आपने अपने उदाहरण से क्या किया? – HumanCentipedeLinkedList
आप कौन परेशान कर रहे हैं? मेरे? यदि आप मेरे प्रश्न से जुड़े प्रश्न का संदर्भ देते हैं: मैं इस परियोजना के लिए एंड्रॉइड का उपयोग नहीं कर रहा था, इसलिए वहां कोई समस्या नहीं है। – theomega