2012-08-30 9 views
6

私はAndroidアプリケーションのアセットまたはSDカードから外部ジャーを使用しています。これを行うには、DexClassLoaderを使用しています。android dexclassloaderすべてのクラスのリストを取得

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

クラスをロードする:

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

それは本当に素敵な作品が、今、私は私のDexClassLoader 内のすべてのクラス名のリストを取得したい私はJavaで動作するようにthisが見つかりましたが、そのようなはありませんアンドロイドの事。

質問は、私は、例えば、DexClassLoader、あなたがDexFileを使用classes.dexファイルを含む.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で、int型でコメントにもかかわらず)その:このような"この関数はアプリケーションから直接呼び出されるべきではありません" DexFile.loadDex()はdexファイルを調べる唯一の方法です - 単純な '新しいDexFile(File)'は 'IoException'をスローします。 –

+0

私はjarからすべてのクラスを読み込もうとしていますが、現在実行中のアプリケーションからすべてのクラスを取得しますが、jarファイルのクラスは取得しません。何が起こっているのか分かりません –

+0

実際のクラスは手に入れられますか? – TheRealChx101

関連する問題