【问题标题】:Is it possible to execute a Java code string at runtime in Android?是否可以在 Android 运行时执行 Java 代码字符串?
【发布时间】:2013-03-27 10:23:39
【问题描述】:

我想从用户那里获取一行 Java 代码并在 Android 中执行它。例如:

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

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

有可能吗?如果是怎么办?

我研究过this 之类的链接。但它们是关于 JVM 而不是 Android Dalvik 的问题。

【问题讨论】:

  • Android 是一个操作系统。您使用 JAVA 为 Android 制作应用程序
  • @blackbelt 当我们说 Android 时,我们通常指的是 Dalvik 及其库
  • 我不确定任意 Java 代码,但 this questionthis one 看起来相似,如果要求只是简单的数学。 MVEL 应该处理您的示例字符串。
  • 如果你需要更大的东西,也许你应该试试 Rhino Javascript Engine。但是如果你想真正运行Java,我想这是不可能的。也许 HotStop 可以做到。

标签: java android eval execution


【解决方案1】:

你可以试试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();
    }
}

但要小心!在生产应用程序中使用它可能存在安全风险, 尤其是当您的应用与用户数据/文件交互时。

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    // 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());
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 2011-08-08
      • 2011-04-03
      • 2016-07-12
      • 2010-11-03
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      相关资源
      最近更新 更多