2012-08-30 20 views
6

मैं अपने एंड्रॉइड एप्लिकेशन में संपत्ति या एसडीकार्ड से बाहरी जार का उपयोग कर रहा हूं। ऐसा करने के लिए मैं DexClassLoader का उपयोग कर रहा हूँ।एंड्रॉइड डेक्सक्लासलोडर सभी कक्षाओं की सूची प्राप्त करें

DexClassLoader cl = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(), 
         optimizedDexOutputPath.getAbsolutePath(), 
         null, 
         getClassLoader()); 

एक वर्ग लोड करने के लिए:

Class myNewClass = cl.loadClass("com.example.dex.lib.LibraryProvider"); 

यह वास्तव में अच्छा काम करता है लेकिन अब मैं अपने DexClassLoader मैं this पाया जावा में काम करने में सभी वर्गों के नामों की सूची प्राप्त करना चाहते हैं लेकिन कोई इस तरह है एंड्रॉइड में बात।

प्रश्न मैं कैसे एक classes.dex फ़ाइल आप DexFile का उपयोग करें, नहीं DexClassLoader, उदा युक्त एक .jar फ़ाइल में सभी वर्गों को सूचीबद्ध करने के DexClassLoader

उत्तर

11

से सभी वर्गों के नामों की सूची प्राप्त कर सकते है इस तरह:

String path = "/path/to/your/library.jar" 
try { 
    DexFile dx = DexFile.loadDex(path, File.createTempFile("opt", "dex", 
      getCacheDir()).getPath(), 0); 
    // Print all classes in the DexFile 
    for(Enumeration<String> classNames = dx.entries(); classNames.hasMoreElements();) { 
     String className = classNames.nextElement(); 
     System.out.println("class: " + className); 
    } 
} catch (IOException e) { 
    Log.w(TAG, "Error opening " + path, e); 
} 
+0

http://developer.android.com/reference/dalvik/system/DexFile.html#loadDex(java.lang.String, java.lang.String, पूर्णांक में टिप्पणी के बावजूद) है कि "इस फ़ंक्शन को सीधे किसी एप्लिकेशन द्वारा नहीं कहा जाना चाहिए" 'DexFile.loadDex()' एक डेक्स फ़ाइल की जांच करने का एकमात्र तरीका प्रतीत होता है - एक सरल 'नई DexFile (फ़ाइल)' 'IoException' फेंकता है। –

+0

जब मैं जार से सभी कक्षाओं को पढ़ने की कोशिश कर रहा हूं, तो मुझे केवल मौजूदा चल रहे एप्लिकेशन से सभी कक्षाएं मिल रही हैं, लेकिन जार फ़ाइल से कक्षाएं नहीं। मुझे नहीं पता कि –

+0

पर क्या चल रहा है क्या आप वास्तविक कक्षाएं प्राप्त कर सकते हैं? – TheRealChx101

संबंधित मुद्दे