从Android应用程序调用Lua脚本

时间:2011-12-19 07:43:41

标签: android lua

首先让我澄清一些事情:

我不是试图从命令行运行Lua脚本 我不是想从Lua调用任何android函数

因此,除此之外,我正在努力做到这一点。

从Android Activity直接或间接调用(JNI / SL4A)Lua脚本,并在活动中返回结果。

现在看一下SL4A的文档,我看到了一些缺点:

1)我找不到文档说它允许以编程方式调用Lua。 2)看起来SL4A可能需要作为单独的应用程序安装(不是太无用)。

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

1 个答案:

答案 0 :(得分: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!')