我的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
设置了互联网权限。
有没有人知道如何让它发挥作用?
答案 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);