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