2

我的 URLClassLoader 实现似乎只适用于 pc,但不适用于 Android。

try {

        Class<?> loadedClass = new URLClassLoader(
                new URL[] { new File("http://10.0.2.2/myphpfile.php").toURI().toURL() })
                .loadClass("MyClass");

        IInterface inter = (IInterface) loadedClass.getConstructor(
                String.class).newInstance("Hello");
        if (inter != null)
            System.out.println(inter.doSomething(2));
    } catch (Exception e) {
        e.printStackTrace();
    }

它工作得很好,但在android上我得到了

java.lang.ClassNotFoundException: MyClass

已设置 Internet 权限。

有谁知道我怎样才能让它工作?

4

1 回答 1

2

使用DexClassLoader而不是 URLClassLoader。

首先你需要你的 jar 文件包含一个 classes.dex,有这个答案

dx --dex --output="JarProjectWithDex.jar" "JarProject.jar"

然后你只需用 DexClassLoader 替换你的 URLClassLoader 并以同样的方式继续:

File jarFile = new File("/data/JarProjectWithDex.jar");
DexClassLoader loader = new DexClassLoader(jarFile.getPath(), getFilesDir().getPath(), null, this.getClassLoader());
Class<?> classToLoad = Class.forName("zordon.MegaZords", true, loader);
于 2014-11-28T18:14:55.393 回答