博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
探究 lua 在 Android 中的应用
阅读量:5940 次
发布时间:2019-06-19

本文共 2374 字,大约阅读时间需要 7 分钟。

根据前面的文章 可以大概了解 Lua 。在 Android(移动设备)中,可以通过灵活加载 Lua 脚本,使应用更加灵活,轻松面对多变的需求。luajava 在 jni 层主要实现了5个方法,借助这5个方法lua几乎可以使用所有的java类了。

Java 和 lua 交互

关于 java 和 lua 交互的大概有两个项目。 一个是 ,通过 java 的 jni 功能,java 与 c 交互,然后 c 调用 lua ,延伸出来的有 。还有在 Android 平台的 lua 编辑器 ,用来开发 Android。

还有一个 ,纯 java 实现的 Lua 解释器,基于 Lua 5.2.x。前面介绍的 LuaSdkView 就是基于 luaj 修改的。在 lua 调用任意 java 类方面,LuaSdkView 实现了一些通用的类来创建java对象,调用方法。

接下来看 luaj 的具体使用。

java 调用 lua

hello.lua 文件

print '----hello.lua---'function sum( num1, num2 )    return num1 + num2endfunction getName()    return 'hanks'end复制代码

Test.java 文件

// 加载 lua 文件Globals G = JsePlatform.standardGlobals();LuaValue scriptValue = G.load("print 'hello, world'");scriptValue.call();// 打印出 hello, worldG.get("dofile").call(LuaValue.valueOf("hello.lua")); // 打印出 ----hello.lua---LuaValue sumFuc = G.get("sum");LuaValue sum = sumFuc.call(LuaValue.valueOf(5), LuaValue.valueOf(3));System.out.println(sum.toint()); // 打印出 8LuaValue getNameFun = G.get("getName");LuaValue name = getNameFun.call();System.out.println(name.tojstring());  // 打印出 hanks复制代码

lua 调用 java

直接调用

local Thread = luajava.bindClass('java.lang.Thread')print(Thread) // 打印 class java.lang.Thread复制代码

定义 hyperbolic.java

public class hyperbolic extends TwoArgFunction {    public hyperbolic() {    }    public LuaValue call(LuaValue modname, LuaValue env) {        LuaValue library = tableOf();        library.set("sinh", new sinh());        library.set("cosh", new cosh());        env.set("hyperbolic", library);        return library;    }    static class sinh extends OneArgFunction {        public LuaValue call(LuaValue x) {            return LuaValue.valueOf(Math.sinh(x.checkdouble()));        }    }    static class cosh extends OneArgFunction {        public LuaValue call(LuaValue x) {            return LuaValue.valueOf(Math.cosh(x.checkdouble()));        }    }}复制代码

testhyperbolic.lua 进行调用

require 'hyperbolic'print('hyperbolic', hyperbolic)print('hyperbolic.sinh', hyperbolic.sinh)print('hyperbolic.cosh', hyperbolic.cosh)print('sinh(0.5)', hyperbolic.sinh(0.5))print('cosh(0.5)', hyperbolic.cosh(0.5))复制代码
Globals globals = JsePlatform.standardGlobals();globals.loadfile("testhyperbolic.lua").call();/* 打印hyperbolic  table: 61e717c2hyperbolic.sinh function: sinhhyperbolic.cosh function: coshsinh(0.5)   0.5210953cosh(0.5)   1.127626*/复制代码

文章来自:

转载于:https://juejin.im/post/5beeeaa651882546150a954f

你可能感兴趣的文章
使用 GPUImage 实现一个简单相机
查看>>
CoinWhiteBook:区块链在慈善事业中的应用
查看>>
Mac上基于Github搭建Hexo博客
查看>>
What does corn harvester involve?
查看>>
阿里云服务器ECS开放8080端口
查看>>
前端常用排序详解
查看>>
Spring中实现监听的方法
查看>>
使用Tooltip会出现一个问题,如果行上出现复选框
查看>>
11.03T1 DP
查看>>
P2924 [USACO08DEC]大栅栏Largest Fence
查看>>
jQuery操作table tr td
查看>>
工作总结:MFC自写排序算法(升序)
查看>>
螺旋队列问题之二
查看>>
扩展运算符和解构赋值的理解
查看>>
手机H5显示一像素的细线
查看>>
Menu 菜单栏
查看>>
Integer跟int的区别(备份回忆)
查看>>
集合解析
查看>>
详解分布式应用程序协调服务Zookeeper
查看>>
软件工程之构建之法
查看>>