2012-08-30 14 views
6

Używam zewnętrznego słoika z zasobów lub sdcard w mojej aplikacji Android. Aby to zrobić, używam DexClassLoader.Android dexclassloader uzyskać listę wszystkich klas

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

załadować klasę:

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

to działa naprawdę ładne, ale teraz chcę listę wszystkich nazw klas dostać w moim DexClassLoader znalazłem this pracować w Javie, ale nie ma takiego rzecz w androidzie.

Pytanie brzmi, jak mogę uzyskać listę wszystkich nazw klas z DexClassLoader

Odpowiedz

11

Aby wyświetlić listę wszystkich klas w .jar zawierającego plik classes.dex użyć DexFile, a nie, na przykład DexClassLoader tak:

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

Pomimo komentarz w http://developer.android.com/reference/dalvik/system/DexFile.html#loadDex(java.lang.String, java.lang.String, int), które "Ta funkcja nie powinna być wywoływana bezpośrednio przez aplikację" 'DexFile.loadDex()' wydaje się być jedynym sposobem sprawdzenia pliku dex - prosty 'nowy DexFile (plik)' rzuca 'IoException'. –

+0

Kiedy próbuję odczytać wszystkie klasy ze słownika, pobierane są tylko wszystkie klasy z bieżącej działającej aplikacji, ale nie klasy z pliku JAR. Nie rozumiem, co się dzieje –

+0

Czy możesz uzyskać faktyczne zajęcia? – TheRealChx101

Powiązane problemy