8

AndroidアプリケーションでアセットまたはSDカードの外部jarを使用しています。そのために、私はDexClassLoaderを使用しています。

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

クラスをロードするには:

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

それは本当にうまく機能しますが、今私は私のDexClassLoaderですべてのクラス名のリストを取得したいのですが、これはJavaで機能することがわかりましが、Androidではそのようなことはありません。

質問は、DexClassLoaderからすべてのクラス名のリストを取得する方法です。

4

1 に答える 1

13

classes.dex使用するファイルを含む.jarファイル内のすべてのクラスを一覧表示するDexFileにはDexClassLoader、たとえば次のようにします。

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);
}
于 2012-08-30T12:17:38.847 に答える