Вызов Lua скрипта из приложения для Android

позвольте мне прежде всего прояснить несколько вещей:

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

Итак, с этим покончено, вот что я пытаюсь сделать.

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

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

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

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

1 ответов


вы можете посмотреть на мой пример проекта 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!')