2011-12-19 39 views
6

Hãy để tôi làm rõ một số điều sau:Gọi Lua Script từ ứng dụng Android

Tôi không cố gắng chạy tập lệnh Lua từ dòng lệnh.
Tôi không cố gắng gọi bất kỳ chức năng android nào từ Lua

Vì vậy, với điều đó, tôi đang cố gắng thực hiện.

Từ một hoạt động Android gọi trực tiếp hoặc gián tiếp (JNI/SL4A) một kịch bản Lua và lấy lại kết quả trong hoạt động.

Bây giờ nhìn vào tài liệu cho SL4A tôi nhìn thấy một vài hạn chế:

1) Tôi không thể tìm thấy tài liệu nói rằng nó cho phép một lập trình gọi Lua. 2) Có vẻ như SL4A có thể cần phải cài đặt như một ứng dụng riêng biệt (không quá vô nghĩa).

Tùy chọn duy nhất khác mà tôi thấy là NDK cross biên dịch tất cả Lua và sau đó thử gọi nó bằng mã C theo một cách nào đó.

Trả lời

7

Bạn có thể xem dự án mẫu của tôi AndroLua. Nó chứa một trình thông dịch Lua được nhúng trực tiếp vào một ứng dụng Android bằng cách sử dụng NDK của Android. Chỉ những thay đổi rất nhỏ là cần thiết để nhúng thành công vào ứng dụng Android.

Để thực sự sử dụng Lua từ ứng dụng của bạn, LuaJava cũng được nhóm để cho phép bạn sử dụng Lua từ Java và vòng khác.

Nhìn vào ứng dụng để xem ví dụ về cách tôi ghi đè hàm print để cho phép xuất ra TextView thay vì bàn điều khiển.

Cập nhật: tải module

tôi giả sử các module bạn muốn nạp được thực hiện trong Lua. Các kỹ thuật Lua chuẩn cho việc tải mô-đun như bình thường - bạn chỉ cần sửa đổi package.path thành thư mục dữ liệu ứng dụng của bạn (hoặc bất cứ nơi nào bạn muốn lưu trữ các tập lệnh/mô-đun của bạn).

Hãy tưởng tượng rằng bạn có một module gọi là hello.lua trong thư mục dữ liệu ứng dụng:

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

Sau đó, hãy thử chạy mã này trong các thông dịch viên:

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

Ông có thể làm rõ thế nào người ta có thể sử dụng AndroLua để đến nạp một mô đun lua và gọi một hàm từ mô-đun đó. Cảm ơn – Androider

+0

Tôi đã xác minh rằng tính năng này hoạt động. Tôi cũng quan tâm đến việc có thể tải các tập lệnh lua từ các tệp tài nguyên, vì vậy tôi đã đăng câu hỏi này dưới dạng một câu hỏi riêng biệt: http://stackoverflow.com/questions/8584678/does-andolua-have-a-way-to-pass -lua-scripts-from-resource-files – Androider

Các vấn đề liên quan