如何在Android应用程序中运行用户提供的任意代码?

时间:2015-01-24 13:29:10

标签: java javascript android

我编码的应用程序需要采用用户定义的代码(语言不是特别重要,因为用户永远不会看到语言,用户将使用类似可视脚本的东西)并运行该代码。代码将需要访问用Java编写的库,并创建变量等。用户提供的代码将与完整程序一样复杂。

我一直在寻找方法来解决这个问题。到目前为止,我在Java中发现了一些不同的方法,包括反射,javax.script,JavaCompiler,编写自己的解释器等等。从我读过的反射可能不会起作用,根据android包索引,android没有javax.script或JavaCompiler,但有些项目将Rhino和V8移植到android,我害怕写一个解释器,但是如果有必要的话。

我想知道的是,我是朝着正确的方向前进的吗?什么是最好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果语言不重要,您可以尝试使用Javascript。 校验: http://developer.android.com/reference/android/webkit/WebView.html#evaluateJavascript(java.lang.String, android.webkit.ValueCallback)

您可以使用addJavascriptInterface方法公开所有必需的系统功能(例如控制振动)。这允许您将对系统的访问限制为仅暴露的方法。

另一个选择(可能更好)是使用自己的解释器。无论如何,您将创建所有允许可视脚本的对象,只需定义与每个对象对应的java调用。这样可以防止用户运行任意代码。