2011-12-19 1 views
6

mi permetta prima di tutto chiarire un paio di cose:Calling Lua script da un Applicazione per android

Io non sto cercando di eseguire uno script un Lua dalla riga di comando.
Non sto provando a richiamare alcuna funzione Android da Lua

Quindi, con quello fuori mano, ecco quello che sto cercando di fare.

Da un'attività Android richiama direttamente O indirettamente (JNI/SL4A) uno script Lua e recupera i risultati nell'attività.

Ora guardando la documentazione per SL4A vedo un paio di inconvenienti:

1) Non riesco a trovare la documentazione dicendo che permette una programmazione chiamano Lua. 2) Potrebbe sembrare che SL4A debba essere installato come applicazione separata (non troppo apparentemente).

L'unica altra opzione che vedo è NDK cross compilare tutto di Lua e quindi provare a richiamarlo in codice C in qualche modo.

risposta

7

Si consiglia di guardare il mio progetto di esempio AndroLua. Contiene un interprete Lua incorporato direttamente in un'applicazione Android utilizzando l'NDK di Android. Sono state necessarie solo piccole modifiche per incorporarlo correttamente nell'applicazione Android.

Per utilizzare effettivamente Lua dall'applicazione, LuaJava è anche in bundle per consentire l'utilizzo di Lua da Java e viceversa.

Guardare l'applicazione per vedere un esempio di come sovrascrivere la funzione print per consentire un'uscita a TextView anziché a una console.

Aggiornamento: il caricamento dei moduli

Suppongo che il modulo che si desidera caricare è implementato in Lua. Le normali tecniche Lua per il caricamento dei moduli funzionano come di consueto: basta modificare lo package.path nella directory dei dati dell'applicazione (o ovunque si voglia archiviare i propri script/moduli).

Immaginate di avere un modulo chiamato hello.lua nella directory dei dati dell'applicazione:

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

quindi provare l'esecuzione di questo codice l'interprete:

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

Potrebbe chiarire come si possa utilizzare AndroLua per a carica un modulo lua e chiama una funzione da quel modulo. Grazie – Androider

+0

Ho verificato che questo funziona. Sono anche interessato a caricare gli script lua da file di risorse, quindi ho postato questo come una domanda separata: http://stackoverflow.com/questions/8584678/does-andolua-have-a-way-to-pass risorsa-files -lua-scripts-da- – Androider