是否可以在 Android 运行时执行 Java 代码字符串?
Posted
技术标签:
【中文标题】是否可以在 Android 运行时执行 Java 代码字符串?【英文标题】:Is it possible to execute a Java code string at runtime in Android? 【发布时间】: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 question 和 this one 看起来相似,如果要求只是简单的数学。 MVEL 应该处理您的示例字符串。 如果你需要更大的东西,也许你应该试试 Rhino javascript Engine。但是如果你想真正运行Java,我想这是不可能的。也许 HotStop 可以做到。 【参考方案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());
【讨论】:
以上是关于是否可以在 Android 运行时执行 Java 代码字符串?的主要内容,如果未能解决你的问题,请参考以下文章