2012-08-30 14 views
6

Tôi đang sử dụng bình bên ngoài từ tài sản hoặc sdcard trong ứng dụng Android của mình. Để làm điều đó tôi đang sử dụng DexClassLoader.android dexclassloader lấy danh sách tất cả các lớp

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

để nạp một lớp:

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

nó hoạt động thực sự tốt đẹp, nhưng bây giờ tôi muốn để có được danh sách của tất cả các tên lớp trong DexClassLoader tôi tôi thấy this làm việc trong java nhưng không có như vậy điều trong Android.

Câu hỏi là làm thế nào tôi có thể nhận được danh sách của tất cả các tên lớp từ DexClassLoader

Trả lời

11

Để liệt kê tất cả các lớp trong một file .jar chứa một tập tin classes.dex bạn sử dụng DexFile, không DexClassLoader, ví dụ như thế này:

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

Mặc dù nhận xét trong http://developer.android.com/reference/dalvik/system/DexFile.html#loadDex(java.lang.String, java.lang.String, int) "Chức năng này không nên được gọi trực tiếp bởi một ứng dụng" 'DexFile.loadDex()' có vẻ là cách duy nhất để kiểm tra một tệp dex - một 'DexFile (File) 'đơn giản mới ném một' IoException'. –

+0

Khi tôi đang cố gắng đọc tất cả các lớp trong lọ, tôi chỉ nhận tất cả các lớp từ ứng dụng đang chạy, nhưng không phải là các lớp từ tệp jar. Tôi không hiểu những gì đang xảy ra –

+0

Bạn có thể nhận được các lớp học thực tế không? – TheRealChx101