Вызов 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!')