Вызов сценария Lua из приложения Android - PullRequest
6 голосов
/ 19 декабря 2011

Позвольте мне прежде всего уточнить некоторые вещи:

Я не пытаюсь запустить скрипт Lua из командной строки.
Я не пытаюсь вызывать какие-либо функции Android из Lua

Итак, теперь я пытаюсь сделать вот что:

Из действия Android вызывать прямо или косвенно (JNI / SL4A) скрипт Lua и возвращать результаты в действии.

Теперь, глядя на документацию для SL4A, я вижу несколько недостатков:

1) Я не могу найти документацию, в которой говорится, что он позволяет программно вызывать Lua.2) Похоже, что SL4A может потребоваться установить как отдельное приложение (не так уж и плохо).

Единственный другой вариант, который я вижу, - это NDK кросс-компилировать весь Lua и затем попытаться вызвать его в C-коде вкаким-то образом.

1 Ответ

7 голосов
/ 19 декабря 2011

Возможно, вы захотите взглянуть на мой пример проекта AndroLua . Он содержит интерпретатор Lua, встроенный непосредственно в приложение Android с помощью Android NDK. Только очень небольшие изменения были необходимы, чтобы успешно встроить его в приложение Android.

Для того, чтобы реально использовать Lua из вашего приложения, LuaJava также связан, чтобы позволить вам использовать Lua из Java и наоборот.

Посмотрите на приложение, чтобы увидеть пример того, как я переопределяю функцию 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!')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...