android - URLClassLoader 适用于 Java,但不适用于 Android

标签 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

互联网权限已设置。

有人知道我如何让它工作吗?

最佳答案

使用DexClassLoader而不是 URLClassLoader。

首先你需要你的jar文件包含一个classes.dex,有this answer :

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

然后您只需将 URLClassLoader 替换为 DexClassLoader 并继续以相同的方式操作即可:

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

关于android - URLClassLoader 适用于 Java,但不适用于 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22541177/

相关文章:

java.lang.ClassNotFoundException : com. mysql.jdbc.Driver 异常

java - 如何从文件加载资源包,而不是从jar,相同的包基本名称

java - 是否可以在运行时加载库?

android - 如何检测android应用程序是否被强制停止或卸载?

java - 无法创建新的 Android Activity

android - 如何检测Android屏幕方向改变

使用 netbeans 运行 maven jgroups 项目构建时出现 java.lang.NoClassDefFoundError

java.lang.ClassNotFoundException : org/apache/xerces/jaxp/DocumentBuilderFactoryImpl

java - URLClassLoader 抛出“找不到类定义”异常

android - 如何设置历史应用程序的日期?