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

sou*_*esi 12 java android compilation dynamic 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;}

}
Run Code Online (Sandbox Code Playgroud)

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

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

Jes*_*son 9

ImagePlayground是一个开源的Android应用程序,使用Dexmaker和自定义编程语言来完成此任务.


Dur*_*dal 7

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

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

  • Yikes,动态编译用户输入的数据听起来像是一个难以破解的难题.您必须使用dexmaker解析该字符串以构建和使用"方程式"方法.即"2*4/6"你绝对可以使用dexmaker来动态构造一个方法,然后运行它,但是它很容易尝试像这样轻松解析.如果您可以访问Java-> JS桥接器,那么您可以使用类似mathjs(http://mathjs.org/)之类的东西,但即使它只会评估输入它的内容,而不是解析它. (2认同)