从Android应用程序调用Lua脚本
让我首先澄清几件事: 我没有试图从命令行运行Lua脚本。从Android应用程序调用Lua脚本,android,lua,Android,Lua,让我首先澄清几件事: 我没有试图从命令行运行Lua脚本。 我没有试图从Lua调用任何android函数 因此,有了这些,下面是我要做的 从Android活动直接或间接(JNI/SL4A)调用Lua脚本并在活动中返回结果 现在看一下SL4A的文档,我发现了一些缺点: 1) 我找不到这样的文档:它允许一个人通过编程方式调用Lua。 2) 看起来SL4A可能需要作为一个单独的应用程序安装(不太容易看到) 我看到的唯一其他选择是NDK交叉编译所有Lua,然后尝试以某种方式在C代码中调用它 您可能想看看我
我没有试图从Lua调用任何android函数 因此,有了这些,下面是我要做的 从Android活动直接或间接(JNI/SL4A)调用Lua脚本并在活动中返回结果 现在看一下SL4A的文档,我发现了一些缺点: 1) 我找不到这样的文档:它允许一个人通过编程方式调用Lua。 2) 看起来SL4A可能需要作为一个单独的应用程序安装(不太容易看到)
我看到的唯一其他选择是NDK交叉编译所有Lua,然后尝试以某种方式在C代码中调用它 您可能想看看我的示例项目。它包含一个使用Android NDK直接嵌入到Android应用程序中的Lua解释器。成功地将其嵌入到Android应用程序中只需要非常小的改动 为了从应用程序中实际使用Lua,还绑定了一个组件,允许您从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模块并从该模块调用函数。谢谢,我已经证实了这一点。我还对能够从资源文件加载lua脚本感兴趣,因此我将此作为一个单独的问题发布: