2012-08-30 22 views
6

Estoy usando jar externo de activos o sdcard en mi aplicación de Android. Para hacer eso estoy usando DexClassLoader.android dexclassloader obtener la lista de todas las clases

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

cargar una clase:

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

funciona muy bien, pero ahora quiero obtener la lista de todos los nombres de clases en mi DexClassLoader encontré this para trabajar en java, pero no hay tal cosa en Android.

La pregunta es cómo puedo obtener la lista de todos los nombres de clases de DexClassLoader

Respuesta

11

Para una lista de todas las clases en un archivo .jar que contiene un archivo classes.dex utiliza DexFile, no DexClassLoader, por ejemplo, de esta manera:

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

A pesar del comentario en http://developer.android.com/reference/dalvik/system/DexFile.html#loadDex(java.lang.String, java.lang.String, int) que "Esta función no debe ser invocada directamente por una aplicación" 'DexFile.loadDex()' parece ser la única forma de examinar un archivo dex: un simple 'nuevo DexFile (File)' arroja una 'IoException'. –

+0

Cuando intento leer todas las clases del archivo jar, solo obtengo todas las clases de la aplicación en ejecución actual, pero no las clases del archivo jar. No entiendo qué está pasando –

+0

¿Puedes obtener las clases reales? – TheRealChx101

Cuestiones relacionadas