加载远程Java类

时间:2014-05-12 21:49:57

标签: java android classloader

我构建了一个Android应用程序。

我使用广告平台,但我不确定我是否愿意坚持下去(也许我会决定稍后更改)。

为此,我想创建一个界面和一个实现它的类,调用平台的广告。

我的想法是,稍后我可以从我的服务器(使用反射)加载另一个类文件替换前一个。这样,我就可以“动态”改变广告平台(例如 - Admob / Airpush)。

有人知道如何使用Java加载远程类吗?

你有任何代码示例吗?

1 个答案:

答案 0 :(得分:1)

您需要创建自己的ClassLoader,查看How to use URLClassLoader to load a *.class file?

以下是一个示例(来自http://www.programcreek.com/java-api-examples/index.php?api=java.net.URLClassLoader,还有其他人使用托管网址):

private void invokeClass(String path, String name, String[] args) throws
        ClassNotFoundException,
        NoSuchMethodException,
        InvocationTargetException,
        MalformedURLException,
        InterruptedException,
        IllegalAccessException {
    File f = new File(path);
    URLClassLoader u = new URLClassLoader(new URL[]{f.toURI().toURL()});
    Class c = u.loadClass(name);
    Method m = c.getMethod("main", new Class[]{args.getClass()});
    m.setAccessible(true);
    int mods = m.getModifiers();
    if (m.getReturnType() != void.class || !Modifier.isStatic(mods) || !Modifier.isPublic(mods)) {
        throw new NoSuchMethodException("main");
    }
    m.invoke(null, new Object[]{args});
    m = null;
    System.gc(); // uh-oh
}