2011-12-19 46 views
6

首先讓我澄清幾件事:從Android應用程序調用Lua腳本

我不想從命令行運行Lua腳本。
我並非試圖從Lua中調用任何android功能

因此,以這種方式,這是我正在嘗試做的。

從Android Activity直接或間接地調用Lua腳本(JNI/SL4A)並獲取活動中的結果。

現在在看的SL4A文檔,我看到幾個缺點:

1)我找不到文件說,它可以讓一個程序調用Lua。 2)它看起來像SL4A可能需要安裝作爲一個單獨的應用程序(不是太無聊)。

我看到的唯一的其他選擇是NDK交叉編譯所有Lua,然後嘗試以某種方式在C代碼中調用它。

回答

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!') 
+0

你能否澄清如何使用AndroLua向加載一個lua模塊並從該模塊中調用一個函數。謝謝 – Androider 2011-12-19 22:27:37

+0

我已經證實,這個工程。我也有興趣能夠從資源文件加載lua腳本,所以我已經發布這個作爲一個單獨的問題:http://stackoverflow.com/questions/8584678/does-andolua-have-a-way-to-pass -lua的腳本從 - 資源的文件 – Androider 2011-12-21 03:19:06