1

这是我想要实现的目标:

我正在构建一个需要插件感知的 Android 应用程序。我需要做的是从 Web 服务器下载 .java 文件,然后在运行时在我的应用程序中编译它们,然后将其加载到类路径中。我想使用 Java 是因为它易于使用,因为我可以像使用我的库存对象一样使用插件对象。

我见过 javax.tools 的编译方式,但在 DalvikVM 上不可用。什么是最好的替代品(以类似的方式工作)?

编辑:

我现在正在使用 .bsh-script。这在 JVM 上就像一个魅力,应该在 Android 设备上工作(我将在接下来测试):

package de.hotware.beanshell.test;

import bsh.EvalError;
import bsh.Interpreter;


public class BeanShellTest {

    public static interface InterfaceTest {

        public void sayHello();

    }


    public static void main(String[] args) {
        try {
            Interpreter interpreter = new Interpreter();
            InterfaceTest res = (InterfaceTest) interpreter.eval("import de.hotware.beanshell.test.BeanShellTest.InterfaceTest;" +
                    "new InterfaceTest() {" +
                    "public void sayHello() { System.out.println(\"hello\");}" +
                    "}");
            res.sayHello();
        } catch(EvalError e) {
            e.printStackTrace();
        }
    }

    public void test() {

    }

}
4

1 回答 1

3

你需要做两件事:

  1. 如果您在 JVM 中运行,您会做的所有事情。下载源代码,将其编译为 .class 文件javac或等效文件。
  2. 将类文件转换为 DEX 格式。这意味着dx在设备上运行程序,这是可行的,但它可能有点占用内存,尤其是对于较大的程序。

完成后,您可以使用DexClassLoader从 DEX 文件加载代码。

考虑到所有因素,我认为使用 BeanShell 会更好。

于 2013-06-07T04:50:31.490 回答