从Android应用程序调用Lua脚本

6

首先,让我澄清一些事情:

我并不是要从命令行运行Lua脚本。
我也没有尝试从Lua调用任何android函数。

现在,我要做的事情如下。

从一个Android Activity中直接或间接(JNI/SL4A)调用Lua脚本,并在Activity中获取结果。

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

1) 我找不到文档说它允许程序调用Lua。 2) 看起来SL4A可能需要单独安装作为一个应用程序(不太流畅)。

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

1个回答

7
您可能想看一下我的示例项目AndroLua。它包含一个Lua解释器,使用Android NDK直接嵌入到Android应用程序中。只需要进行非常小的更改即可成功地将其嵌入到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!')

你能否说明如何使用AndroLua加载一个lua模块并从该模块调用一个函数呢?谢谢。 - Androider
我已经验证了这个功能可行。我还希望能够从资源文件中加载lua脚本,因此我已将此作为一个单独的问题发布在http://stackoverflow.com/questions/8584678/does-andolua-have-a-way-to-pass-lua-scripts-from-resource-files。 - Androider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接