2012-08-30 3 views
6

내 안드로이드 응용 프로그램의 자산 또는 sdcard에서 외부 jar를 사용하고 있습니다. 이렇게하려면 DexClassLoader를 사용하고 있습니다. 정말 좋은 작동하지만 지금은 내가 자바에서 일하기 this을 발견 내 DexClassLoader의 모든 클래스 이름의 목록을 얻으려면android dexclassloader 모든 클래스 목록 가져 오기

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

하지만 그런는 없다 :

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

클래스를로드 안드로이드에있는 것.

질문은 내가 예를 들어, 당신이 DexFile을 사용하십시오 classes.dex 아니라 파일 DexClassLoader을 포함하는 .jar 파일에있는 모든 클래스를 나열하려면 DexClassLoader

답변

11

에서 모든 클래스 이름의 목록을 얻을 수있는 방법이다 이 같은 : http://developer.android.com/reference/dalvik/system/DexFile.html#loadDex(java.lang.String, java.lang.String의, INT의 의견에도 불구하고

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

) 그 "이 함수는 응용 프로그램에서 직접 호출하면 안됩니다."DexFile.loadDex()는 dex 파일을 검사하는 유일한 방법 인 것처럼 보입니다. 간단한 새 DexFile (File)이 IoException을 던집니다. –

+0

jar에서 모든 클래스를 읽으려고 할 때, 현재 실행중인 응용 프로그램의 모든 클래스 만 가져오고 jar 파일의 클래스는 가져 오지 않습니다. 무슨 일이 벌어지고 있는지 모르겠다 –

+0

실제 수업을들을 수 있습니까? – TheRealChx101