2011-12-19 78 views
6

首先让我澄清几件事:从Android应用程序调用Lua脚本

我不想从命令行运行Lua脚本。
我并非试图从Lua中调用任何android功能

因此,以这种方式,这是我正在尝试做的。

从Android Activity直接或间接地调用Lua脚本(JNI/SL4A)并获取活动中的结果。

现在在看的SL4A文档,我看到几个缺点:

1)我找不到文件说,它可以让一个程序调用Lua。 2)它看起来像SL4A可能需要安装作为一个单独的应用程序(不是太无聊)。

我看到的唯一的其他选择是NDK交叉编译所有Lua,然后尝试以某种方式在C代码中调用它。

回答

7

你可能想看看我的示例项目AndroLua。它包含一个使用Android NDK直接嵌入Android应用程序的Lua解释器。成功将其嵌入到Android应用程序中,只需进行非常小的更改即可。

为了从您的应用程序中实际使用Lua,LuaJava也被捆绑在一起,允许您从Java使用Lua,反之亦然。

查看应用程序以查看示例,了解如何覆盖print函数以允许输出到TextView而不是控制台。

更新:加载模块

我假设你要加载在Lua实现的模块。模块加载的标准Lua技术像往常一样工作 - 您只需将package.path修改为您的应用程序数据目录(或任何要存储脚本/模块的位置)。

假设你有一个应用程序的数据目录中称为hello.lua模块:

$ adb shell 
# cd /data/data/sk.kottman.androlua 
# cat hello.lua 
module(..., package.seeall) 
function greet(name) 
    print('Hello ' .. name) 
end 
# 

然后尝试在解释器运行此代码:

-- add the data directory to the module search path 
package.path = '/data/data/sk.kottman.androlua/?.lua;'..package.path 
-- load the module 
require 'hello' 
-- run a function, should show "Hello Lua!" 
hello.greet('Lua!') 
+0

你能否澄清如何使用AndroLua向加载一个lua模块并从该模块中调用一个函数。谢谢 – Androider 2011-12-19 22:27:37

+0

我已经证实,这个工程。我也有兴趣能够从资源文件加载lua脚本,所以我已经发布这个作为一个单独的问题:http://stackoverflow.com/questions/8584678/does-andolua-have-a-way-to-pass -lua的脚本从 - 资源的文件 – Androider 2011-12-21 03:19:06