2011-12-19 16 views
6

Pozwól mi najpierw wyjaśnić kilka rzeczy:Wywołanie skryptu Lua Z Android

Nie próbuję uruchomić skrypt Lua z linii poleceń.
Nie próbuję wywoływać żadnych funkcji systemu Android od Lua

Więc z tym na uboczu, oto, co próbuję zrobić.

Z działania na Androidzie wywołaj bezpośrednio LUB pośrednio (JNI/SL4A) skrypt Lua i uzyskaj wyniki w działaniu.

Teraz patrząc na dokumentacji SL4A widzę kilka wad:

1) Nie mogę znaleźć dokumentację mówiąc, że jeden pozwala programowo wywołać Lua. 2) Wygląda na to, że SL4A może wymagać instalacji jako osobnej aplikacji (niezbyt bezsensowne).

Jedyna inna opcja, którą widzę, to przekierowanie NDK do wszystkich Lua, a następnie spróbuj wywołać ją w jakiś sposób w kodzie C.

Odpowiedz

7

Możesz obejrzeć mój przykładowy projekt AndroLua. Zawiera interpreter Lua osadzony bezpośrednio w aplikacji systemu Android przy użyciu Android NDK. Do pomyślnego umieszczenia go w aplikacji na Androida potrzebne były tylko bardzo małe zmiany.

Aby faktycznie używać Lua z aplikacji, w pakiecie znajduje się również LuaJava, aby umożliwić używanie Lua z Java i odwrotnie.

Obejrzyj aplikację, aby zobaczyć przykład, jak zastąpić funkcję print, aby umożliwić wyjście do TextView zamiast konsoli.

Aktualizacja: ładowanie modułów

Zakładam moduł, który chcesz załadować jest realizowany w Lua. Standardowe techniki Lua do ładowania modułów działają jak zwykle - wystarczy zmodyfikować package.path do katalogu danych aplikacji (lub gdziekolwiek chcesz przechowywać swoje skrypty/moduły).

Wyobraź sobie, że masz moduł o nazwie hello.lua w katalogu danych aplikacji:

$ adb shell 
# cd /data/data/sk.kottman.androlua 
# cat hello.lua 
module(..., package.seeall) 
function greet(name) 
    print('Hello ' .. name) 
end 
# 

Następnie spróbuj uruchomić ten kod w tłumacza:

-- 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

Mógłbyś wyjaśnić, w jaki sposób można wykorzystać AndroLua się do załaduj moduł lua i wywołaj funkcję z tego modułu. Dzięki – Androider

+0

Sprawdziłem, że to działa. Interesuje mnie również możliwość ładowania skryptów lua z plików zasobów, dlatego wysłałem to jako osobne pytanie: http://stackoverflow.com/questions/8584678/does-andolua-have-a-way-to-pass -lua-scripts-from-resource-files – Androider

Powiązane problemy