是否可以在Android中的运行时执行Java代码字符串?

时间:2013-03-27 10:23:40

标签: java android eval execution

我希望从用户那里获得一系列Java代码并在Android中执行它。例如:

String strExecutable = " int var; var = 4 + 3"
Object obj = aLibrary.eval(strExecutable);

这不是java脚本,我想运行java代码。

有可能吗?如果是的话怎么样?

我研究了像this这样的链接。但他们是关于JVM而不是Android Dalvik的问题。

3 个答案:

答案 0 :(得分:2)

你可以试试BeanShell!它非常简单,也适用于Android。只需使用jar库构建您的应用程序。

import bsh.Interpreter;
private void runString(String code){    
    Interpreter interpreter = new Interpreter();
    try {
         interpreter.set("context", this);//set any variable, you can refer to it directly from string
         interpreter.eval(code);//execute code
    }
    catch (Exception e){//handle exception
        e.printStackTrace();
    }
}
  

但要小心!在生产应用程序中使用此可能存在安全风险,   特别是如果您的应用与用户数据/文件进行交互。

答案 1 :(得分:1)

您可以尝试这样的事情:

// Code Execute, Khaled A Khunaifer, 27 March 2013
class CodeExcute
{
    public static void execute (String[] commands, String[] headers)
    {
        // build commands into new java file
        try
        {
            FileWriter fstream = new FileWriter("Example.java");
            BufferedWriter out = new BufferedWriter(fstream);

            out.write("");

            for (String header : headers) out.append(header);

            out.append("class Example { public static void main(String args[]) { ");

            for (String cmd : commands) out.append(cmd);

            out.append(" } }");

            out.close();
        }
        catch (Exception e)
        {
            System.err.println("Error: " + e.getMessage());
        }

        // set path, compile, & run
        try
        {
            Process tr = Runtime.getRuntime().exec(
               new String[]{ "java -cp .",
                  "javac Example.java",
                  "java Example" } );
        }
        catch (Exception e)
        {
            System.err.println("Error: " + e.getMessage());
        }

    }
}

答案 2 :(得分:0)

您可以使用JavaScript代码并使用Rhino Lib来执行。 use Rhino