0

私は本当に一生懸命努力しましたが、この回答を読んでから、常に Class Not Found 例外が発生します https://stackoverflow.com/a/3024261

私は自分の瓶を走らせました

dx --dex --output=C:\classes.dex C:\MyAndroidLib.jar

dexファイルを取得しました

それから私は実行します

apt add C:\MyLib.jar C:\classes.dex

dex ファイルで jar を作成します。

次に、次のコードを書きました。

DexClassLoader classLoader = new DexClassLoader(
            destPath, dirPath +"/" , null, getClass().getClassLoader());
    Class<?> classToLoad = classLoader.loadClass("ClassImpl");

デバッグ時に、dex が classLoader 内 (mDexs メンバーの下) にあり、ClassImpl が内部にある唯一のクラスであることがわかります。

しかし、クラスが見つからないという例外が発生し続けます。

外部 jar から動的クラスをロードする作業サンプルを入手した人はいますか? 誰かが私の問題を知っていますか?

4

1 に答える 1

1

私はaaptを使用しませんでした... dexのみ。そして、クラスをロードし、メソッドを呼び出しました。

dex ファイル内を参照するには、次のコードを使用します。

DexFile dexfile = DexFile.loadDex(url_jar_path, 
        File.createTempFile("opt", "dex", context.getCacheDir()).getPath(), 0);

// Print all classes in the DexFile

Enumeration<String> classNames = dexfile.entries();

String classname = "";

while (true) {
    if (! classNames.hasMoreElements()) {
        break;
    }
    classname = classNames.nextElement();
}

クラス内を参照するには、次のコードを使用します。

Class class = dexclassloader.loadClass(ruta_clase_en_jar);

String name;

Method[] method_array = clase.getMethods();

for (Method i: method_array) {
    name = i.getName ();
}
于 2016-03-03T19:50:30.333 に答える