我正在尝试使用URLClassLoader
类将Java文件加载到我的android项目中。
但是当我运行以下代码时,我得到了ClassNotFoundError
:
package com.xyz.abc;
public class ConstantClassReader
{
public void readFile() throws MalformedURLException
{
String url = "file://"+Environment.getExternalStorageDirectory().getPath()+"/StringConstants.class";
URLClassLoader urlClassLoader = URLClassLoader.newInstance(new URL[]{new URL(url)});
Class simpleClass = null;
try {
simpleClass = urlClassLoader.loadClass("com.xyz.abc.StringConstants");
Constructor simpleConstructor = simpleClass.getConstructor();
Object simpleClassObj = simpleConstructor.newInstance();
Method method = simpleClass.getMethod("myMethod");
method.invoke(simpleClassObj);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
以下Java文件位于我的SD卡中:
package com.xyz.abc;
public class StringConstants{
public void myMethod(){
System.out.println("myMethod Loaded");
}
}
答案 0 :(得分:2)
类加载器加载类。
将Java源文件放在某处不会。
你必须编译该文件;并且也许那么你很幸运。但如果Android JVM允许您从任意位置加载类,我会感到非常惊讶。这尖叫声:"安全问题"到处都是。
根据您的要求,我会建议一个不同的解决方案,这是在普通Java属性之上。含义:似乎你只想提供一些配置"动态信息到您的Java应用程序。然后让该应用程序读取包含键/值对的属性文件。这(几乎)像往常一样;和不导致需要在任意位置加载类文件。
答案 1 :(得分:1)
你可以嵌入beanshell,加载java文件,实例并执行任何操作。
从sd
中访问任何其他普通文件的java文件