12

我已经尝试在 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 对象的实例,这样我就可以调用该add()方法,例如,通过反射 API?

编辑 我尝试过 beanshell 解释,但事实证明它太慢了。我正在寻找更快的东西,就像 Janino

4

3 回答 3

9

ImagePlayground是一个开源的 Android 应用程序,它使用Dexmaker和自定义编程语言来执行此操作。

于 2013-07-09T05:27:21.820 回答
7

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

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

于 2013-07-09T01:39:24.013 回答
2

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

于 2013-07-09T01:52:10.300 回答