在Android上运行时编译字符串作为代码

时间:2013-07-09 01:26:00

标签: java android dynamic compilation dalvik

我已尝试在Android上使用Janino上的内容并得出结论,他们根本无法在Dalvik VM中运行。

所以我只想问一个简单的问题:在 Android 上,是否可以在运行时编译包含代码的字符串,以便在应用程序中使用。如果是这样,是否有任何图书馆可以让我这样做和/或你能分享一个如何做的代码示例吗?

对于(一个非常简单的)示例,如果我有一个包含以下内容的String对象:

public class Adder{

     int x;
     int y;

     public Adder(int x,int y) {
     this.x = x;
     this.y = y;
     }

     public int add() { return x+y;}

}

作为一个巨大的弦线。有没有办法可以处理它来创建Adder对象的实例,所以我可以通过Reflection API调用add()方法?

修改 我尝试了beanhell解释,但事实证明它太慢了。我正在寻找一些更快的东西,就像Janino

3 个答案:

答案 0 :(得分:9)

ImagePlayground是一款开源Android应用,使用Dexmaker和自定义编程语言完成此操作。

答案 1 :(得分:7)

你可以看看dexmaker:https://github.com/crittercism/dexmaker

它似乎是Android友好的等同于ASM或cglib;它生成.dex文件而不是.class文件。

答案 2 :(得分:2)

基本上你需要一个可以编程调用的Java / Dalvik编译器,类似于Java的javax.tools。简短的回答是,目前不可能。