Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Android应用程序调用Lua脚本_Android_Lua - Fatal编程技术网

从Android应用程序调用Lua脚本

从Android应用程序调用Lua脚本,android,lua,Android,Lua,让我首先澄清几件事: 我没有试图从命令行运行Lua脚本。 我没有试图从Lua调用任何android函数 因此,有了这些,下面是我要做的 从Android活动直接或间接(JNI/SL4A)调用Lua脚本并在活动中返回结果 现在看一下SL4A的文档,我发现了一些缺点: 1) 我找不到这样的文档:它允许一个人通过编程方式调用Lua。 2) 看起来SL4A可能需要作为一个单独的应用程序安装(不太容易看到) 我看到的唯一其他选择是NDK交叉编译所有Lua,然后尝试以某种方式在C代码中调用它 您可能想看看我

让我首先澄清几件事:

我没有试图从命令行运行Lua脚本。
我没有试图从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脚本感兴趣,因此我将此作为一个单独的问题发布: