从 Android 应用程序中调用 Lua 脚本

首先澄清一些事情:

我不是尝试从命令行运行 Lua 脚本。

我不是尝试从 Lua 调用任何 Android 函数。

因此,我现在尝试的是:

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

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

1)我找不到文档说它让人可以以编程方式调用 Lua。

2)看起来 SL4A 可能需要安装为单独的应用程序(不太无缝)。

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

原文链接 https://stackoverflow.com/questions/8558413

点赞
stackoverflow用户221509
stackoverflow用户221509

你可能想要查看我的样例项目 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
#

然后尝试在解释器中运行以下代码:

-- 将数据目录添加到模块搜索路径中
package.path = '/data/data/sk.kottman.androlua/?.lua;'..package.path
-- 加载模块
require 'hello'
-- 运行函数,应该会显示 "Hello Lua!"
hello.greet('Lua!')
2011-12-19 11:03:25