Android平台下使用lua调用Java代码经验总结[通俗易懂]

Android平台下使用lua调用Java代码经验总结

大家好,又见面了,我是全栈君。

动态语言以其执行的灵活性,可配置性。方便调试能够为开发带来极大的方便。假设用好了。能够极大的提高开发的效率。

怪不得像游戏开发这样复杂的软件开发里没有不集成脚本语言的。

当中,lua以其小巧,灵活。方便扩展,方便嵌入被用于大多数的游戏开发中。

对于我来说。对于一个充分认识到动态的力量的人来说,在软件开发里集成一种脚本语言成为一种非常重要的非常有意义的工作。

可是在Android平台。在试过Python后,发现尽管集成也不是什么困难的事,可是感觉它还是有点大,一个动态库就有3M多,python库还得自己去裁剪,

编译也不是非常方便。所以近期把注意力渐渐的放到了lua这样的工具上。对照了下lua。尽管lua没有像Python那么纯粹,可是感觉这样的劣势反到是成了它的优势。

不得不说在Android平台上,lua比python更有用。正所谓,没有最好。仅仅有最合适。

Python在追求纯粹的同一时候,却也阻碍了它的发展。

对于每一个视效率为生命的开发者来说。方便有用才是王道。

由于这意味着能够尽快的完毕软件的开发,能够减少软件开发的风险。能够少些开发的压力,能够少熬些夜,能够多点陪女朋友的时间(哈,程序猿那有女朋友啊)。

扯远了,回到标题,看下怎样在Android平台上用luajava来使lua和java融为一体。

luajava在android平台上已经有了移植,代码能够从https://github.com/mkottman/AndroLua下载。

至于编译和把luajava增加自己的项目中,不多讲,參考AndroLua的代码就能够了。以下来关注一下怎样用lua来和android进行交互:

最简单的一个样例:

function launchSetting(context)
    intent = luajava.newInstance("android.content.Intent")
    c = luajava.newInstance("android.content.ComponentName","com.android.settings", "com.android.settings.Settings")
    intent:setFlags(intent.FLAG_ACTIVITY_NEW_TASK);
    intent:setComponent(c)
    context:startActivity(intent)
end

该演示样例能够用来启动“设置”

一行一行来解释下:

    intent = luajava.newInstance("android.content.Intent")

创建一个Intent实例:相当于Java里的 Intent intent = new Intent()

    c = luajava.newInstance("android.content.ComponentName","com.android.settings", "com.android.settings.Settings")

创建一个ComponentName实例,相当于Java代码:ComponentName c = new ComponentName(“com.android.settings”, “com.android.settings.Settings”)

    intent:setFlags(intent.FLAG_ACTIVITY_NEW_TASK);

启动一个新的Activity实例

    intent:setComponent(c)

    context:startActivity(intent)

启动Activity

刚開始学lua的同学可能对”.”和”:”的有些陌生。这里简单解析一下,”.”是用来调用类的方法,而”:”是用来调用对象的方法。

请看以下这行代码:

    intent:setFlags(intent.FLAG_ACTIVITY_NEW_TASK);

上面的代码和以下的代码相当:

    intent.setFlags(intent,intent.FLAG_ACTIVITY_NEW_TASK);

假设写成:

intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK);

就会返回错误:

Not a valid OO function call

由于第一个參数intent.FLAG_ACTIVITY_NEW_TASK不是一个对象。

再来看一个样例:

require 'import'


button_cb = {}
function button_cb.onClick(ev)
    print('hello,world')
    launchSetting(activity)
end


local id = luajava.bindClass("sk.kottman.androlua.R$id")
local launch = activity:findViewById(id.launchButton)


buttonProxy = luajava.createProxy("android.view.View$OnClickListener", button_cb)
launch:setOnClickListener(buttonProxy)

这个样例展示了luajava.createProxy的使用,该样例注冊了一个按扭的Click的Listener

注意下面代码:

local id = luajava.bindClass(“sk.kottman.androlua.R$id”)

local launch = activity:findViewById(id.launchButton)

由于id是R.java里的一个静态类,所以不能写成:sk.kottman.androlua.R.id:

另外,注意类中类的引用方法,如:

android.view.View$OnClickListener

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116113.html原文链接:https://javaforall.net

(1)
上一篇 2022年1月25日 下午10:00
下一篇 2022年1月25日 下午10:00


相关推荐

  • 看透木马_看透别说透

    看透木马_看透别说透一、必备基础知识在介绍木马的原理之前有一些木马构成的基础知识我们要事先加以说明,因为下面有很多地方会提到这些内容。一个完整的木马系统由硬件部分、软件部分和具体连接部分组成。小知识:  “木马”全称是“特洛伊木马(TrojanHorse)”,原指古希腊士兵藏在木马内进入敌方城

    2022年10月14日
    3
  • bat批量删除空文件夹_如何建立bat文件夹

    bat批量删除空文件夹_如何建立bat文件夹@echooff&title清理空目录set/pPan=请输入要清理文件夹,回车确认:cls&echo即将开始清理。。。&ping0-n"3">nulcd/d%Pan%for/f"delims="%%ain(‘dir/ad/s/b’)do(dir/a-d/s/b"%%~a\*">nul2>nul..

    2025年12月7日
    4
  • JS中闭包的优缺点

    JS中闭包的优缺点先上段代码 函数 afunctiona vari 0 函数 bfunctionb alert i returnb 函数 cvarc

    2026年3月18日
    2
  • 欧拉筛法(线性筛)的学习理解

    前言在刚接触编程语言时,对于寻找素数,第一时间想到的便是二重循环暴力查找,其复杂度O(n),通过循环中只判断到根号n可以优化一些,不过复杂度也达不到预期。在数论的学习中,我学到了埃氏筛法,O(nloglogn)的算法,而在一些数据范围达到1e7这样的题目中,也很难让人满意,于是我便学习了欧拉筛法,也即O(n)的线性筛法。埃氏筛法埃氏筛法的基本思想:从2开始,将每个质数的倍数都…

    2022年4月5日
    76
  • Arduino TaskScheduler入门

    Arduino TaskScheduler入门#include<TaskScheduler.h>//回调函数声明,具体要执行的函数内容voidtask_1();//…voidtask_n();//计划任务声明,Task中要执行的函数名Taskt_end();//空任务,按需添加Taskt1(1000,10,&task_1);//任务名(间隔ms,执行次数,&执行函数)//…Tasktn(1000,TASK_FOREVER,&task_n);//TASK_ONCE,执.

    2022年8月31日
    5
  • 用testNG测试,可以做简单的并发测试

    用testNG测试,可以做简单的并发测试

    2021年5月12日
    109

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号