URLClassLoader使用Java而不是Android

时间:2014-03-20 17:48:22

标签: android classnotfoundexception urlclassloader

我的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

设置了互联网权限。

有没有人知道如何让它发挥作用?

1 个答案:

答案 0 :(得分:1)

使用DexClassLoader代替URLClassLoader。

首先你需要你的jar文件包含classes.dex,那里有this answer

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);