在Android的运行时执行嵌入Java的Groovy脚本

时间:2014-12-08 03:31:45

标签: java android groovy

从2.4版本开始,Groovy支持Android。我想在我的Android应用程序中运行嵌入Java的Groovy脚本。

本网站解释说这是可能的:http://melix.github.io/blog/2014/06/grooid2.html

  

适应Groovy语言的一个难点是,正如我们所做的那样   说,Groovy是一种高度动态的语言。它的一个功能是   在运行时执行脚本。那么如果我们想输入一个Groovy呢?   设备上的脚本,并直接在它上面执行?可能吗?   事实上,是的,有可能,因为你遵循这个过程:

     

你可以有一个用Groovy编写的应用程序,但最后,   一旦应用程序运行,您就拥有了Groovy源代码   想要执行。然后它需要编译类,调用dex   直接在设备上,将结果打包到一个jar文件中   本地文件系统,然后使用特殊的类加载器加载它。所以为什么   这是可能的,这个过程非常复杂,不简单,   但更重要的是,它非常缓慢。

我很高兴,无论速度如何,这确实是可能的。这里有一个示例项目:https://github.com/melix/grooidshell-example

不幸的是,我不太了解这个过程。我有一个相当小的项目,但我不确定在哪里可以看到。

你能否指出我在Android的运行时执行嵌入Java的Groovy脚本的正确方向?

1 个答案:

答案 0 :(得分:5)

仔细查看https://github.com/melix/grooidshell-example/blob/master/GroovyDroid/src/main/java/me/champeau/groovydroid/GrooidShell.java

创建一个DexFile(第71行)实例,在编译中添加字节码后处理器(第73行)以获取类的生成字节并将其转换为dex格式(第76行)并最终存储在dexfile实例中(第77行)。然后获取dalvik字节码(第91行),使用DexClasLoader(第136行)加载dalvik / dex类(第138行)。