2011-12-19 29 views
6

まず、いくつかを明確にしましょう:AndroidアプリケーションからLuaスクリプトを呼び出す

コマンドラインからLuaスクリプトを実行しようとしていません。
私はLuaから任意のアンドロイド関数を呼び出そうとしていません

だからこそ、私は何をしようとしています。

Androidアクティビティから、直接または間接的に(JNI/SL4A)Luaスクリプトを呼び出し、その結果をアクティビティに戻します。私はそれが1、プログラムのLuaを呼び出すことができますと言ってドキュメントを見つけることができません)

1:

は今、私はいくつかの欠点を参照してくださいSL4Aのドキュメントを見ています。 2)SL4Aは別のアプリケーションとしてインストールする必要があるかもしれないようです(見た目はあまりありません)。

私が見る他の唯一のオプションは、NDKがすべてのLuaをクロスコンパイルして、何らかの方法でCコードで呼び出すことです。

答えて

7

私のサンプルプロジェクトAndroLuaを見てください。 Android NDKを使ってAndroidアプリケーションに直接埋め込まれたLuaインタプリタを含んでいます。それをAndroidアプリケーションに正常に埋め込むために必要な変更はごくわずかです。

アプリケーションから実際にLuaを使用するには、LuaJavaもバンドルされており、JavaからのLuaを使用することができます。

print関数をオーバーライドしてコンソールの代わりにTextViewに出力する例を見て、アプリケーションを見てください。

更新:ロード・モジュール

私はあなたがロードするモジュールはLuaの中で実装されていると仮定します。いつものように、モジュール読み込みのための標準的なLuaテクニックは、あなたのアプリケーションデータディレクトリ(またはあなたのスクリプト/モジュールを保存する場所)に合わせてpackage.pathを変更するだけです。

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

あなたは1がへにAndroLuaを使用することができますどのように明確でした:

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

はその後、インタープリタでこのコードを実行してみてください:

あなたはアプリケーションデータディレクトリにhello.luaと呼ばれるモジュールを持っていることを想像しluaモジュールをロードし、そのモジュールから関数を呼び出します。ありがとう – Androider

+0

私はこれが動作することを確認しました。私はリソースファイルからluaスクリプトを読み込むこともできるので、別の質問として投稿しました。http://stackoverflow.com/questions/8584678/does-andolua-have-a-way-to-pass -lua-scripts-from-resource-files – Androider

関連する問題