从代码[API]中编译Android设备上的.java代码?

时间:2013-06-06 13:37:32

标签: android api compiler-construction runtime dalvik

这是我想要实现的目标:

我正在构建一个需要支持插件的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() {

    }

}

1 个答案:

答案 0 :(得分:3)

你需要做两件事:

  1. 如果你在JVM中运行,你会做的一切。下载源代码,使用javac或等效文件将其编译为.class文件。
  2. 将类文件转换为DEX格式。这意味着在设备上运行dx程序,这是可行的,但它可能有点内存需求,特别是对于较大的程序。
  3. 完成后,您可以使用DexClassLoader加载DEX文件中的代码。

    考虑到所有事情,我认为你最好使用BeanShell。