2011-12-19 13 views
6

mí Vamos en primer lugar aclarar algunas cosas:Calling Lua script desde una aplicación Android

No estoy tratando de ejecutar un script una Lua desde una línea de comandos.
No estoy tratando de invocar ninguna función de Android desde Lua

Así que con eso fuera del camino, esto es lo que estoy tratando de hacer.

Desde una actividad de Android, invoque directamente o indirectamente (JNI/SL4A) un script de Lua y recupere los resultados de la actividad.

Mira ahora en la documentación para SL4A veo un par de inconvenientes:

1) No puedo encontrar la documentación diciendo que permite una programación Lua llaman. 2) Parece que SL4A podría necesitar instalarse como una aplicación separada (no demasiado parecida).

La única otra opción que veo es hacer una compilación cruzada NDK de Lua y luego tratar de invocarlo en código C de alguna manera.

Respuesta

7

Es posible que desee ver mi proyecto de ejemplo AndroLua. Contiene un intérprete de Lua incrustado directamente en una aplicación de Android utilizando el NDK de Android. Solo se necesitaban cambios muy pequeños para integrarlo correctamente en la aplicación de Android.

Para utilizar realmente Lua desde su aplicación, LuaJava también se incluye para permitir el uso de Lua de Java y al revés.

Mire la aplicación para ver un ejemplo de cómo anulo la función print para permitir una salida a TextView en lugar de una consola.

Actualización: la carga de módulos

que asumen el módulo que desea cargar se ha implementado en Lua. Las técnicas estándar de Lua para la carga de módulos funcionan de la forma habitual; solo tiene que modificar el package.path en el directorio de datos de su aplicación (o donde desee almacenar sus scripts/módulos).

Imagine que tiene un módulo llamado hello.lua en el directorio de datos de aplicación:

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

A continuación, intente ejecutar este código en el intérprete:

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

Podría aclarar cómo se podría utilizar AndroLua que a cargar un módulo lua y llamar a una función desde ese módulo. Gracias – Androider

+0

He verificado que esto funciona. También estoy interesado en poder cargar guiones lua desde archivos de recursos, así que lo he publicado como una pregunta separada: http://stackoverflow.com/questions/8584678/does-andolua-have-a-way-to-pass -lua-scripts-from-resource-files – Androider

Cuestiones relacionadas